微机原理习题解答:4

  • 格式:docx
  • 大小:39.91 KB
  • 文档页数:6

微机原理习题解答:4

习题四

1.8086语言指令的寻址方式有哪几类?用哪一种寻址方式的指令执行速度最快?

请问:数据操作数的串行方式存有七种,分别为:立即串行,寄存器串行,轻易串行,寄存器间接串行,寄存器相对基址变址和相对基址变址串行。其中寄存器串行的指令继续执行速度最快。

2.若ds=6000h,ss=5000h,es=4000h,si=0100h,bx=0300h,bp=0400h,d=1200h,数据段中变量名num的偏移地址为0050h,试指出下列源操作数的寻址方式和物理地址是多少?

(1)movax,[64h]请问:串行方式为轻易串行;pa=60064h(2)movax,num请问:串行方式为轻易串行;pa=60005h(3)movax,[si]请问:串行方式为寄存器间接串行;pa=60100h(4)movax,[bx]请问:串行方式为寄存器间接串行;pa=60300h(5)movax,[bp]请问:串行方式为寄存器间接串行;pa=50400h(6)moval,[di]请问:串行方式为寄存器间接串行;pa=61200h(7)moval,[bx+1110h]请问:串行方式为寄存器相对串行;pa=61410h(8)movax,num[bx]请问:串行方式为寄存器相对串行;pa=60305h(9)movax,[bx+si]请问:串行方式为基址变址串行;pa=60400h(10)movax,num[bx][di]请问:串行方式为相对基址变址串行;pa=61505h

3.设bx=637dh,si=2a9bh,位移量为c237h,试确定由这些寄存器和下列寻址方式产生的有效地址。

(1)轻易串行请问:有效率地址为ea=c237h(2)用bx的寄存器间接串行请问:有效率地址为ea=637dh(3)用bx的相对寄存器间接串行请问:有效率地址为ea=125b4h(4)基址提变址串行请问:有效率地址为ea=8e18h(5)相对基址变址串行请问:有效率地址为ea=1504fh其中,(3)和(5)中产生位次,必须把最低十一位1舍弃。

4.指出下列指令是否正确,若不正确情说明原因。

(1)movds,2021h;立即数无法传输至ds

(2)pushal;栈操作,操作数类型必须为word类型(3)movdx,[sp];sp寄存器不能做间址寄存器

(4)inal,0a00h;i/o指令的轻易串行,地址就可以为8十一位(5)xchgcl,ch;恰当

(6)shrax,3;移位超过一位时,应采用cl寄存器间址(7)aaacx;非组合的bcd码加法调整aaa指令应为隐含操作数(8)add[bp+di];加法指令add,缺少源操作数 (9)outdx,cl;i/o指令操作数就可以用ax、al提供更多,端口地址可以就是8位的

直接地址或用dx间址

(10)cbwbh;符号拓展指令为暗含操作数

(11)add03ech;加法指令应为双操作数指令,立即数不能做目的操作数(12)movbx,[si+di];源操作数形式错误,si和di不能同时做为间址寄存器(13)movdi,[ax];ax不能做为间址寄存器

(14)out258h,bx;i/o指令格式错误,见到(9)题的表述

(15)shlax,3;移位指令,位移位数大于1时,应用cl来指明(16)mov64h,al;立即数不能做为目的操作数(17)addal,6600h;源、目的操作数的类型不一致(18)mov[bx],[si];传送指令中,两个操作数不能同时为存储器操作数(19)xchgax,8800h;交换指令的操作数不能使用立即数(20)movax,[bx+dx];传送指令的源操作数,不能使用立即数(21)leabx,1000h

;有效率地址传输指令的源操作数无法为立即数,必须就是存储器操作数(22)div0010h;恰当

(23)leadx,di;同(21)题,源操作数不能为寄存器操作数(24)mulax,200h;乘法指令的目的操作数是隐含的,不能出现在指令中(25)movax,[bx+bp]

;传输指令中源操作数格式弄错,bx和bp无法同时为间址寄存器

(26)cmp[bx],[si];比较指令的两个操作数不能同时为存储器操作数(27)outdx,bx;i/o指令中,源操作数只能使用al或ax寄存器(28)andofh,al;“与”指令中,目的操作数不能使用立即数(29)sal[bx],cx;移位指令,移位位移不能用cx寄存器指明(30)jmpfar[bx+si];转移指令中转移的目标地址表达方式错误

;如果就是段内间接迁移,应属:jmpwordptr[bx+si];如果就是段间间接迁移,应属:jmpdwordptr[bx+si]

(31)jnzaaa;不相等转移指令中,符号地址(标识符)不能使用系统中的保留字(32)jmpnext;正确

(33)sbcax,[dx];指令助记符弄错,源操作数则表示方式弄错(34)movcs,ds

;段寄存器之间不能传送数据,cs寄存器也不能做为目的操作数(35)addds,ax;加法指令中段寄存器不能做为操作数

