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   Mju_halcyon  阅读(113)  评论(0编辑  收藏  举报

编辑推荐:
· 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语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示