本文基于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,否则会被当做未定义的符号处理