(36)moval,cx;源、目的操作数的类型不一致,见到(17)题(37)inc[bx];没选定存储器操作数类型(38)movcl,a8h ;源操作数为16进制的立即数,16进制数以字母开头时应在前面加“0”(39)moves,ds;错同(34)题

(40)inal,bx;i/o指令端口地址则表示错误,就可以用8十一位立即数或dx间址5.设立一个字节数据x放置al寄存器中,先行表明以下程序的功能:

xorah,ah;ah清零

salax,1;ax左移一位,相等于2xmovbx,ax;2x送来bx存贮movcl,2

salax,cl;ax左移二位,2x×4=8xaddax,bx;2x+8x=10x

该段程序实现了字节数据x乘10,结果在ax中。

6.试编程实现:

(1)al寄存器的高4位清0(2)bl寄存器的高4边线1(3)cl寄存器的高4十一位row

(4)测试dl寄存器的最低2位是否同时为0,若是,将0送入bl寄存器;否则将1送入bl寄存器。

请问:程序段如下

andal,0f0h;①al寄存器的低4位清0

orbl,0fh;②bl寄存器的高4边线1xorcl,0fh;③cl寄存器的高4十一位row

;④测试dl寄存器testdl,03h

jznextmovbl,1jmpnext1

next:movbl,0next1:hlt

7.若存有两个4字节的并无符号数相乘,这两个数分别存放在2000h和3000h已经开始的存储单元中,获得的和存放在2000h已经开始的内存单元。先行编程顺利完成。请问:程序段如下

movax,[3000h]add[2000h],axmovax,[3002h]adc[2002h],ax

8.设立从2000h领衔址的内存中,放置着10个带符号的字节数据,先行编程顺利完成:找到其中最小的数,并取走2000h单元。

答:程序段如下

movbx,2000hmovcx,9 moval,[bx]n2:incbx

cmpal,[bx]jgen1

moval,[bx]n1:loopn2

mov[2000h],alhlt

9.用寄存器间接寻址方式时,bx、bp、si、di分别针对什么情况来使用?用这4个寄存器分别组合间接寻址时,物理地址是怎样计算的?举例说明。

请问:bx、si、di用作在数据段串行,bp用作在堆栈段串行。

在数据段物理地址为:pa=ds×10h+bx/si/di

或者为:pa=ds×10h+bx+si或(bx+di)

在堆栈段物理地址为:pa=ss×10h+bp

或者为:pa=ss×10h+bp+si或(bp+di)举例如下:

movax,[bx+si];在数据段寻址,pa=ds×10h+bx+simovax,[bp+di];在堆栈段寻址,pa=ss×10h+bp+di10.已知:ds=2000h,bx=0300h,si=0002h,(20300h)=12h,(20301)=34h,(20302h)=56h,(20303h)=78h,(21400h)=2ah,(21401h)=4ch,(21402h)=b7h,(21403h)=65h试说明下列各条指令执行完后ax寄存器的内容。

(1)movax,1400h;请问:继续执行回去该条指令后ax=1400h(2)movax,bx;请问:继续执行回去该条指令后ax=0300h(3)movax,[1400h];请问:继续执行回去该条指令后ax=4c2ah(4)movax,[bx];请问:继续执行回去该条指令后ax=3412h

11.根据以下要求,试写出相应的汇编语言指令。

(1)把bx寄存器和dx寄存器的内容相乘,结果取走bx寄存器中。请问:指令为addbx,dx

(2)用寄存器bx和si的基址变址寻址方式把存储器中的一个字节与al寄存器的内容相加,并把结果送到al寄存器中。

请问:指令为addal,[bx+si]

(3)用寄存器bx和位移量0b2h的寄存器相对寻址方式把存储器中的一个字和cx相加,并把结果存回存储器中。

请问:指令为add[bx+0b2h],cx (4)用位移量为0524h的直接寻址方式把存储器中的一个字与立即数3c5ah相加,并把结果送回该存储单元。

请问:指令为add[0524h],3c5ah

12.已知堆栈段寄存器ss的内容是0ff0ah,堆栈指针寄存器sp的内容是0008h,先执行两条把8057h和0f7ch分别进栈的push指令,再执行一条popbx指令。试画出堆栈区和sp的内容过程变化示意图(标出存储单元的物理地址)。

请问:将8057h和0f7ch分别进栈后,sp=0004h,再继续执行一条popbx指令后,sp=0006h,bx=0f7ch。堆栈区和sp的内容过程变化示意图如下:sp=0004hsp=0006hsp=0008h0ff0a0hss=0ff0ah0ff0a1h0ff0a2h0ff0a3h7ch0ff0a4h7chsp→0fh0ff0a5h0fh57h0ff0a6h57hsp→80h0ff0a7h80h××h0ff0a8h××h××hsp→××h0ff0a9h××h××h××h0ff0aah

××h××h13.字节扩展指令和字扩展指令用在什么场合?举例说明。答:用在除法运算中,对带符号数的被除数进行扩展;