1,中括号 []
例:ADD AL , [SI]
其中,[SI] 表示寄存器间接寻址。
也就是说,与AL中内容相加的加数,不是SI寄存器的内容,而是以SI的内容作为地址指针的内存操作数。
假设SI的内容是1234H,这条加法指令,不是将1234H加到AL里(也加不了,数据类型不对),而是以1234H作为地址,从内存的数据段(DS所指)中,段内偏移地址为1234H的那个内存单元中取出一个字节的数据来,加到AL中。
例:MOV [20H], AL,
是将AL中的内容传送到内存里的一个单元中去。这个单元的有效地址就是[20H]。
这里,加了方括号的20H,不是运算所用的数据,而是数据的地址。
注:8086汇编中,能加方括号的只有4个寄存器:SI, DI, BX, BP。
2 “$”指定当前地址
例:list db 1,2,3,4,5
listSize=($-list);注:db表示一个字节,所以相减之后得到list长度,但有的dw(双字节),dd(四字节),要相应的除以2,4.
3,算术运算符(+-*/),
注:算术运算符只能对常亮进行运算,当进行运算的量为变量时,要使用汇编语句,SUB ADD DIV MUL。
4,算术运算指令
1)inc 加一指令
例:inc Count :Count=Count+1
2)dec 减一指令
例:dec Count :Count=Count-1;
3)shr 移位指令,右移,除(无符号数)
例:shr ebx ,1; ebx=ebx/2
4)shl 移位指令 左移,乘 (无符号数)
例:shl ebx ,1;ebx=ebx*2
5)sar 移位指令 右移, 除(有符号数)
6)sal 移位指令 左移 ,乘(有符号数)
5, .xor 亦或操作
xor eax,eax ;将eax赋值为0,与mov eax ,0等效,但xor操作更快。