CMP AL,61H
JL OVER (无需变换或不是字母) CMP AL,7AH JG OVER (不是字母)
AND AL,5FH 或 SUB AL,20H OVER:
(7)OR AL,20H 或者:
CMP AL,41H
JL OVER (不是字母) CMP AL,5AH JG OVER (无需变换或不是字母)
OR AL,20H 或 ADD AL,20H OVER:
(8)XOR AX,0FFFFH 或者 NOT AX (9)XOR DX,007FH (10)XCHG CH,CL
11. 写出完成下述功能的程序段:
(1)传送40H到AL寄存器; (2)将AL的内容乘以2; (3)传送16H到AH寄存器; (4)AL的内容加上AH的内容。 计算最后结果(AL)=? 解:(1)MOV AL,40H (2)SHL AL,1 (3)MOV AH,16H (4)ADD AL,AH AL=96H
12. 写出完成下述功能的程序段:
(1)从缓冲区BUF的0004偏移地址处传送一个字到AX寄存器; (2)将AX寄存器的内容右移2位;
(3)将AX内容与BUF的0006偏移地址处的一个字相乘; (4)相乘结果存入BUF的0020H偏移地址处(低位在前)。 解: (1) LEA SI, BUF MOV AX, [SI+4] (2) SHR AX,1 SHR AX,1 (3) MUL WORD PTR 6[SI] (4) MOV 20H[SI],AX MOV 22H[SI],DX
13. 设(BX)=11001011B,变量VAR的内容为00110010B,求下列指令单独执行后BX的
内容:
- 77 -
(1)XOR BX,VAR; (2)AND BX,VAR; (3)OR BX,VAR; (4)XOR BX,11110000B; (5)AND BX,00001111B; (6)TEST BX,1 解:(1)00F9H (2)0002H (3)00FBH (4)003BH (5)000BH (6)00CBH
14. 设(DX)=10111011B,(CL)=3,(CF)=1,求下列指令单独执行后DX的内容:
(1)SHR DX,1; (2)SAR DX,CL; (3)SHL DX,CL; (4)SHL DX,1; (5)ROR DX,CL; (6)ROL DL,CL; (7)SAL DH,1; (8)RCL DX,CL; (9)RCR DL,1 解:DX= 0000 0000 1011 1011B CF=1 CL=3 (1)SHR DX,1 DX逻辑右移1 0000 0000 0101 1101B = 005DH (2)SAR DX,CL DX算术右移3 0000 0000 0001 0111B = 0017H (3)SHL DX,CL DX逻辑左移3 0000 0101 1101 1000B = 05D8H (4)SHL DX,1 DX逻辑左移1 0000 0001 0111 0110B = 0176H (5)ROR DX,CL DX循环右移3 0110 0000 0001 0111B = 6017H (6)ROL DL,CL DL循环左移3 0000 0000 1101 1101B = 00DDH (7)SAL DH,1 DH算术左移1 0000 0000 1011 1011B = 00BBH (8)RCL DX,CL DX带进位循环左移3 0000 0101 1101 1100B = 05DCH (9)RCR DL,1 DL带进位循环右移1 0000 0000 1101 1101B = 00DDH 15. 选择题(各小题只有一个正确答案)
(1)执行下列三条指令后: MOV SP,1000H PUSH AX CALL BX a. (SP)=1000H; b. (SP)=0FFEH; c. (SP)=1004H; d. (SP)=0FFCH; (2)要检查寄存器AL中的内容是否与AH相同,应使用的指令为: a. AND AL, AH b. OR AL, AH c. XOR AL, AH d. SBB AL, AH (3)指令JMP NEAR PTR L1与CALL L1(L1为标号)的区别在于: a. 寻址方式不同; b. 是否保存IP的内容; c. 目的地址不同; d. 对标志位的影响不同。 解:(1)D PUSHU AX则AX入栈,SP=0FFEH;CALL BX则IP入栈,SP=0FFCH (2)C 异或,若相同,则AL=0,ZF=1。 (3)B
16. 寄存器DX:AX组成32位数,DX为高位,编写程序段实现:
(1)DX:AX右移3位,并将移出的低3位保存在CL中; (2)DX:AX左移3位,并将移出的高3位保存在CL中; 解:(1)移出的3位应该按时序移入CL中。 XOR CL,CL
- 78 -
MOV BL,3 L1: SHR DX,1
RCR AX,1 RCL CL,1 DEC BL JNZ L1
(2)移出的3位应该按时序移入CL中。 XOR CL,CL MOV BL,3 L1: SHL AX,1
RCL DX,1 RCL CL,1 DEC BL JNZ L1
17. 编写程序段实现将BL中的每一位重复4次,构成32位的双字DX:AX,例如当BL=
01011101B时,则得到的(DX)=0F0FH,(AX)=0FF0FH。
解:算术右移时,移入的值就是最高位本身,这样可以使位内容重复,利用这一点可以实现题目的要求。
XOR DX,DX
XOR AX,AX MOV CX,4 L1: SHR BL,1 RCR AX,1 SAR AX,1 SAR AX,1 SAR AX,1 LOOP L1 MOV CX,4 L2: SHR BL,1 RCR DX,1 SAR DX,1 SAR DX,1 SAR DX,1 LOOP L2
18. 字变量VAR1中保存有小于38250的16位无符号数,编写程序段实现VAR1÷150,并
进行四舍五入操作,将商保存在字节变量VAR2中。
解:根据题意,38250÷150=255,因此商不会超过255,可以用一个字节表示。
a÷b的四舍五入操作可以通过判断除后余数实现:余数大于等于除数的一半,则商加1;否则不用加1。但这种方法用汇编语言编程实现时比较复杂,这里介绍另外一种方法:设a÷b的四舍五入后的结果为c,用『』表示取整数操作,则
b???a??a?2? c???0.5???b??b???这种方法是在除法操作之前,在被除数上加上除数的一半,这样除法操作后得到的值就是考
- 79 -
虑了四舍五入的商。
VAR1 DW 12345
VAR2 DB ? DATAA DB 150
MOV AX,VAR1 XOR BX,BX
MOV BL,DATAA SHR BX,1 ADD AX,BX DIV DATAA MOV VAR2,AL
19. 有一组无符号的16位数据保存在BUFFER中,前两个字节存放数据的个数,编程实现
按下式进行滤波处理:
1?x(k)?x(k?1)?x(k?2)?3y(k)?x(k)y(k)?k?2k?2
解:滤波结果保存在FILT中。
BUFFER DW 0CH
DW 33H, 18H, 1BH, 06H, 33H, 08H DW 3H, 6H, 0FH, 51H, 05H, 0CH
FILT DW 100H DUP(?) LEA SI, BUFFER
LEA DI, FILT MOV CX, [SI] ADD SI, 2
MOV AX, [SI] AX=X1 MOV [DI], AX MOV BX, 2[SI] MOV 2[DI],BX ADD SI,4 ADD DI,4 DEC CX DEC CX
ADD AX, BX XOR DX, DX ADC DX,0 MOV BX,3 L1:
ADD AX, [SI] ADC DX,0 PUSH DX
- 80 -
相关推荐: