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

发布 2022-07-05 03:29:28 阅读 9294

1. 下列各条指令是否有错?如果有,请指出错误之处并改正。

1) mov ds,1000h

2) mov [100],23h

3) add ax,[bx+bp+6]

4) push dl

5) in ax,[3fh]

6) out 3ffh,al

7) les ss,[si]

8) pop [ax]

9) imul 4ch

10) shl bx,5

11) int 300

12) xchg dx,0fffh

答:(1)错误。不允许直接向段寄存器送立即数,可改为:

mov ax,1000h

mov ds,ax

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

mov byte ptr [100],23h

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

add ax,[bx+di+6]

4)错误。堆栈操作应以字为单位进行,而dl是一个字节。可改为:

push dx

5)错误。在输入/输出指令中,8位端口地址应直接写在操作数处。可改为:

in ax,3fh

6)错误。端口地址3ffh已超出8位二进制表示范围,16位端口地址应用dx。可改为:

mov dx,3ffh

out dx,al

7)错误。les指令的目操作数应该是通用寄存器,不能是段寄存器。可改为:

les ax,[si]

8)错误。ax不能用于间接寻址,间接寻址只能用bx、bp、si、di四个寄存器之一。可改为:

pop [bx]

9)错误。立即数不能做乘法指令的操作数,可改为:

mov bl,4ch

imul bl

10)错误。当逻辑移位的次数大于1时,应该用cl指示次数。可改为:

mov cl,5

shl bx,cl

11)错误。操作数300 255,已超出有效的中断类型码范围。

12)错误。xchg指令不允许立即数做它的操作数。可改为:

mov cx,0fffh

xchg dx,cx

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

1) mov si,2100h

2) sbb disp[bx],7

3) and [di],ax

4) or ax,[609eh]

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

6) push es:[bp]

7) call [di]disp

8) jnz short_ label

答:(1)源操作数:立即数寻址;目的操作数:寄存器寻址。

2)源操作数:立即数寻址;目的操作数:(带位移量的)基址寻址。

3)源操作数:寄存器寻址;目的操作数:变址寻址。

4)源操作数:直接寻址; 目的操作数:寄存器寻址。

5)源操作数:寄存器寻址;目的操作数:(带位移量的)基址变址寻址。

6)源操作数:带段超越的基址寻址;目的操作数:隐含寻址。

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

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

3. 在已学的指令中,可实现累加器清0的单条指令有哪些?比较它们的功能。

答:共有以下四种方法:

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

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

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

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

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

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

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

1) 执行指令 add oprd,0 之后,判断sf:sf =0,oprd为正数,否则为负。

2) 执行指令 sub oprd,0 之后,判断sf:sf =0,oprd为正数,否则为负。

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

4) 执行指令 cmp oprd,80h(或8000h)之后,判断cf:cf =1,oprd为正数,否则为负。

5) 执行指令 and oprd,oprd(或全“1”)之后,判断sf:sf =0,oprd为正数,否则为负。

6) 执行指令 test oprd,oprd(或全“1”)之后,判断sf:sf =0,oprd为正数,否则为负。

7) 执行指令 test oprd,80h(或8000h)之后,判断sf:sf =0,oprd为正数,否则为负;或判断zf:zf =1,oprd为正数,否则为负。

8) 执行指令 or oprd,oprd(或全“0”)之后,判断sf:sf =0,oprd为正数,否则为负。

9) 执行指令 xor oprd,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的值分别是多少?

mov bx,offset count

mov si,[bx]

mov ax,count[si][bx]

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

6. 设标志寄存器值原为0401h,ax=3272h,bx=42a2h。执行指令sbb al,bh之后,ax和标志寄存器的值分别是多少?

答:由标志寄存器的原值0401h可知,cf的原值为1,故指令执行之后ax=322fh,标志寄存器的值为0410h,即af变为1,cf变为0,其余不变。

7. 设若标志寄存器原值为0a11h,sp=0060h,al=4。下列几条指令执行后,标志寄存器、ax、sp的值分别是多少?

pushflahf

xchg ah,al

push ax

sahfpopf

答:指令执行后标志寄存器的值为0411h,ax=0411h ,sp=005eh。

8. 设若内存单元data在数据段中偏移量为24c0h处,24c0h~24c3h单元中依次存放着55h、66h、77h、88h。下列几条指令执行后,寄存器ax、bx、cl、si、ds的值分别是多少?

mov ax,data

