第4章指令系统。
教材习题解答。
1. 若ds=3000h,bp=2000h,si=1000h,[32000h]=00h,[32001h]=40h,ss=3000h,[31000h]=20h,[31001h]=60h,[33000h]=50h,[33001h]=60h,说明下列各条指令执行后,ax中的内容是什么?并说明各条指令中源操作数的寻址方式。
1) mov ax,ds2) mov ax,[2000h]
3) mov ax,[si4) mov ax,[bp]
5) mov ax,[bp+si]
解】1) ax=3000h 寄存器寻址。
2) ax=4000h 直接寻址。
3) ax=6020h 寄存器间接寻址。
4) ax=4000h 寄存器间接寻址。
5) ax=6020h 基址加变址寻址。
2. 指出下列指令中的非法指令。
1) mov bx,al2) mov cs,2000h
3) push 4567h4) xchg var1,var2
5) add al,148h (6) mov ds,2000h
7) mov bh,si8) sub 38h,al
解】非法指令:
1) mov bx,albx和al的长度不一致。
2) mov cs,2000hcs段寄存器不能作目的操作数。
3) push 4567h只能将寄存器或存储单元的内容压入堆栈,不能是立即数。
4) xchg var1,var2 两个存储单元之间不能直接交换数据。
5) add al,148h运算溢出。
6) mov ds,2000h立即数不能直接传送给ds段寄存器。
7) mov bh,sibh和si的长度不一致。
8) sub 38h,al目的操作数不能是立即数。
3. 若sp=2000h,ax=3355h,bx=4466h,试指出下列指令或程序段执行后有关寄存器的内容。
(1) push ax
执行后ax=?,sp=?
(2) push ax
push bx
pop dx
pop cx
执行后ax=?,cx=?,dx=?,sp=?
解】(1) 执行后ax=3355h,sp=1ffeh
2) 执行后ax=3355h,cx=3355h,dx=4466h,sp=2000h
4. 请按下面的要求写出相应的汇编指令或指令序列。
1) 将1234h送入ds中。
2) 将5678h与ax中的数相加,结果放在ax中。
3) 将datax和datay相加,其和放在datay中。
4) 将ax中的高4位变为全0。
5) 将bx中的低2位变为全1。
6) 将cx中的d3~d7位取反。
解】1) mov ax,1234h
mov ds,ax
2) add ax,5678h
3) mov ax,datax
add ax,datay
mov datay,ax
4) and ax,0fffh
5) or ax,0003h
6) mov ax,cx
and ax,07h
xor cx,0ffffh
and cx,0fff8h
add cx,ax
5. 若al=0ffh,bl=03h,指出下列指令执行后标志af、of、zf、sf、pf、cf的状态。
1) add bl,al (2) inc bl
3) sub bl,al (4) neg bl
5) and bl,al (6) mul bl
7) cmp bl,al (8) imul bl
9) or bl,al (10)xor bl,bl
解】执行后:
6. 已知存储器中有两个压缩bcd码6543和4672存放在从buf开始的连续4个单元中(高字节放在高地址单元),试编制两数相减的程序,结果存放在后面的两个单元中。
解】程序段如下:
mov bx,buf
mov ax,[bx]
mov cx,[bx+2]
sub al,cl
mov dl,al
daamov al,ah
sbb al,ch
daamov ah,al
mov al,dl
mov [bx+4],ax
7. 假设dx=36a5h,cl=3,cf=1,确定下列各条指令执行后dx和cf的值。
1) shr dx,1 (2) sar dx,cl
(3) shl dx,cl (4) shl dl,1
(5) ror dx,cl (6) rol dl,cl
(7) sal dh,1 (8) sar dh,cl
(9) rcl dx,cl (10)rcr dx,cl
解】1) 指令执行后dx:1b52h,cf:1
2) 指令执行后dx:06d4h,cf:1
3) 指令执行后dx:6d4ah,cf:0
4) 指令执行后dx:364ah,cf:1
5) 指令执行后dx:0c6d4h,cf:1
6) 指令执行后dx:362dh,cf:1
7) 指令执行后dx:6ca5h,cf:0
8) 指令执行后dx:06a5h,cf:1
9) 指令执行后dx:0b529h,cf:1
10) 指令执行后dx:0a6d4h,cf:1
8. 编写程序段将寄存器al中的8位二进制数的内容颠倒过来,即将原来的最高位变为最低位,次高位变为次低位,以此类推,若原al的内容为01110001b,则颠倒之后变为10001110b。
解】程序段如下:
xor ah,ah ;ah清零。
mov cx,8重复8次。
lp1: shr al,1逻辑右移,将最最低位移入cf
rcl ah,1 ;带进位的循环左移,将cf移入ah的最低位。
loop lp1
mov al,ah ;存回al
9. 执行下列程序段,指出各相关寄存器的内容。
mov ax,0a0bh
dec ax
sub ax,0ffh
and ax,00ffh
mov cl,3
sal al,cl
add al,25h
xchg al,ah
push ax
pop bx
inc bl
解】各相关寄存器的内容:
mov ax,0a0bh ;ax:0a0bh
dec axax:0a0ah
sub ax,0ffh ;ax:090bh
and ax,00ffh ;ax:000bh
mov cl,3cl:03h
sal al,clax:0058h
add al,25h ;ax:007dh
xchg al,ahax:7d00h
push axax:7d00h
pop bxbx:7d00h
inc blbx:7d01h
10. 用串操作指令将100h个字符从2100h处搬到1000h处,并且从中检索与al中所存字符相同的存储单元,并将该单元的内容替换成空格,本程序只替换检索到的第一个相同的单元。请在下列空格中填入合适的指令,使程序段完成上述功能。
mov si,2100h
mov cx,100hcld
mov di,1000h
mov cx,100h
jnz k1
mov [di],20h
k1: ┇解】
1) mov di,1000h
2) rep movsb
3) repne scasb
4) dec di
11. 试分析下列程序段,如果ax和bx的内容分别为下列5种情况,问程序分别转向何处?
1) ax=147fh,bx=80dch
2) ax=0b586h,bx=54b5h
3) ax=42c0h,bx=608ah
4) ax=0d023h,bx=9fd7h
5) ax=94b7h,bx=0b568h
add ax,bx
jno l1
jnc l2
sub ax,bx
jnc l3
jno l4
jmp l5
解】1) l1;不溢出,转移到l1
2) l1;不溢出,转移到l1
3) l2;溢出,不转移到l1,进位为0,转移到l2
4) l3;溢出,不转移到l1,进位为1,不转移到l2,借位为0,转移到l3
5) l4;溢出,不转移到l1,进位为1,不转移到l2,借位为1,不转移到l3,不溢出,转移到l4
12. 编程求出ax中存放的16位二进制数中‘1’的个数,将其存入cl中(若ax=1001010011001011b则将8存入cl)。
解】程序段如下:
mov cx,16
xor bx,bx
l1: shl ax,1 ;最低位移入cf
rcl bl,1 ;cf移入最低位。
add bh,bl
xor bl,bl
loop l1
mov cl,bh
13. 已知buf单元有一个单字节无符号数x,按要求编写一程序段计算y(仍为单字节数),并将其存于累加器。
解】程序段如下:
xor ax,ax
mov al,buf
cmp al,20
jnb l1
mov bl,3
mul bl
jmp end
l1: sub ax,20
end: hlt
第4章作业
1 已知以下投资方式 当前投入7000元,第二年底投入1000元。回报方式为 第一年底收回4000元,第三年底收回5500元。判断如果投资者的可接受利率为0.12,该项目是否可行?2 现有两种可选的投资项目 a 期限5年,每年的收益率为0.09 b 期限10年,每年的收益率为0.08。为了使两种资产...
第4章作业
写出以下指令汇编后str1的偏移地址。datadsegment bu1db10hdup str1 db hello datad endscodesegment assume cs code,ds datad,es datadstart 2 试指出下列程序中有哪些语法错误,并说明是什么错误。datas...
第4章作业
写出以下指令汇编后str1的偏移地址。datad segment bu1 db 10h dup str1 db hello datad ends code segment assume cs code,ds datad,es datad start 2 试指出下列程序中有哪些语法错误,并说明是什么错...