x86汇编debug记录
本文基于x86汇编语言,MASM汇编器。
1.MASM汇编器只支持汇编文件名<=8个字符的.asm文件
2.数据段可以用xxx db 100 dup('y')预定义空间,预定义空间中存放的是100个'y'字符,特殊字符'?'表示空,'$'表示字符串结尾
3.向内存写立即数时,需要指明mov的数据大小,要在mov和操作数之间加上byte ptr或word ptr,如:
mov byte ptr [si+bx],'$'
4.DOS的int 21h中断指令有很多用法,根据ah寄存器中的值执行,如:
- ah=02h,输出dl寄存器中的单个字符
- ah=09h,输出dx寄存器中的字符串
- ah=07h,输入单个字符到al寄存器
- ah=0ah,输入字符串,保存到dx寄存器所指位置
- ……
5.条件跳转都是短跳转(-128~127字节范围),可以通过巧妙安排各代码段的顺序避免报"jump out of range"的错,不行的话再借用jmp指令,或多级跳转
6.在8086下,压栈和弹栈必须使用16位寄存器(如ax,bx),不能使用al,bl等
7.div指令默认被除数与除数位数,若除数存放在8位bl寄存器,则被除数在16位ax寄存器;若除数在16位bx寄存器,则被除数在dx:ax两个16位寄存器中;除法后,余数存放在bh,商存放在bl
8.有循环的代码中,注意循环前是否已经初始化相应的寄存器和变量
9.代码段的assume是伪指令,一定要真正执行mov指令将对应段寄存器与定义的段位置相连
10.特殊字符:0ah('\n'),0dh('\r'),1bh('\x1b',esc键)
11.注意重复定义的问题,变量不区分大小写,除大小写外相同的变量名视为相同
12.以字母开头的16进制数之前要加0,否则会被当做未定义的符号处理
posted on 2021-04-11 00:47 Mju_halcyon 阅读(113) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构