汇编语言程序设计(第四版)第2章[课后答案]

发布时间 : 星期五 文章汇编语言程序设计(第四版)第2章[课后答案]更新完毕开始阅读

.

mov dh,string[si] ;第6个字符送dh寄存器:mov dl,stirng[5] (2)解答:

xor si,si ;si清零 mov al,buffer[si] ;第一字节 inc si

mov ah,buffer[si] ;第二字节 mov cl,4

shl ah,cl ;BCD码移到高半字节 or al,ah ;组合成压缩BCD码 mov dl,al ;存入dl寄.. inc si

mov al,buffer[si] ;第三字节 inc si

mov ah,buffer[si] ;第四字节 mov cl,4

shl ah,cl ;BCD码移到高半字节 or al,ah ;组合成压缩BCD码 mov dh,al ;存入dh寄.. (3)解答:

test dx,0f000h ; test dh,0f0h jz next ; jnz next mov ax,-1 ; mov ax,0 jmp again

next: mov ax,0 ; mov ax,0ffffh again: ... (4)解答:

mov ax, word ptr buffer1

sub ax, word ptr buffer2 ;先减低16位 mov dx, word ptr buffer1+2

sbb dx, word ptr buffer2+2 ;后减高16位,需减低16位的借位

- 13 -页

.

(5)解答:

mov ax,0b800h

mov ds,ax ;段地址 xor si,si ;地址偏移量si=0 xor dx,dx ;和的高字dx=0 mov cx,99 ;加的次数 mov ax,[si] ;第一个数 again: inc si ;指向下一个字单元 inc si

add ax,[si] ;加下一个数 jnc noc ;无进位转 inc dx ;有进位dx=dx+1 noc: dec cx ;次数-1 jnz cx,again ;非0继续加 (6)解答1:不使用串操作指令(更好) mov si,offset string

mov cx,8000h ; 32k=2^15=8000h

again: cmp byte ptr [si], ‘$’ ;‘$’ =24h jnz next ; 不要采用 jz 进行分支

mov byte ptr [si], ‘ ’ ;‘ ’=20h next: inc si

loop again ; dec cx ; jnz again (6)解答2:使用串操作指令 mov di,offset string mov al,’$’ mov cx,8000h cld

- 14 -页

.

again: scasb jnz next

mov byte ptr es : [di-1], ‘ ’

next: loop again (7)解答1:

mov si,offset array mov cx,100 again: dec byte ptr [si] inc si loop again (7)解答2:

xor si,si ; si<--0 mov cx,100 ; 循环次数 again: dec array[si] inc si loop again (7)解答3:

mov si,offset array mov di,si mov ax,ds mov es,ax mov cx,100 cld again: lodsb dec al stosb loop again (8)解答:

xor si,si ;si<--0

- 15 -页

.

coun: cmp string[si],'$' je done inc si jmp coun

done: ...

〔习题2.25〕对下面要求,分别给出3种方法,每种方法只用一条指令。

(1)使CF=0 (2)使AX=0 (3)同时使AX=0和CF=0 〔解答〕 (1)解答: clc and ax,ax or ax,ax (2)解答: xor ax,ax and ax,0 mov ax,0 (3)解答: and ax,0 xor ax,ax sub ax,ax

〔习题2.26〕参照本习题的示意图,分析调用序列,画出每次调用及返回时的堆栈状态。其中CALL前是该指令所在的逻辑地址;另外,段内直接调用指令的机器代码的字节数为3,段间直接调用指令则为5个字节。

〔解答〕

主程序转子suba时段内调用:断点1为2000h:0400h+3, 转子是只将IP压栈。

suba转子subb时段间调用:断点2为2000h:0840h+5, 转子时须将cs段地址和IP压栈 suba转子subc时段内调用:断点3为2000h:0c021h+3,转子是只将IP压栈。 注:压栈时先修改sp再压入断点,弹栈时先弹出断点再修改sp。

〔习题2.27〕已知AX 、BX存放的是4位压缩BCD表示的十进制数,请说明如下子程序的功能和出口参数。

add al,bl

- 16 -页

联系合同范文客服:xxxxx#qq.com(#替换为@)