完美.格式.编辑
05DCH
(9)RCR DL,1 DL带进位循环右移1
0000 0000 1101 1101B
= 00DDH
15. 选择题(各小题只有一个正确答案)
(1)执行下列三条指令后:
MOV SP,1000H PUSH AX CALL BX
a. (SP)=1000H; c. (SP)=1004H;
b. (SP)=0FFEH; 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. 寻址方式不同; c. 目的地址不同;
b. 是否保存IP的内容; 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 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
RCR DX,1 RCR 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 SAR SAR LOOP
AX,1 AX,1 AX,1 L1
MOV CX,4
SHR
L2:
BL,1
RCR DX,1 SAR SAR SAR LOOP
DX,1 DX,1 DX,1 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??bb??????这种方法是在除法操作之前,在被除数上加上除数的一半,这样除法操作后得到的值就是考虑了四舍五入的商。 VAR1
DW 12345
DB ?
DB 150
VAR2
DATAA
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)?解:滤波结果保存在FILT中。
BUFFER DW 0CH
k?2k?2
DW 33H, 18H, 1BH, 06H, 33H, 08H DW 3H, 6H, 0FH, 51H, 05H, 0CH
LEA SI,BUFFER FILT DW 100H DUP(?)
专业.资料.整理
完美.格式.编辑
LEA DI,FILT MOV CX,[SI] MOV [DI],CX ADD SI,2 ADD DI,2 XOR DX,DX MOV AX,[SI] MOV [DI],AX MOV BX,2[SI] MOV 2[DI],BX ADD SI,4 ADD DI,4 DEC CX DEC CX ADD AX,BX ADC DX,0 MOV BX,3 L1:
ADD AX,[SI] ADC DX,0 PUSH DX PUSH AX DIV BX MOV [DI],AX POP AX POP DX SUB AX, [SI-4] SUBB DX,0 ADD DI,2 ADD SI,2
专业.资料.整理