微机原理第三章答案.docx

上传人:b****7 文档编号:10435470 上传时间:2023-02-11 格式:DOCX 页数:19 大小:23.36KB
下载 相关 举报
微机原理第三章答案.docx_第1页
第1页 / 共19页
微机原理第三章答案.docx_第2页
第2页 / 共19页
微机原理第三章答案.docx_第3页
第3页 / 共19页
微机原理第三章答案.docx_第4页
第4页 / 共19页
微机原理第三章答案.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

微机原理第三章答案.docx

《微机原理第三章答案.docx》由会员分享,可在线阅读,更多相关《微机原理第三章答案.docx(19页珍藏版)》请在冰豆网上搜索。

微机原理第三章答案.docx

微机原理第三章答案

微机原理第三章答案

【篇一:

微机原理第三章作业答案】

操作码?

什么是操作数?

寻址和寻址方式的含义是什么?

8086指令系统有哪些寻址方式?

【解答】8086的指令格式由操作码和操作数字段组成。

操作码:

要完成的操作。

操作数:

参与操作的对象。

寻址:

寻找操作数或操作数地址的过程。

寻址方式:

指令中给出的找到操作数或操作数地址采用的方式。

8086指令系统的寻址方式主要有立即数寻址、寄存器寻址、存储器寻址和i/o端口寻址。

其中,存储器寻址可进一步分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址;i/o端口指令in和out使用的端口寻址方式有直接寻址和间接寻址。

3.2设(ds)=2000h,(es)=2100h,(ss)=1500h,(si)=00a0h,(bx)=0100h,(bp)=0010h,数据变量val的偏移地址为0050h,请指出下列指令的源操作数字段是什么寻址方式?

它的物理地址是多少?

(1)movax,21h

(2)movax,bx(3)movax,[1000h]

(4)movax,val(5)movax,[bx](6)movax,es:

[bx]

(7)movax,[bp](8)movax,[si](9)movax,[bx+10]

(10)movax,val[bx](11)movax,[bx][si](12)movax,val[bx][si]

【解答】

(1)movax,21h

立即寻址,源操作数直接放在指令中

(2)movax,bx

寄存器寻址,源操作数放在寄存器bx中

(3)movax,[1000h]

(4)movax,val

(5)movax,[bx]

(6)movax,es:

[bx]

(7)movax,[bp]

(8)movax,[si]

(9)movax,[bx+10]

(10)movax,val[bx]

(11)movax,[bx][si]

(12)movax,val[bx][si]

3.3给定寄存器及存储单元的内容为:

(ds)=2000h,(bx)=0100h,(si)=0002h,(20100)=32h,(20101)=51h,(20102)=26h,(20103)=83h,(21200)=1ah,(21201)=b6h,(21202)=d1h,(21203)=29h。

试说明下列各条指令执行完后,ax寄存器中保存的内容是什么。

(1)movax,1200h

(2)movax,bx(3)movax,[1200h]

(4)movax,[bx](5)movax,1100h[bx](6)movax,[bx][si]

【解答】

(1)movax,1200h;执行后,(ax)=1200h

(2)movax,bx;执行后,(ax)=(bx)=0100h

(3)movax,[1200h]

(4)movax,[bx]

(5)movax,1100h[bx]

(6)movax,[bx][si]

3.4分析下列指令的正误,对于错误的指令要说明原因并加以改正。

(1)mov

(3)mov

(5)mov

(7)movah,bx

(2)mov[bx],[si]ax,[si][di](4)movmydat[bx][si],es:

axbyteptr[bx],1000(6)movbx,offsetmaydat[si]cs,ax(8)movds,bp

【解答】

(1)movah,bx

错误,寄存器类型不匹配,可改为movax,bx

(2)mov[bx],[si]

错误,两个操作数不能都为存储单元,可改为movbx,[si]或mov[bx],si

(3)movax,[si][di]

错误,寻址方式中只能出现一个变址寄存器,可改为movax,[bx][di]。

(4)movmydat[bx][si],es:

ax

错误,ax签不能有段跨越前缀,去掉es:

,改为movmydat[bx][si],ax

(5)movbyteptr[bx],1000

错误,1000超出字节空间存储范围

(6)movbx,offsetmaydat[si];正确

(7)movcs,ax

错误,mov指令cs不能做目的操作数,可改为movds,ax

(8)movds,bp;正确

注:

本题错误改正部分有的答案并不唯一,可参考原题题意改成合法形式。

3.5设var1、var2为字变量,lab为标号,分析下列指令的错误之处并加以改正。

(1)addvar1,var2

(2)moval,var2

(3)subal,var1(4)jmplab[si]

(5)jnzvar1(6)jmpnearlab

【解答】

(1)addvar1,var2

错误,两个操作数不能都为存储单元,可改为movbx,var2

