11、在某子程序的开始处要保护AX,BX,CX,DX四个寄存器信息,在子程序结束时要恢复这四个寄存器信息。例如保护现场程序为: PUSH AX PUSH BX ;保护现场 PUSH CX PUSH DX …… { }恢复现场 试写出恢复现场时的指令序列。 12、用三种方法实现将AX中的数清零。(每种方法用一条指令) 13、写出指令序列,将DX的第0位、第5位取反,第2位清零,第3、4位置1。 14、写出对存放在DX和AX中的双字长数乘以8的指令序列。 15、写出求一个数绝对值的宏定义。
时间: 2024-02-25 17:55:13 浏览: 101
11、恢复现场时的指令序列为:
```
POP DX ;恢复DX寄存器的值
POP CX ;恢复CX寄存器的值
POP BX ;恢复BX寄存器的值
POP AX ;恢复AX寄存器的值
```
12、将AX中的数清零的三种方法:
```
XOR AX, AX ;方法1:使用异或指令
MOV AX, 0 ;方法2:将立即数0传送给AX寄存器
SUB AX, AX ;方法3:将AX寄存器中的值减去自身的值
```
13、将DX的第0位、第5位取反,第2位清零,第3、4位置1的指令序列为:
```
MOV CX, 21H ;将二进制数 0010 0001 传给CX寄存器
NOT DX ;将DX寄存器中的所有位取反
AND DX, CX ;将DX寄存器中第0位、第5位清零,第2位保持不变,第3、4位都置为1。
```
14、将DX和AX中的双字长数乘以8的指令序列为:
```
SHL AX, 1 ;将AX中的数左移一位,相当于乘以2
SHL AX, 1 ;再将AX中的数左移一位,相当于乘以2的平方
SHL AX, 1 ;再将AX中的数左移一位,相当于乘以2的立方
SHL DX, 1 ;将DX中的数左移一位,相当于乘以2
SHL DX, 1 ;再将DX中的数左移一位,相当于乘以2的平方
SHL DX, 1 ;再将DX中的数左移一位,相当于乘以2的立方
```
15、求一个数绝对值的宏定义:
```
ABS MACRO num
MOV AX, num ;将num传给AX寄存器
SAR AX, 15 ;算出AX寄存器的符号位,0表示正数,-1表示负数
XOR AX, num ;如果是负数,就将num取反,否则不变
SUB AX, num ;如果是负数,就再次将num取反,否则不变
ENDM
```
使用方法:在程序中定义宏后,可以通过 `ABS num` 来调用宏求num的绝对值,例如:
```
ABS -5 ;将-5的绝对值求出来
```
阅读全文