16位汇编学习记录总结(2)
第十一节
NEG OPRD 取补指令
操作数为-128 和-32768取补 操作数不变 OF=1
操作数为0时 求补运算的结果使CF=0,其他情况为1
操作数为双字时:DXAX 则
NEG DX
NEG AX
SBB DX,0
CMP OPRD1,OPRD2 比较指令,和减法一样运算,但结果不送到OPRD1影响全部标志位
根据ZF是否置位来判断两者是否相等
双精度数操作:
通常DX存放高位字 AX放低位字
MOV AX,X
MOV DX,X+2
ADD AX,Y
ADC DX,Y+2 ;高位加,这里用ADC加上进位CF数值,同样SBB用在高位减法
从低位开始加、减。然后高位相加用ADC、SBB加上进位或减去借位
DX高16位 AX低16位
当前数段DS 为1B00H,偏移地址2000H单元存有内容0FF10H和8000H的指针,它们是16位变量的偏移地址和段地址,将该变量装入AX
MOV BX,[2000H] ;直接寻
MOV ES,[2002H]
MOV AX,ES:[BX]
除了立即寻,操作数必须含有一个通用寄存器
第十二节
;;INC WORD PTR BUF[BX] 是正确的,将BUF BX偏移处数据加1
乘除法运算指令
无符号数乘法
MUL OPRD 另一个操作数隐含在AL或AX中,OPRD不能为立即寻址
高位不为0则CF=1,OF=1
有符号数乘法
IMUL OPRD 符号扩展后相乘 ,高位不为FF则CF=1,OF=1
字节相乘AH放高半部分,字相乘DX放高半部分
除法指令
被除数总是隐含在寄存器AX中(除数8位)或DX,AX中(除数16位)
无符号除法指令
DIV OPRD
字节操作表示:(AL)--->(AX)/(OPRD)的商,(AH)--->(AX)/(OPRD)的余数
字操作表示:(AX)--->(DX,AX)/(OPRD)的商,(DX)--->(DX,AX)/(OPRD)的余
有符号除法
IDIV PORD
符号扩展指令 :不影响标志位
字节转换字指令
CBW 字节扩展为字
把AL中的符号扩展到寄存器AH, 87H--->FF87H ,34H--->0034H
CWD 字扩展为双字
AX中的符号扩展到DX
**立即数不需要扩展
第十四节
逻辑运算指令
否操作指令
NOT OPRD OPRD取反后回送给OPRD可以是通用寄存器,也可以是存储器操作数,不影响标志位
与操作指令
AND OPRD1,OPRD2
执行后CF=0,OF=0
AND AX,AX CF=0相当于CF清零操作,若干位清零操作
或操作指令
OR OPRD1,OPRD2
CF=0,OF=0 PF、ZF、SF反应运算结果标志AF未定义 ,用于若干位保持不变
异或操作指令
XOR OPRD1,OPRD2
和OR一样,若干位保持不变,若干位取反操作
测试指令
TEST OPRD1,OPRD2
和XOR相似,把两操作数按位与,但结果不回送到OPRD1,用于检测某些位是否为1
检测AL中位6或位2是否有一位为1
TEST AL,010000100B 都为0 ,ZF=1
测试AL中第2位是否为1,先去反,为1则跳到EXIT执行
MOV DL,AL
NOT DL
TEST DL,00000100B
JE EXIT
第十五节
移位指令:移一次以上,m放cl中
SAL OPRD,m
SHL OPRD,m
算数左移和移逻辑左移一样,末位补零。左移1位相当于*2
SAR OPRD,m
算数右移,每移一位,左边的符号位保持不变,移出的最低位进入标志位,右移移位相当于/2
SHR OPRD,m
逻辑右移,低位进CF,左边补0
循环移位指令
循环右移
ROL OPRD,m
ROR OPRD,m
同时送CF、右移1位
RCL OPRD,m
RCR OPRD,m
先进CF,带进位循环右移,只影响CF和OF
例子:
MOV CL,4
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,BL
第十六节
转移指令
无条件转移指令
(1)无条件段内直接转移指令
JMP NEXT(语句标号)
NEXT: MOV AX,BX
(2)无条件段内简介转移指令
JMP OPRD(寄存器,字存储单元)
(3)无条件段间直接转移指令
JMP FAR PTR 标号
EXIT 是定义在另一个代码段中的标号
(4)无条件段间间接移指令
JMP DWOD PTR [1234H] 高字节内容送CS,低字节内容送IP ,DWOD双字
1、I/O映像区:也属于存储单元,但始终保持和外部I/O数据保持一致,特性I 区只读。我们常说的I0.0、Q0.0、iw0等为I/O映像地址。
2、外部实际物理地址:实际的I/O地址,没有存储区。
3、直接寻址:CPU访问I/O映像区地址里的内容
4、立即寻址:CPU跳过I/O映像区直接访问外设地址的内容
5、间接寻址:CPU访问的存储区域里放的数据作为地址,这个地址指向的存储单元内容为最终访问的目标。
6、指针:所谓指针也是存储单元,但它的内容是存储单元的地址。
第十八节
循环指令
(1)计数循环指令
LOOP 标号 CX=CX-1;CX=0 循环结束
相当于 DEC CX
JNZ 标号
(2)等于/全零循环指令
NEXT:
CMP AX,BX
LOOPE NEXT
当CX不为0或相等时跳转
LOOPZ
CX为零且ZF等于1,顺序执行
(3)不等于/非零循环
LOOPNE 标号
LOOPNZ 标号
(4)跳转指令
JCXZ 标号
当CX等于0时转移到标号,通常用在循环的前面
例:
block: 9,10,2,3,11,12
mov bx,offset block
mov ax,[bx]
inc bx
mov cx,99
next:
cmp ax,[bx]
jg max
mov ax,[bx]
max:
inc bx
loop next
mov max,ax