addvar1,bx

(2)moval,var2

错误,数据类型不匹配,可改为movax,var2

(3)subal,var1

错误,数据类型不匹配,可改为subax,var1

(4)jmplab[si]

错误,寄存器相对寻址形式中不能用标号做位移量,可改为jmpvar1[si]

(5)jnzvar1

错误,条件跳转指令只能进行段内短跳转,所以后面只能跟短标号。

可改为jnzlab

(6)jmpnearlab

错误,缺少运算符ptr,可改为jmpnearptrlab

注:

本题错误改正部分有的答案并不唯一,可参考原题题意改成合法形式。

3.6写出能够完成下列操作的8086cpu指令。

(1)把4629h传送给ax寄存器;

(2)从ax寄存器中减去3218h;

(3)把buf的偏移地址送入bx中。

【解答】

(1)movax,4629h

(2)subax,3218h

(3)leabx,buf

3.7根据以下要求写出相应的汇编语言指令。

(1)把bx和dx寄存器的内容相加,结果存入dx寄存器中;

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

(3)用寄存器bx和位移量21b5h的变址寻址方式把存储器中的一个字和(cx)相加,并把结果送回存储器单元中;

(4)用位移量2158h的直接寻址方式把存储器中的一个字与数3160h相加,并把结果送回该存储器中;

(5)把数25h与(al)相加,结果送回寄存器al中。

【解答】

(1)adddx,bx

(2)addal,[bx][si]

(3)add21b5h[bx],cx

(4)addwordptr[2158h],3160h

(5)addal,25h

3.8执行下列指令后,ax寄存器中的内容是什么?

tabledb10,20,30,40,50

entrydw3

……

movbx,offsettable

addbx,entry

movax,[bx]ax=

【解答】ax=3228h

3.9.datasegment

table_addrdw1234h

dataends

movbx,table_addr

leabx,table_addr

请写出上述两条指令执行后,bx寄存器中的内容。

答案:

movbx,table_addr;执行后(bx)=1234h

leabx,table_addr;执行后(bx)=offsettable_addr

3.10.设(ds)=1b00h,(es)=2b00h,有关存储器地址及其内容如下图所示,请用两条指令把x装入ax寄存器。

1b00:

2000h8000h

1b00:

2002h2b00h

.

.

2b00:

8000hx

答案:

lesbx,[2000h]

movax,es:

[bx]

3.11.试分析下面的程序段完成什么操作?

movcl,04

shldx,cl

movbl,ah

shlax,cl

shrbl,cl

ordl,bl

答案:

将dx:

ax中的双字左移4位(乘16)

3.12.假定ax和bx中的内容为带符号数,cx和dx中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:

(1)若dx的值超过cx的值,则转去执行exceed

(2)若bx的值大于ax的值,则转去执行exceed

(3)cx中的值为0吗?

若是则转去执行zero

(4)bx的值与ax的值相减,会产生溢出吗?

若溢出则转overflow

(5)若bx的值小于ax的值,则转去执行eq_sma

(6)若dx的值低于cx的值,则转去执行eq_sma

答案:

(1)cmpdx,cx

jaexceed

(2)cmpbx,ax

jgexceed

(3)cmpcx,0

jezero

(4)subbx,ax

jooverflow

(5)cmpbx,ax

jleq_sma

(6)cmpdx,cx

jbeq_sma

3.13.假如在程序的括号中分别填入指令:

(1)loopl20

(2)loopnel20(3)loopel20

【篇二:

微机原理第三章课后习题解答】

34h,bx=0024h,

cx=5678h,bp=0024h,si=0012h,di=0032h,(09226h)=00f6h,(09228h)=1e40h(1e4f6h)=091dh。

在以上给出的环境下,试问下列指令段之行后的结果

如何?

(1)movcl,[bx+20h][si];

物理地址=ds*10h+bx+si+20h

=091d0h+0024h+0012h+0020h=09226h

(09226h)=00f6h,(09226h)=f6h,(09227h)=00h执行后:

cl=f6h

(2)mov[bp][di],cx

物理地址=ss*10h+bp+di=1e4a0h+0024h+0032h=1e4f6h

cx=5678h执行后:

(1e4f6h)=5678h

(3)leabx,[bx+20h][si];bx=bx+20h+si=0056h

movax,[bx+2];

物理地址=ds*10h+bx+2=091d0h+0058h=09228h

(09228h)=1e40h执行后:

ax=1e40h

(4)ldssi,[bx][di];

物理地址=ds*10h+bx+di=091d0h+0056h=09226h

(09226h)=00f6h(09228h)=1e40h

执行后:

bx=(09226h)=00f6h

ds=(09228h)=1e40h

mov[si],bx

物理地址=ds*10h+si=1e400h+0012h=1e412h

