1、请说说CF的用途,至少给出使CF清零的三种方法。
答:
1 配合条件转移指令进行条件转移
2 配合移位指令实现操作数之间的位转移
3 常用子程序的出口参数,如DOS磁盘文件管理功能调用
CF清零的三种方法:
1 CLC
2 CMP AX,0
3 ADD AX,0FFFFH
2、MOV AX,0可使寄存器AX清零,另外再写出三条可使AX清零的指令。
答:
1 XOR AX,AX
2 SUB AX,AX
3 AND AX,0
3、设DATA1存放在AL的低4位,DATA2存放在AH的低4位,DATA3存放在SI的低4位,DATA4存放在SI的高4位。现要把这四个数据合并为16位,并存放到DX寄存器中。存放要求:DH:DATA1,DATA2;DL:DATA3,DATA4
请读懂并比较下面的2种实现方法的汇编代码,并添加注释:
…
; 将DATA1存放在DH
MOV DH,AL
; 设置循环计数器为4
MOV CL,4
; 将DH向左循环移位4个位置,相当于将DH的低4位清零
SHL DH,CL
; 将AH的低4位保留,其余位清零
AND AH,0FH
; 将DH和AH进行逻辑或操作,将DATA1和DATA2合并
OR DH,AH
; 将DATA3, DATA4合并后的结果存放在AX寄存器中
MOV AX,SI
; 将AX向左循环移位1个位置
SHL AX,1
; 将DL向左循环移位1个位置,并通过进位标志RCL进行进位处理
RCL DL,1
; 将AX向左循环移位1个位置
SHL AX,1
; 将DL向左循环移位1个位置,并通过进位标志RCL进行进位处理
RCL DL,1
; 将AX向左循环移位1个位置
SHL AX,1
; 将DL向左循环移位1个位置,并通过进位标志RCL进行进位处理
RCL DL,1
; 将AX向左循环移位1个位置
SHL AX,1
; 将DL向左循环移位1个位置,并通过进位标志RCL进行进位处理
RCL DL,1
; 将DL的高4位清零
AND DL,0FH
; 将DL和AL进行逻辑或操作,将DATA3和DATA4合并
OR DL,AL
; 将存放合并后的结果的AX寄存器的值保存到DX寄存器中
MOV AX,SI
; 将AX向右循环移位4个位置
ROR AX,CL
; 将DX的低8位设置为AH的值
MOV DL,AH
…
另外一种写法
…
; 设置循环计数器为4
MOV CL,4
; 将AL向左循环移位4个位置,相当于将AL的低4位移到高4位
ROL AL,CL
; 将AX的低4位清零
AND AX,0FF0H
; 将AH存放到DH
MOV DH,AH
; 将AH和AL进行逻辑或操作,将DATA1和DATA2合并
OR DH,AL
; 将DATA3, DATA4合并后的结果存放在AX寄存器中
MOV AX,SI
; 将AX向右循环移位4个位置
ROR AX,CL
; 将AH的值存放到DL寄存器中
MOV DL,AH
…
两种实现方法的关键区别在于数据的合并方式和移位操作的次数.