lea si,data

mov cl,[si]

lds bx,data

答:执行结果为ax=6655h,bx=6655h,cl=55h,si=24c0h,ds=8877h。

9. 若ax=26d3h,cx=7908h,cf=1,执行下列指令后,寄存器ax、cx的值分别是多少?cf=?of=?

sal ch,1

rcr ax,cl

rol al,1

答:执行结果为ax=0a64ch,cx=0f208h,cf=of=0。

10. 已知ip=1000h,cf=0,则执行指令jnc short label后,下列各数中哪一个是可能的ip值?

a)0ffffh (b)0ffehc)10fehd)1100h

答:(b)简析:条件转移指令执行前ip=1000h,执行jnc指令后ip=1002h;又因cf=0,所以应跳转至目标地址处,该处对应的新ip值=1002h+相对位移量。

由于条件转移指令的跳转范围在距本条指令-128~+127个字节内,即新ip值可能的取值范围为0f82h~1081h,因此只有答案b符合条件。

11. 设ds=4500h,ax=0508h,bx=4000h,si=0320h。当8086cpu在最小组态下执行指令mov [bx+si+0100h],ax 时,各控制信号m/、dt/、、在有效期间的状态分别是什么?数据总线和地址总线上的数分别是多少?

答:各控制信号m/、dt/、、在有效期间的电平分别是:高、高、高、低。数据总线上的数是0508h,地址总线上的地址是49420h。

12. 已知有某字串buf1的首址为0000h,buf2的首址为0010h,数据段与附加段重合。欲从buf1处开始将10个字数据顺序传送至buf2处,试在下面程序段的空白处填上适当的指令或操作数以实现上述功能。

lea si,buf1

add si, 18

lea di,buf2

add di,18

stdmov cx, 10

rep movsw

13. 附加段中有某字符串首址为block,长17个字节。欲查找其中第一次出现字符“e”的位置,并将该位置所在的偏移量入栈保护。试在下面程序段的空白处填上适当的指令或操作数以实现上述功能。

mov di, offset block

mov al, ‘e’

mov cx,17

cldrepne scasb

jne other

dec di

push di

other:……略)

14. 已知附加段中有一块长50个字的数据区,首址为dest。欲编程将它们全部初始化为0ffffh值,试在下面程序段的空白处填上适当的指令或操作数,以实现上述功能。

lea di,dest

mov cx, 100

cldmov al,0ffh

rep stosb

15. 已知有程序段如下:

mov al,35h

mov dl,al

and dl,0fh

and al,0f0h

mov cl,4

shr al,cl

mov bl,10

mul bl

add al,dl

执行之后,al等于多少?该程序段完成了什么功能?

答:程序段执行后al=23h。该程序段实现了将al中的1个组合bcd码转换为十六进制数并存回al中的功能。

16. 以hex为首址的字节单元处存放着一串ascii字符:“0123456789abcdef”,并有程序段如下:

mov bx,offset hex

lea di,hcod

inc di

stdmov al,5ch

mov ah,al

and al,0fh

xlat hex

stosbmov al,ah

mov cl,4

shr al,cl

xlat hex

stosb上述程序段执行后,字节单元hcod及其相邻单元hcod+1的内容是多少?该程序段的功能是什么?

微机原理第三章作业答案

3.1 简要分析8086的指令格式由哪些部分组成,什么是操作码?什么是操作数?寻址和寻址方式的含义是什么?8086指令系统有哪些寻址方式?解答 8086的指令格式由操作码和操作数字段组成。操作码 要完成的操作。操作数 参与操作的对象。寻址 寻找操作数或操作数地址的过程。寻址方式 指令中给出的找到操作...

通信原理第三章作业答案

3 2由于x,y统计独立,因此有 由于x,y统计独立,因此有 所以 1 若平稳,则需满足均值为常数,自相关仅是的函数 均值 因此有 自相关 综上,随机过程z t 是平稳的,证毕。注 不同,图形会有所不同,但可看作正弦波与三角波的乘积。以下两图分别是和的图,供参考。3 对于平稳随机过程,满足维纳 辛钦...

汇编与接口第三章作业

1 已知ds 2000h,bx 0100h,si 0002h,存储单元 20100h 20103h 依次存放12 24 56 78h,21200h 21203h 依次存放2a 4c b7 65h,说明下列每条指令执行后ax寄存器的内容。1 mov ax,1200h 解 ax 1200h 3 mov ...