2.16 编写程序段,使(AH)与( AL)中的内容互换。 解1 MOV BL,AL MOV AL,AH. MOV AH,BL 解2 XCHG AH,AL 2.17 编写程序段,使 (BL) 中高 4 位与低 4 位内容互换。 解1 MOV CL,4 MOV BH,0 SHL BX,CL ADD BL,BH 解2 MOV CL,4 ROL BL,CL 2.18 编写程序段,实现当(DL)是奇数时使(AL)=31H,否则使(AL)=30H。 SHR DL,1 MOV AL,0 RCL AL,1 ADD AL,30H 2.20 设寄存器AX 中存放 1234H,BX 寄存器中存放 1 ,执行 DIV BL 指令后,会发生什么现象?为什么? 溢出,商超过8 位,在AL 中存放不下商。 2.21 设 DX 寄存器中存放值为 0 ,AX 中存放 1234H,BX 中存放 1 ,执行 DIV BX 后,是否会出现与 2.20 相同现象?为什么? 不会,因为是16 位除法,商未超过16 位 2.22 一字数据压栈时堆栈指针如何改变?弹出一字数据时堆栈指针如何改变? 压栈时堆栈指针减2;弹出一字数据时堆栈指针加2 2.23 已知(SP)=2088H,(AX)=1A89H,(BX)=90CDH。依次执行以下三条指令后,画图说明堆栈中数据情况,及SP、AX、BX 中数据。 PUSH AX PUSH BX POP AX (SP)=2086H,(AX)=90CDH,(BX)=90CDH。 *2.25 编写程序段求 8!(8 的阶乘)。 MOV AX,8 MOV BX,7 NEXT:DX,0 MUL BX DEC BX JNZ NEXT 2.27 假设(AX)=07EH,变量 BUFFER 中存放的内容为B5H,求下列各条指令单独执行后的结果。 (1) AND AX,BUFFER 34H (2) XOR AX,BUFFER CBH (3) OR AX,BUFFER 0FFH (4) AND AX,0 0 (5) XOR AX,OFFH 81H (6) TEST AX,8000H 相与结果为0 时。AX 为正,值不变 *2.28 编写程序段,判断(AL)中的有符号数是正数还是负数,正数在CL 中写0,否则写1。 CMP AL,0 MOV CL,0 JGE NEXT MOV CL,1 NEXT:„„ 2.29 编写程序段,对存放在(DX)、(AX)中的双字数据求补。 MOV BX,0 SUB BX,AX MOV AX,BX MOV BX,0 SBB BX,DX MOV DX,BX 2.31 假设(DX)=78D5H,(CL)=5,CF=0,确定下列各条指令单独执行后(DX)中的值。 (1)SHL DH,1 (DX)=F0D5H (2)SAL DX, CL (DX)=1AA0H (3)SHR DX,CL (DX)=03C6H (4)SAR DL,1 (DX)=78EAH (5)ROL DX,CL (DX)=1AAFH (6)RCR DL,1 (DX)=786AH (7)RCL DH,CL (DX)=0FD5H 2.32 按下列要求编写指令序列。 (1)清除 ...