存器中每个位的内容。
0001000000000001 + 0010000011111111
0011000100000000-----3100H CF=0;AF=1;SF=0;ZF=0;OF=0 PF=0(只与运算结果的低8位有关)
3.76 设计一个程序段,将AX和BX中的8位BCD数加CX和DX中的8位BCD数(AX和CX是最高有效寄存器),加法以后的结果存入CX和DX中。
PUSH AX PUSH CX MOV AX,DX
ADD AL,BL;低字节相加 DAA ;低字节调整 MOV CL,AL MOV AL,AH
ADC AL,BH; 高字节相加 DAA ;高字节调整 MOV DH,AL
MOV DL,CL;(BX)+(DX)和放到DX中 POP CX POP AX
ADC AL,CL;低字节相加 DAA ;低字节调整 MOV CL,AL MOV AL,AH
ADC AL,CH; 高字节相加 DAA ;高字节调整
MOV CH,AL;(AX)+(CX)和放到CX中
3-81 设计一个程序段,将AX中的最右4位置1,将AX中的最左3位清0,并且把AX中的7、8、9位取反。 OR AX,000FH
AND AX,1FFFH
XOR AX,0380H; 01C0H 0000 0011 1000 0000 0000 0001 1100 0000 3.82 选择正确的指令以实现下列任务 (1)DI右移3位,再把0移入最高位
(2)AL中的所有位左移1位,使0移入最低位 (3)AL循环左移3位
(4)DS带进位位循环右移1位
第 6 页 共 8 页
答:(1)MOV CL,3
SHR DI,CL (2)SAL AL,1 (3)MOV CL,3 ROL AL,CL
(4)RCR DX,1
3-86 用串操作指令设计实现如下功能的程序段:先将100个数从6180H处搬移到2000H处;再从中检索出等于AL中字符的单元,并将此单元置换成空格符。
CLD
MOV CX,100 MOV SI,6180H MOV DI,2000H
REP MOVSB ;至此完成了将100个数从6180H处搬移到2000H处 MOV CX,100 MOV DI,2000H MOV AL,DATA CH1:JCXZ STO REPNE SCASB JZ CH2 JMP CH1 CH2:MOV AH,20H
DEC DI
MOV [DI],AH ;MOV BYTE PTR[DI],20H INC DI JMP CH1 STO:HLT 方法2
MOV SI,6180H MOV DI,2000H MOV CX,100 CLD LP1:LODSB STOSB LOOP LP1 MOV AL,DATA MOV CX,100 MOV DI,2000H
第 7 页 共 8 页
CH1:JCXZ STO
REPNE SCASB JZ CH2 JMP CH1 CH2:MOV AH,20H
DEC DI
MOV [DI],AH ; MOV BYTE PTR[DI],20H INC DI JMP CH1 STO:HLT
3.88 带参数的返回指令用在什么场合?设栈顶地址为2000H,当执行RET 0008后,问SP的值是多少? 答:(1)带参数的返回指令RET用在调用程序需要通过堆栈向过程传送一些参数的场合,并在过程运行中要使用这些参数,一旦过程执行完毕,这些参数应弹出堆栈作废。RET指令放在被调用的过程末尾处。
(2)SP=2+8或SP=4+8取决于子程序是近过程还是远过程,先从堆栈弹出断点,再从堆栈弹出8个字节并丢弃之。即SP=200AH或SP=200CH 3.89 在执行IRET 和RET时,具体操作内容有什么区别? 答:执行中断返回指令IRET时,具体操作内容为:
(1)先将由SP所制定的堆栈内容弹出至IP,恢复IP值: IP (SP),SP (SP)+2 (2)再将由SP所制定的堆栈内容弹出至CS,恢复CS值: CS (SP),SP (SP)+2 (3)最后将SP制定的堆栈内容弹出至FLAGS: FLAGS (SP),SP (SP)+2 执行过程返回指令RET时,具体操作内容为:同上(1)(2)步内容,无(3)步操作
3.90 INT 40H指令的中断向量存储在哪些地址单元?是用图解说明中断向量的含义和具体内容,并指出它和中断入口地址之间是什么关系?
答:因为40H*4=0100H,可知其中断向量存储在0100H-0103H。
0000H:0100H
IPL
0000H:0100H 0000H:0100H 0000H:0100H
IPH CSL CSH
第 8 页 共 8 页