bx=0024h,执行后:

(1e412h)=0024h

(5)xchgcx,[bx+32h]

物理地址=ds*10h+bx+32h=091d0h+0056h=09226h

(09226h)=00f6h,cx=5678h

执行后:

(09226h)=5678h,cx=00f6h

xchg[bx+20h][si],ax

物理地址=ds*10h+bx+20h+si=091d0h+0056h=09226h

执行后:

(09226h)=1234h,cx=5678h

3.2设ds=1000h,ss=2000h,ax=1a2bh,bx=1200h,

cx=339ah,bp=1200h,sp=1350h,si=1354h,(11350h)=0a5h,(11351h)=3ch,(11352h)=0ffh,(11353h)=26h,(11354h)=52h,(11355h)=0e7h,(126a4h)=9dh,(126a5h)=16h,(21350h)=88h,(21351h)=51h。

下列各指令都在此环境下执行,在下列各小题的空格中填入相应个指令的执行结果。

(1)movax,

(2)movax,[1352h];ax=(ds*10h+1352h)=(11352h);ax=(3)mov0150h[bx],ch;物理地址=ds*10h+0150h+bx=11350h

(11350h)=,(11351h)=(不变)

(4)movax,0150h[bp];物理地址=ss*10h+0150h+bp=21350h

ax=(5)popax;物理地址=ss*10h+sp=21350h

_,_____

(6)add[si],cx;物理地址=ds*10h+si=11354h,(11354h)=__,(11355h)=,

(7)subbh,0150h[bx][si];

物理地址=ds*10h+0150h+bx+si=126a4h,(126a4h)=9dhbh=bh-9dh=bh+63h

bh=,(8)incbyteptr0152h[bx];

物理地址=ds*10h+0152h+bx=11352h,(11352h)=ffh

(11352h)=____,(11353h)=___,cf=____

(9)incwordptr0150h[bx]

物理地址=ds*10h+0152h+bx=11352h,(11352h)=ffh(11353h)=26h

(11352h)=_____,(11353h)=____,cf=____

(10)sarbyteptr0150h[bx],1

物理地址=ds*10h+0150h+bx=11350h,(11350h)=a5h(11350h)=____,cf=____

(12)salbyteptr0150h[bx],1

物理地址=ds*10h+0150h+bx=11350h,(11350h)=a5h(11350h)=_____,cf=__,of=__

3.3设下列各转移指令的第一字节在内存中的地址为cs=2000h和ip=016eh,且环境均为;ds=6000h,bx=16c0h,(616c0h)=46h,

(616c1h)=01h,(616c2h)=00h,(616c3h)=30h,(61732h)=70h,(61733h)=17h。

写出下列各无条件转移指令执行后cs和ip值。

各指令左手的16进制编码是该指令的机器码。

指令中的目的地址用相应的编号表示。

(1)ebe7jmpshortagain

short----段内短转,ip=ip+e7=016eh+ffe7h=0155h

(2)e90016jmpnearptrother

near----段内近转,ip=ip+1600h=016eh+1600h=176eh

(3)e3jmpbx

寄存器间接转(段内)----ip=bx=16c0h

(4)ea46010030jmpfarprob

段间直接转移--ip=0146h,cs=3000h

(5)ff67jmpwordptr0072h[bx]段内存储器间接转移:

物理地址=

ds*10h+0072h+bx=60000h+0072h+16c0h=61732h(61732h)=70h,(61733h)=17h

ip=(61732h)=1770h

(6)ffebjmpdwordptr[bx]

物理地址=ds*10h+0072h+bx=60000h+16c0h=616c0h(616c0h)=46h,,(616c1h)=01h,(616c2h)=00h,(616c3h)=30h

ip=(616c0h)=0146h,cs=3000h

3.4阅读下列各小题的指令序列,在后面空格中填入该指令序列的执行结果。

(1)movbl,85h;bl=85h

moval,17h;al=17h

addal,bl;al=9ch

daa;al=02h

【篇三:

微机原理及接口第三章作业答案】

lass=txt>1.下列各条指令是否有错?

如果有,请指出错误之处并改正。

(1)movds,1000h

(2)mov[100],23h

(3)addax,[bx+bp+6]

(4)pushdl

(5)inax,[3fh]

(6)out3ffh,al

(7)lesss,[si]

(8)pop[ax]

(9)imul4ch

(10)shlbx,5

(11)int300

(12)xchgdx,0fffh

答:

(1)错误。

不允许直接向段寄存器送立即数,可改为:

mov

movax,1000hds,ax

(2)错误。

该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上byteptr或wordptr说明,否则汇编程序会因不能确定操作数长度而指示出错。

可改为:

mov

add

push

inbyteptr[100],23hax,[bx+di+6]dxax,3fh(3)错误。

