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 ...