微机原理与接口技术(楼顺天编着)课后习题答案 - 图文 下载本文

内容发布更新时间 : 2024/12/22 10:49:46星期一 下面是文章的全部内容请认真阅读。

(1)XOR BX,VAR; (2)AND BX,VAR;

(3)OR BX,VAR; (5)AND BX,00001111B; 解:(1)00F9H (2)0002H (3)00FBH (4)003BH (5)000BH (6)00CBH

(4)XOR BX,11110000B; (6)TEST BX,1

14. 设(DX)=10111011B,(CL)=3,(CF)=1,求下列指令单独执行后DX的内容:

(1)SHR DX,1;

(4)SHL DX,1;

(2)SAR DX,CL; (3)SHL DX,CL; (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 (7)SAL DH,1

DL循环左移3 DH算术左移1

0000 0000 1101 1101B = 0000 0000 1011 1011B =

00DDH 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; 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 (2)C (3)B

PUSHU AX则AX入栈,SP=0FFEH;CALL BX则IP入栈,SP=0FFCH 异或,若相同,则AL=0,ZF=1。

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 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

L1:

XOR MOV

AX,AX CX,4

L1: SHL AX,1

SHR BL,1 RCR AX,1 SAR AX,1 SAR AX,1 SAR LOOP

AX,1 L1

MOV CX,4 L2: SHR 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,用『』表示取整数操作,则

?a?b??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中,前两个字节存放数据的个数,编程实现

按下式进行滤波处理:

y(k)?13?x(k)?x(k?1)?x(k?2)?k?2k?2

y(k)?x(k)解:滤波结果保存在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 -

PUSH AX DIV BX

MOV [DI],AX POP AX POP DX SUB AX, [SI-4] SBB DX,0 ADD DI,2 ADD SI,2 LOOP L1

20. 在由字符串构成的缓冲区BUFFER中,前2个字节存放字符个数,后续每个字节存放一个字符的ASCII码。编写程序实现将字符串‘2004’替换成‘2006’。 解:在数据段中定义:

BUFFER DW 74

DB ‘This year is 2004. In 2004, we have a plan for reducing annual expensive 10%’

DEST DB ‘2004’ 在代码段中编写程序段:

CLD

LEA MOV ADD LEA PUSH PUSH

SI, BUFFER CX, [SI] SI, 2

DI, DEST SI DI

L1:

PUSH CX MOV CX, 4

REPZ CMPSB JNZ L2

MOV BYTE PTR [SI-1],’6’ POP POP POP INC

CX DI SI SI

L2:

INC DI LOOP L1

21. 定义有下列宏指令:

WAGS MACRO S1,S2,S3

SUB AX,AX MOV DX,AX ADD AX,S1 ADD AX,S2 ADC DX,0

- 81 -

ADD AX,S3

ADC DX,0 ENDM

当采用宏调用指令?WAGS 60000,25000,3000?时,执行后DX= AX= 。 解:宏指令WAGS完成的功能为S1+S2+S3,结果放在DX:AX中。所以,调用?WAGS 60000,25000,3000?时,其结果为

DX=0001H ,AX=57C0H

22. 对上题定义的宏指令,如果采用宏调用指令?WAGS BX,CX,SI?时,写出宏展开形式。 解:调用?WAGS BX,CX,SI?时,宏展开形式:

SUB AX,AX

MOV DX,AX ADD AX,BX ADD AX,CX ADC DX,0 ADD AX,SI

ADC DX,0

23. 写出宏指令SUMMING,实现将字节缓冲区array中的内容求校验和(保留低8位),并保存在VALUE中。

解:设array前两个字节保存缓冲区字节数,在宏指令SUMMING,将array和VALUE作为形式参数。

SUMMING MACRO array,VALUE L1:

LEA MOV ADD XOR ADD INC LOOP

SI,array CX,[SI] SI,2 AL,AL AL,[SI] SI L1

MOV VALUE,AL ENDM

- 82 -