第一范文网 - 专业文章范例文档资料分享平台

《微机原理及接口技术》(第2版)—习题解答

来源:用户分享 时间:2025/5/19 10:18:53 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

; wjxt323.asm .model small .code start: mov ax,0040h ;送段地址

mov ds, ax mov si, 0 ;偏移地址 mov cx, si ;计数(循环次数) xor ax, ax ;空格计数器清零

again: cmp byte ptr [si], 20h ;与空格的ASCII码比较 jne next ;不是空格,转 inc ax ;是空格,空格数加1 next: inc si ;修改地址指针 loop again ;cx=cx-1,如cx=0 退出循环 .exit 0 end start

〔习题3.24〕

编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示‘Overflow !’。 〔解答〕

;数据段

count parray

equ 100

dw count dup(?)

;假设有100个数据

wordsum dw 0

msg db ?overflow?,?$? ;代码段

mov cx,count mov ax,0 mov bx,offset parray again: add ax,[bx] jnc next mov dx,offset msg mov ah,9 int 21h ;显示溢出信息 jmp done ;然后,跳出循环体 next: add bx,2 loop again mov wordsum,ax

21

done: … 〔习题3.25〕

编程把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以100、10和1,得到“百位”、“十位”和“个位”。 〔解答〕

;wjxt325.asm .model small .stack 256 .data array dw ? ;源字数据 dbcd db 5 dup(?) ;五位bcd结果,高对高低对低 .code .startup mov dx, array ;取源数据(余数) mov bx, 10000 ;除数 mov cx, 10 ;除数系数 mov si, 4 ;目的数据高位位移量

again: mov ax, dx ;dx.ax中存放被除数

〔习题3.26〕

过程定义的一般格式是怎样的?子程序开始为什么常有PUSH指令、返回前为什么常有POP指令?下面完成16位无符号数累加的子程序有什么不妥吗?若有,请改正:

crazy

mov dx, 0

div bx ;除于bx,商ax,余数dx mov dbcd[si], al ;商<10,存结果 push dx ;暂存余数

mov ax, bx ;除数除于10

mov dx,0

div cx ;dx.ax除于cx,商ax、余数0存在dx mov bx, ax ;bx是除数 pop dx

dec si ;目的数据位移量减1 jnz again

mov dbcd, dl ;存个位数( < 10 ) .exit 0 end

PROC

22

push ax xor ax,ax xor dx,dx

again: add ax,[bx] adc dx,0 inc bx inc bx loop again ret ENDP crazy 〔解答〕

crazy PROC ;crazy PROC push ax ; xor ax,ax ; xor ax,ax xor dx,dx ; xor dx,dx

again: add ax,[bx] ;again: add ax,[bx] adc dx,0 ; adc dx,0 inc bx ; inc bx inc bx ; inc bx loop again ; loop again ret ; ret ENDP crazy ; crazy 〔习题3.27〕

ENDP

编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。请调用书中的HTOASC子程序。 〔解答〕

again: mov ah,1 int 21h cmp al,1bh ;ESC的ASCII码是1bh

je done mov dl,al mov ah,2

int 21h ;是大写字母则转换为小写字母

jmp again done: …

23

〔习题3.28〕

请按如下说明编写子程序: ;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数 ;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码 ;出口参数:AL=对应的二进制数 〔解答〕

asctob proc push cx and dh,0fh ;先转换十位数 shl dh,1 ;十位数乘以10(采用移位指令)

mov ch,dh shl dh,1 shl dh,1 add dh,ch and dl,0fh ;转换个位数 add dh,dl ;十位数加个位数 mov al,dh;设置出口参数

pop cx ret

asctob endp

〔习题3.29〕

调用HTOASC子程序,编写显示一个字节的16进制数、后跟“H”的子程序。 〔解答〕

DIPASC proc ;入口参数:AL=要显示的一个16进制数

push cx push dx push ax

mov cl,4 ;转换高位 shr al,cl

call HTOASC mov dl,al ;显示 mov ah,2 int 21h

pop ax ;转换低位 call HTOASC mov dl,al ;显示

24

《微机原理及接口技术》(第2版)—习题解答.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7eoiu2cbv66bod04q6yt_6.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top