微机原理第四章课后习题答案 下载本文

第四章课后作业(6—27)

6.试按下列要求分别编制程序段。 (1)把标志寄存器中符号位SF置“1”。 (2)寄存器AL中高、低四位互换。

(3)由寄存器AX、BX组成一个32位带符号数(AX中存放高16位),试求这个数的负数。

(4)现有三个字节存储单元A、B、C,在不使用ADD和ADC指令的情况下,实

现(A)+(B) C。

(5)用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1 形成奇数)。 答:

(1) LAHF

OR AH,80H SAHF

(2) MOV CL,4 ROL AL,CL

(3) MOV CX,0

NEG BX JC CHG JMP GO CHG: MOV CX,1 GO: NEG AX SUB AX,CX

(4) MOV CL,A MOV AL,B MOV X,AL CHECK:INC X

DEC CL JNZ CHECK

(5) OR CX,0001H

7.试给出下列各指令的机器目标代码。 (1)MOV BL,12H [SI] (2)MOV 12H [SI],BL (3)SAL DX,1

(4)AND 0ABH [BP] [DI],1234H

答:(1)100010 1 0 01 011 100 00010010=8A5C12H

(2)100010 0 0 01 011 100 00010010=885C12H (3)110100 0 1 11 100 010=0D1E2H

(4)100000 0 1 10 100 011 10101011 00000000 00110100 00010010 =81A3AB003412H

8.执行下列指令:

STR1 DW ‘AB’ STR2 DB 16DUP(?) CNT EQU $-STR1 MOV CX,CNT MOV AX,STR1 HLT

执行完成之后,寄存器CL的值是多少?寄存器AX的值是多少?

答:因为CNT=16+2=18,所以CX=18=0012H,所以CL=12H=0001,0010;

AX中装入的是‘AB’的ASCII码值,其中‘A’在高位AH中,‘B’在低位AL中,所以AX=4142H=0100,0001,0100,0010。

9.JMP FAR PTR ABCD (ABCD是符号地址)的转移方式是什么? 答:段间直接转移。

10.按下列指令写出相应指令或程序段。

(1)写出两条使AX寄存器内容为0的指令。 (2)使BL寄存器中的高、低4位互换。

(3)现有两个带符号数分别在X1和X2变量中,求X1/X2,商和余数分别送入Y1和Y2中。

(4)屏蔽BX寄存器中的b4、b6、b11位。

(5)将AX寄存器的b4、b14位取反,其它位不变。 (6)测试DX寄存器的b0、b9位是否为“1”。

(7)使CX寄存器中的整数变为奇数(如原已经是奇数,则不变)。 答:(1)MOV AX,0 XOR AX,AX (2)MOV CL,4 ROL BL,CL (3)MOV AX,X1 CWD

IDIV X2 MOV Y1,AX MOV Y2,DX

(4)AND BX,1111 O111 1O10 1111 (5)XOR AX,0100 0000 0001 0000 (6)MOV AX,DX RCR AX,1 JC B0Y ;转向表示b0是1的标号为B0Y的程序段

MOV AX,DX MOV CL,10 ROR AX,CL JC B9Y ;转向表示b9是1的标号为B9Y的程序段 (7)OR CX,0001H

11.写出把首地址为BLOCK的字数组的第6个字送入AX寄存器的指令,要求使用下列寻址方式。

(1)寄存器间接寻址; (2)直接寻址;

(3)基址寻址; (4)基址变址相对寻址。 答:(1)LEA DI,BLOCK ADD DI,10 MOV AX,[DI]

(2)MOV AX,[BLOCK+10]

(3)LEA BX,BLOCK ADD BX,10 MOV AX,[BX]

(4)LEA BX,BLOCK MOV SI,0

MOV AX,[BX+SI+0AH]

12. 指令“SUB AX,BX”执行后,CF=1,说明最高有效位发生了什么现象?对无符号数来说,操作结果发生了什么现象?

答:CF=1说明最高有效位发生进位;对无符号数,操作结果产生溢出。

13. 在1000H单元中有一条二字节指令JMP SHORT LAB,如果其中的偏移量分别为30H、6CH、0B8H,则转向地址LAB的值分别为多少? 答:1000H*10H+2H+30H=10032H 1000H*10H+2H+6CH=1006EH 1000H*10H+2H+0B8H=100BAH

14.(AL)=9AH,(BL)=0BCH,当分别进行下列指令运算后,写出标志位ZF、PF、CF、SF的内容。 (1)ADD AL,BL (2)SUB AL,BL (3)AND AL,BL (4)OR AL,BL (5)XOR AL,BL 答:(AL)=9AH=1001 1010 ; (BL)=0BCH=1011 1100

(1)1001,1010+1011,1100=1,0101,0110 所以ZF=0,PF=1,CF=1,SF=0

(2)1001,1010-1011,1100=1101,1110 所以ZF=0,PF=1,CF=1,SF=1

(3)1001,1010和1011,1100按位与得1001,1000 所以ZF=0,PF=0,CF=0,SF=1

(4)1001,1010和1011,1100 按位或得1011,1110 所以ZF=0,PF=1,CF=0,SF=1

(5)1001,1010和1011,1100按位异或得0010,0110 所以ZF=0,PF=0,CF=0,SF=0

15.若CPU中寄存器及RAM参数如表所示: CPU寄存器 内容 CPU寄存器 内容 RAM 执行前 CS 3000H CX 0FFFFH 20506H 06H DS 2050H BX 0004H 20507H 00H SS 50A0H SP 2000H 20508H 87H ES 0FFFH DX 17C6H 20509H 15H IP 0000H AX 8094H 2050AH 37H DI 000AH BP 1403H 2050BH C5H SI 0008H CF 1 2050CH 2FH 试求独立执行下列指令后,CPU中各寄存器及RAM相应内存单元的内容为多少? (1)MOV DX,2[BX] ;DX=06H BX=0004H (2)PUSH CX ;SP=1FFEH [SP]=0FFH (3)MOV CX,BX ;CX=0004H BX=0004H (4)TEST AX,01 ;AX=8094H CF=0 (5)MOV AL,[SI] ;AL=87H

(6)ADC AL,[DI] ;AL=0CCH CF=0 DAA ;AL=0011 0010 (7)INC SI ;SI=0009H (8)DEC DI ;DI=0009H

(9)MOV [DI],AL ;[DI]=94H DX=17C6H (10)XCHG AX,DX ;AX=17C6H DX=8094H (11)XOR AH,BL ;AH=84H BL=04H (12)JMP DX ;IP=17C6H

16.如果TABLE为数据段中0032单元的符号名,其中存放的内容为1234H。当执行指令“MOV AX,TABLE”和“LEA AX,TABLE”后,(AX)中的内容分别为多少? 答:执行“MOV AX,TABLE”后(AX)=1234H;

执行“LEA AX,TABLE”后(AX)=0032H。

17.设(SP)=0FFFEH,执行CALL FAR PTR OPRD后,(SP)=? 答:(SP)=SP-04H=0FFFAH

18.若某数据区的开始地址为A7F0H:2B40H,则该数据区的首字单元和32个字的

末字单元的物理地址分别为多少?

答:首字单元物理地址为:AAA40H、AAA41H;

32字的末字单元物理地址为:AAAA2H、AAAA3H。

19、若(SP)=2000H,(AX)=3355H,(BX)=4466H,下列程序段: PUSH AX PUSH BX POP DX

执行后有关寄存器内容为(AX)=?,(DX)=?,(SP)=?。 答:(AX)=3355H (DX)=4466H (SP)=1FFEH

20.设(SS)=2250H,(SP)=0140H,若在堆栈中存入5个数据,则栈顶的物理地址是多少?如果再从堆栈中取出3个数据,则栈顶的物理地址是多少? 答:存入五个数据后,栈顶的物理地址为:22636H;再取出三个数据后,栈顶的物理地址为:2263CH。

21.分别指出下列两个程序段的功能。 (1) MOV CX,10 (2) CLD LEA SI,FIRST LEA DI,[0404H] LEA DI,SECOND MOV CX,0080H REP MOVSB XOR AX,AX

REP STOSW

答:(1)将数据段中首地址为FIRST的10个字节数据传送到附加段首地址为SECOND的内存区中。

(2)将附加段从偏移地址地址为0404H开始向后的128个字存储单元清零。

22.若(SP)=2800H,使用两种方法实现(SP)=27FEH。 答:(1)MOV AX,1234H PUSH AX

(2)MOV AX,1234H CALL AX

23.设(IP)=3D8FH,(CS)=4050H,(SP)=0F17CH。当执行完CALL 2000:009AH后,IP、CS、SP、[SP]、[SP+1]、[SP+2]和[SP+3]的内容分别为什么? 答:IP=009AH,CS=2000H,SP=0F178H,[SP]=8FH,[SP+1]=3DH,[SP+2]=50H,[SP+3]= 40H

24.(1)试编写汇编程序段完成以下功能:将数据段中100个字符的字符串从内存的BUFFER1搬移到内存的BUFFER2中去;

(2)试编写汇编程序段完成以下功能:将数据段中100个字的数据块BLOCK1搬移到同一个数据段的BLOCK2中去。 答:(1)LEA SI,BUFFER1 LEA DI,BUFFER2

MOV CLD REP MOVSB (2)LEA LEA MOV CLD REP MOVSW

CX,100

SI,BLOCK1 DI,BLOCK2 CX,100

25. 试编写汇编程序段完成以下功能:比较DEST和SOURCE中的500个字节,找出第一个不相同的字节,如果找到,则将SOURCE中的这个数送AL中。 答: LEA SI,DEST

LEA DI,SOURCE MOV CX,500 CLD

REPE CMPSB JCXZ NO DEC DI

MOV AL,BYTE PTR [DI] NO: HLT

26. 试编写汇编程序段完成以下功能:求最大值,若自BLOCK开始的内存缓冲区中,有100个带符号的数,希望找到其中最大的一个值,并将它放到MAX单元中。

答: LEA DI,BLOCK MOV CX,100

MOV AX,[DI] CHECK: ADD DI,2

CMP AX,[DI] JGE NEXT MOV AX,[DI] NEXT: LOOP CHECK MOV MAX,AX

27.指出下列32位指令源操作数的寻址方式,并指出指令执行后有关寄存器的内容。

(1)LEA ECX ,[EAX*2+14CH] ;执行前:(EAX)=0548 901AH (ECX)=xxxx xxxxH (2)LEA EAX ,TAB[EDX][4*ESI] ;执行前:(EAX)=xxxx xxxxH (ESI)=0653 3A44H (EDX)=0892 ABDFH [TAB] =0000 0120H (3)MOV EAX,mem32 ;执行前:(EAX)=xxxx xxxxH [men32]=0892 ABDFH

(4)PUSH 12345678H ;执行前:(ESP)=1234 5678H

SS:[FFFF F31CH]=xxxx xxxxH 答:(1)寄存器相对寻址。

ECX=0548,901AH*2+14CH=0A91,2180H

(2)基址变址相对寻址。

EAX=0653,3A44H*4+0892,ABDFH+0000,0120H=21DF,960FH

(3)存储器直接寻址。 EAX=0892,ABDFH (4)立即数寻址。

SS:[FFFF F31CH]=1234,5678H