微机原理第三章答案.docx
《微机原理第三章答案.docx》由会员分享,可在线阅读,更多相关《微机原理第三章答案.docx(19页珍藏版)》请在冰豆网上搜索。
微机原理第三章答案
微机原理第三章答案
【篇一:
微机原理第三章作业答案】
操作码?
什么是操作数?
寻址和寻址方式的含义是什么?
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