理论教育 微机原理与接口技术复习指导和习题解答

微机原理与接口技术复习指导和习题解答

时间:2023-11-04 理论教育 版权反馈
【摘要】:并说明BCD码调整情况。解13.若SS=1000H,SP=1000H,AX=1234H,BX=5678H,Flag=2103H,试说明执行指令之后,SP=?并指出栈中各单元的内容。解将转到0:0086H和0:0084H处取出双字作为CS与IP的值,再执行程序。

微机原理与接口技术复习指导和习题解答

1.指出下列各指令中源操作数和目的操作数的寻址方式。

①MOV DI,100

②MOV CX,100[SI]

③MOV[SI],AX

④ADD AX,[BX+DI]

⑤AND AX,BX

⑥MOV DX,[1000]

⑦MOV BX,[BP+DI+100]

⑧PUSHF

⑨SUB[1050],CX

⑩AND DH,[BP+4]

解源操作数为 目的操作数为

①立即寻址 寄存器寻址

②变址寻址 寄存器寻址

③寄存器寻址 寄存器间接寻址

④基址加变址寻址 寄存器寻址

⑤寄存器寻址 寄存器寻址

⑥直接寻址 寄存器寻址

⑦基址加变址寻址 寄存器寻址

⑧寄存器寻址 寄存器间接寻址

⑨寄存器寻址 直接寻址

⑩变址寻址 寄存器寻址

2.试述指令“MOV AX,2000H”和“MOV AX,DS:[2000H]”的区别?

区别有3条:

①“MOV AX,2000H”对源操作数是立即寻址,而“MOV AX,DS:[2000H]”对源操作数是直接寻址;

②前者的功能是把立即数2000H送入AX中,而后者的功能是把内存2000H单元与2001H单元的内容取出并送入AX中;

③两者的机器代码不同,执行速度也不同,前者执行时间短,后者执行时间长。

3.AX中有一个负数,欲求其绝对值,若该数为补码,则用什么指令?若该数为原码,又用什么指令?

若该数为补码,先减1再取反:

若该数为原码,直接将该数的最高位清零:

4.若DS=4000H,BX=0800H,[40800H]=05A0H,[40802H]=2000H,求执行指令“LDS SI,[BX]”后,DS与SI中的内容。若上文中的DS换成ES,其他条件不变,求执行指令“LES DI,[BX]”后,ES与DI中的内容。

SI=05A0H,DS=2000H。

DI=05A0H,ES=2000H。

5.若AX=98ABH,BX=A8BCH,求执行指令“ADD AX,BX”后,AX与BX中的内容,并指出SF、ZF、AF、PF、CF和OF的状态。

AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。

6.若CX=6700H,DX=78FFH,CF=1,求分别执行指令

①ADD CX,DX

②ADC CX,DX

③SUB CX,DX

④SBB CX,DX

⑤AND CX,DX

⑥OR CX,DX

⑦XOR CX,DX

后,CX与DX寄存器中的内容,并指出标志寄存器SF、ZF、AF、PF、CF及OF的状态。

①CX=DFFFH,DX=78FFH,SFZFAFPFCFOF=100101B。

②CX=E000H,DX=78FFH,SFZFAFPFCFOF=101101B。

③CX=EE01H,DX=78FFH,SFZFAFPFCFOF=101010B。

④CX=EE00H,DX=78FFH,SFZFAFPFCFOF=101110B。

⑤CX=6000H,DX=78FFH,SFZFAFPFCFOF=00×100B。

⑥CX=7FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B。

⑦CX=1FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B。

7.若AX=FFFEH,BX=FFFDH,求执行指令“IMUL BX”后,DX与AX中的内容,并指出标志位OF与CF的状态。

AX=0006H,DX=0000H,OFCF=00B。

8.若AL=75H,BL=48H:

①求执行指令

之后AL=?标志位AF=?CF=?并说明BCD码调整情况。

②执行指令“SUB AL,BL”与DAS后,情况又如何?

①AL=23H,AFCF=11B。

②AL=27H,AFCF=10B。

9.设X、Y、R、S、Z均为16位无符号数的变量。按已给定的表达式Z(X+Y)/(R-S)→Z,有程序如下,试在空格处填入适当的指令(注:在加减过程中均无进位和借位)。

MOV AX,X

MOV CX,R

SUB CX,S

MOV Z,AX

MOV Z+1,DX

HLT

①ADD AX,Y。

②MUL Z。

③DIV CX。

10.若有一个4字节数,放在寄存器DX与AX中(DX中放高16位),要求这个4字节数整个左移一位如何实现?右移一位又如何实现?

①DX与AX左移一位:

②DX与AX右移一位:

11.把1 KB的数据块从偏移地址以1000H开始的单元传送到偏移地址以1400H开始的缓冲区。试用串操作指令和一般传送指令两种方法各编一程序实现。

①利用串操作指令编程如下:(www.daowen.com)

②利用一般传送指令编程如下:

