钱晓捷新版汇编语言程序设计习题答案(修改)(8)

2018-12-20 22:16

〔解答〕

8086的条件转移的转移范围:在当前指令地址的 +127~-128之内。

如条件转移的转移范围超出此范围,可在此范围内安排一条无条件转移,再转移到范围外的目标地址。

〔习题2.21〕假设DS=2000H,BX=1256H,SI=528FH,位移量TABLE=20A1H,[232F7H]=3280H,[264E5H]=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?

(1) JMP BX (2) JMP TABLE[BX] (3) JMP [BX][SI] 〔解答〕

(1)转移的有效地址EA= BX=1256H

(2)转移的有效地址EA= [DS:20A1H+1256H]=[232F7]=3280H (3)转移的有效地址EA= [DS:1256H+528FH]=264E5H=2450H

〔习题2.22〕判断下列程序段跳转的条件

(1) xor ax,1e1eh je equal (2)test al,10000001b jnz there (3)cmp cx,64h jb there 〔解答〕

(1)AX=1e1eh(异或后为0) (2)AL的D0或D7至少有一位为1 (3)CX(无符号数)< 64h

〔习题2.23〕设置CX = 0,则LOOP指令将循环多少次?例如:

mov cx,0 delay: loop delay 〔解答〕

第 36 页 共 67 页

216次。

〔习题2.24〕假设AX和SI存放的是有符号数,DX和DI存放的是无符号数,请用比较指令和条件转移指令实现以下判断:

(1)若DX > DI,转到above执行; (2)若AX > SI,转到greater执行; (3)若CX = 0,转到zero执行;

(4)若AX-SI产生溢出,转到overflow执行; (5)若SI≤AX,转到less_eq执行; (6)若DI≤DX,转到below_eq执行。 〔解答〕

(1)若DX > DI,转到above执行 cmp dx,di

ja above ;=jnbe above (2)若AX > SI,转到greater执行 cmp ax,si

jg greater ;=jnle greater (3)若CX = 0,转到zero执行 cmp cx,0

jz zero ;= jcxz zero

(4)若AX-SI产生溢出,转到overflow执行; cmp ax,si jo overflow

(5)若SI≤AX,转到less_eq执行; cmp si,ax ; cmp ax,si jle less_eq ; jge less_eq (6)若DI≤DX,转到below_eq执行。 cmp di,dx ; cmp dx,di jbe below_eq ; jae below_eq

第 37 页 共 67 页

〔习题2.25〕有一个首地址为array的20个字的数组,说明下列程序段的功能。

mov cx,20 mov ax,0 mov si,ax

sum_loop: add ax,array[si] add si,2 loop sum_loop mov total,ax 〔解答〕

将首地址为array得20个字的数组求和,并将结果存入 total 单元中。

〔习题2.26〕按照下列要求,编写相应的程序段:

(1)起始地址为string的主存单元中存放有一个字符串(长度大于6),把该字符串中的第1个和第6个字符(字节量)传送给DX寄存器。

(2)从主存buffer开始的4个字节中保存了4个非压缩BCD码,现按低(高)地址对低(高)位的原则,将它们合并到DX中。

(3)编写一个程序段,在DX高4位全为0时,使AX = 0;否则使AX = -1。

(4)有两个64位数值,按“小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成buffer1-buffer2功能。

(5)假设从B800h : 0开始存放有100个16位无符号数,编程求它们的和,并把32位的和保存在DX.AX中。

(6)已知字符串string包含有32KB内容,将其中的?$?符号替换成空格。

(7)有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出)存于原处。

(8)统计以 ?$? 结尾的字符串srting的字符个数。 〔解答〕 (1)解答: mov si,0

mov dl,string[si] ;第1个字符送dl寄存器:mov dl,stirng[0] mov si,5

第 38 页 共 67 页

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位

第 39 页 共 67 页

mov dx, word ptr buffer1+2

sbb dx, word ptr buffer2+2 ;后减高16位,需减低16位的借位 (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:使用串操作指令

第 40 页 共 67 页


钱晓捷新版汇编语言程序设计习题答案(修改)(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:09-14英语四级作文题目及范文new

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: