指令中不使用物理地址,而是使用逻辑地址,由总线接口单元BIU按需要根据段值和偏移自动形成20位物理地址。
寄存器相对寻址方式中,基址或变址寄存器名一定要放到方括号中,而位移可不写在方括号中。
下面两条指令源操作数的寻址方式是相同的,表示的形式等价:
mov ax, [si + 3]
mov ax, 3[si]
对于基址加变址寻址方式,下列表示形式等价:
mov ax, [bx + di]
mov ax, [di][bx]
对于相对基址加变址寻址方式,下列表示形式等价:
mov ax, [bx + di + 1234h]
mov ax, 1234h[bx + di]
mov ax, 1234h[bx][di]
mov ax, 1234h[di][bx]
地址传送指令:
LEA REG,OPRD 将操作数OPRD的有效地址传送到操作数REG。
LDS REG,OPRD OPRD是32位存储器操作数,高字存到DS,低字存到REG
LES与LDS类似
lahf safh 将标识寄存器的低8位放到ah中,或将af中的内容设为标识寄存器的低8位
mul imul div idiv
符号扩展指令:CBW CWD
在无符号数除之前,不宜用CBW或CWD指令扩展符号位,一般采用XOR指令清高8位或高16位。
(x * y + z - 1024) / 75 x,y,z均为16位带符号数
mov ax, x
imul y
mov cx, ax
mov bx, dx
mov ax, z
cwd
add ax, cx
adc dx, bx
sub ax, 1024
sbb dx, 0
mov cx, 75
idiv cx
异或操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位置取反的场合。
测试指令test,这条指令和指令and类似,也两个操作数进行按位“与”,但结果不送到操作数中,仅仅影响标志。
sal, shl, sar, shr 其中sal与shl共用同一个机器指令。shr逻辑右移指令
循环移位指令 rol ror rcl rcr
将al的高4位与低4位交换:
mov cl, 4
rol al, cl
将al的最低位送入bl的最低位,仍保持al不变:
ror bl, 1
ror al, 1
rcl bl, 1
rol al, 1
loope==loopz loopne==loopnz
寄存器相对寻址方式中,基址或变址寄存器名一定要放到方括号中,而位移可不写在方括号中。
下面两条指令源操作数的寻址方式是相同的,表示的形式等价:
mov ax, [si + 3]
mov ax, 3[si]
对于基址加变址寻址方式,下列表示形式等价:
mov ax, [bx + di]
mov ax, [di][bx]
对于相对基址加变址寻址方式,下列表示形式等价:
mov ax, [bx + di + 1234h]
mov ax, 1234h[bx + di]
mov ax, 1234h[bx][di]
mov ax, 1234h[di][bx]
地址传送指令:
LEA REG,OPRD 将操作数OPRD的有效地址传送到操作数REG。
LDS REG,OPRD OPRD是32位存储器操作数,高字存到DS,低字存到REG
LES与LDS类似
lahf safh 将标识寄存器的低8位放到ah中,或将af中的内容设为标识寄存器的低8位
mul imul div idiv
符号扩展指令:CBW CWD
在无符号数除之前,不宜用CBW或CWD指令扩展符号位,一般采用XOR指令清高8位或高16位。
(x * y + z - 1024) / 75 x,y,z均为16位带符号数
mov ax, x
imul y
mov cx, ax
mov bx, dx
mov ax, z
cwd
add ax, cx
adc dx, bx
sub ax, 1024
sbb dx, 0
mov cx, 75
idiv cx
异或操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位置取反的场合。
测试指令test,这条指令和指令and类似,也两个操作数进行按位“与”,但结果不送到操作数中,仅仅影响标志。
sal, shl, sar, shr 其中sal与shl共用同一个机器指令。shr逻辑右移指令
循环移位指令 rol ror rcl rcr
对于不带进位的循环移位指令而言,如果操作数是8位,那么在移位8次后,操作数就能复原;如果操作数是16位,那么在移位16次后,操作数就能复原。对于带进位的循环移位指令而言,如果操作数是8位,那么在移位9次后,操作数就能复原;如果操作数是16位,那么在移位17次后,操作数就能复原。
将al的高4位与低4位交换:
mov cl, 4
rol al, cl
将al的最低位送入bl的最低位,仍保持al不变:
ror bl, 1
ror al, 1
rcl bl, 1
rol al, 1
loope==loopz loopne==loopnz