12.若在内存缓冲区中有一个长度为256字节的数据块,起始地址偏移量为2000H。数据块中的数据有正有负,要求把其中的正负数分开,分别送至同段的两个缓冲区,存放正数的缓冲区的起始地址偏移量为2100H,存放负数的缓冲区的起始地址偏移量为2200H。试编一程序。

13.若SS=1000H,SP=1000H,AX=1234H,BX=5678H,Flag=2103H,试说明执行指令

之后,SP=?SS=?CX=?并指出栈中各单元的内容。

SS=1000H,SP=0FFCH,CX=2103H。

栈中各单元内容如下:

地址 RAM

0FFAH 03

0FFBH 21

0FFCH 34

0FFDH 12

0FFEH 78

0FFFH 56

1000H XX

14.若DS=1100H,SI=1000H,CS=1200H,IP=100H,[12000H]=2000H,[12002]=1500H,求:

①执行指令“CALL FAR[SI]”后CS与IP的内容;

②执行指令“CALL[SI]”后CS与IP的内容。

①CS=1500H,IP=2000H。

②CS=1200H,IP=2000H。

15.执行指令“INT 21H”后,将转到何处执行程序?指出CS与IP的内容。

将转到0:0086H和0:0084H处取出双字作为CS与IP的值,再执行程序。CS的值为内存单元0:0086H和0:0087H的内容;IP的内容为内存单元0:0084H与0:0085H的内容。

16.编一程序使:

①AX寄存器低4位清零;

②BX寄存器低4位置1;

③CX寄存器低4位变反;

④DX寄存器高3位不变,其余位清零。

①AND AX,FFF0H。

②OR BX,000FH。

③XOR CX,000FH。

④AND DX,E000H。

17.下面的程序段在什么情况下执行结果是AL=0?

如果端口5FH读出的数据最高位(D7)为1,则AL=0,否则AL=FHH。

18.指出下列8086指令中哪些是错误的,错在何处?

①MOV DL,BX

②MOV DS,2000H

③MOV[DI],[SI]

④MOV AX,[BX][BP]

⑤XCHG CX,[2400H]

⑥PUSH DH

⑦IN AH,DX

⑧OUT 01F0H,AX

①错。数据类型不匹配。

②错。立即数不能直接送往段寄存器。

③错。两个内存单元不能直接传送数据。

④错。BX和BP都可作为基址寄存器,缺少变址寄存器。没有基址加基址寻址方式。

⑤对。

⑥错。堆栈操作必须是16位数据,DH是8位寄存器。

⑦错。输入(IN)指令从端口读出的数据需送给累加器AL或AX,送给AH不行。

⑧错。端口地址为16位时,必须用DX间接寻址。

19.连续执行以下指令,填写执行指令的结果(MEM为存储器物理地址)。

①CX=2180 H,CF=1B。

②[SI]=80H,[SI+1]=21H。

③[SI]=01 H,MEM=32700 H。

④[SI]=00H,ZFCFPF=111B。

⑤AX=000FH,CFAF=00B。

⑥AX=0105H,CFAF=11B。

⑦AL=5EH,CFAF=00B。

⑧AL=64H。

⑨BX=0008 H。

⑩AX=0018H。

⑪AX=FF18 H。

⑫AX=FFE3H,DX=0000H。

*20.80286中的PUSH指令与8088/8086中的PUSH指令有何不同?PUSHA和POPA指令分别实现什么功能?

在8088/8086指令系统中PUSH指令的源操作数只能是寄存器、段寄存器和存储器,而在80286中该指令的源操作数可以是一个8位或16位的立即数,而且此立即数既可以是符号数,也可以是无符号数。

PUSHA、POPA指令将所有通用寄存器的内容压入或弹出堆栈,压入的顺序是AX、CX、DX、BX、SP、BP、SI和DI(SP是执行该指令之前的值),弹出的顺序与压入的顺序相反。

*21.80386/80486中新增的位操作类指令有哪些?分别实现什么功能?

80386/80486中新增的位操作类指令如下。

(1)测试与置位指令

BT是位测试指令,检查目的操作数OPRD1中由OPRD2指定的位,并将该位复制到CF中;BTC在完成BT指令功能后,再将测试位取反;BTS和BTR在完成BT功能后,再将测试位置1或置0。

(2)位扫描指令

BSF指令用于对16位或32位操作数OPRD2从低位到高位(b0到b15或b31)进行扫描,并将扫描到的第一个1的位号送入OPRD1指定的目标寄存器中。如果OPRD2所有位均为0,则将ZF标志位置1,OPRD1中的结果无定义;否则(OPRD2≠0)将ZF清零,OPRD1中为位号。BSR指令的功能同BSF,只是从高位到低位进行反向扫描。

*22.编写实现下列功能的程序段。

①EDX:EAX中的64位数据左移一位。

②比较EAX、EBX、ECX中无符号数的大小,并将最小的数存入EAX中。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