不能同时使用两个基址寄存器bx、bp进行间接寻址,可改为:

(4)错误。

堆栈操作应以字为单位进行,而dl是一个字节。

可改为:

(5)错误。

在输入/输出指令中,8位端口地址应直接写在操作数处。

可改为:

(6)错误。

端口地址3ffh已超出8位二进制表示范围,16位端口地址应用dx。

可改为:

mov

out

lesdx,3ffhdx,alax,[si](7)错误。

les指令的目操作数应该是通用寄存器,不能是段寄存器。

可改为:

(8)错误。

ax不能用于间接寻址,间接寻址只能用bx、bp、si、di四个寄存器之一。

可改为:

pop

mov

imul

mov

shl[bx]bl,4chblcl,5bx,cl(9)错误。

立即数不能做乘法指令的操作数,可改为:

(10)错误。

当逻辑移位的次数大于1时,应该用cl指示次数。

可改为:

(11)错误。

操作数300?

255,已超出有效的中断类型码范围。

(12)错误。

xchg指令不允许立即数做它的操作数。

可改为:

mov

xchg

cx,0fffhdx,cx

2.请指出以下各指令的源、目的操作数所使用的寻址方式。

(1)movsi,2100h

(2)sbbdisp[bx],7

(3)and[di],ax

(4)orax,[609eh]

(5)mov[bx+di+30h],cx

(6)pushes:

[bp]

(7)call[di]disp

(8)jnzshort_label

答:

(1)源操作数:

立即数寻址;目的操作数:

寄存器寻址

(2)源操作数:

立即数寻址;目的操作数:

(带位移量的)基址寻址

(3)源操作数:

寄存器寻址;目的操作数:

变址寻址

(4)源操作数:

直接寻址;目的操作数:

寄存器寻址

(5)源操作数:

寄存器寻址;目的操作数:

(带位移量的)基址变址寻址

(6)源操作数:

带段超越的基址寻址;目的操作数:

隐含寻址

(7)只有一个操作数,为(带位移量的)变址寻址

(8)只有一个操作数,为相对寻址

3.在已学的指令中,可实现累加器清0的单条指令有哪些?

比较它们的功能。

答:

共有以下四种方法:

(1)movax,0;仅将累加器清0,不会影响任何标志位

(2)subax,ax;累加器清0的同时影响所有状态标志,具体地有:

;zf、pf置1,cf、af、sf、of均清0

(3)andax,0;将累加器清0,zf、pf置1,cf、of、sf清0

(4)xorax,ax;将累加器清0,zf、pf置1,cf、of、sf清0

4.若要判断某带符号数的正、负而不影响其原值,可使用哪些方法?

答:

设带符号数为oprd,判断方法可有如下几种:

(1)执行指令addoprd,0之后,判断sf:

sf=0,oprd为正数,否则为负。

(2)执行指令suboprd,0之后,判断sf:

sf=0,oprd为正数,否则为负。

(3)执行指令cmpoprd,0之后,可直接判断sf:

sf=0,oprd为正数,否则为负;或者再接着执行指令jgenominus(即同时判断sf、of),若程序转移至nominus处,则oprd为正数,否则为负;同理,亦可在在执行完cmpoprd,0之后再接着执行指令jlnominus,若程序转移至nominus处,则oprd为负数,否则为正。

(4)执行指令cmpoprd,80h(或8000h)之后,判断cf:

cf=1,oprd为正数,否则为负。

(5)执行指令andoprd,oprd(或全“1”)之后,判断sf:

sf=0,oprd为正数,否则为负。

(6)执行指令testoprd,oprd(或全“1”)之后,判断sf:

sf=0,oprd为正数,否则为负。

(7)执行指令testoprd,80h(或8000h)之后,判断sf:

sf=0,oprd为正数,否则为负;或判断zf:

zf=1,oprd为正数,否则为负。

(8)执行指令oroprd,oprd(或全“0”)之后,判断sf:

sf=0,oprd为正数,否则为负。

(9)执行指令xoroprd,0之后,判断sf:

sf=0,oprd为正数,否则为负。

5.已知ds=2000h,有关的内存单元值为:

(21000h)=00h,(21001h)=12h,(21200h)=00h,(21201h)=10h,(23200h)=20h,(23201h)=30h,(23400h)=40h,(23401h)=30h,(23600h)=60h,(23601h)=30h,符号count的偏移地址为1200h。

执行下列指令后,寄存器ax、bx、si的值分别是多少?

movbx,offsetcount

movsi,[bx]

movax,count[si][bx]

答:

执行结果为bx=1200h,si=1000h,ax=3040h。

6.设标志寄存器值原为0401h,ax=3272h,bx=42a2h。

执行指令sbbal,bh之后,ax和标志寄存器的值分别是多少?

答:

由标志寄存器的原值04

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1