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

2026/1/14 6:20:50

mov ah,2 int 21h mov dl,?H?

;显示一个字母“H”

mov ah,2 int 21h pop dx pop cx ret

DIPASC endp HTOASC proc ;将AL低4位表达的一位16进制数转换为ASCII码 and al,0fh cmp al,9 jbe htoasc1 add al,37h ;是0AH~0FH,加37H转换为ASCII码 ret ;子程序返回 htoasc1: add al,30h ;是0~9,加30H转换为ASCII码 ret ;子程序返回 HTOASC

〔习题3.30〕

endp

写一个子程序,根据入口参数AL=0、1、2,依次实现对大写字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。 〔解答〕

lucase proc push bx mov bx,offset string cmp al,0 je case0 cmp al,1 jz case1 cmp al,2 jz case2 jmp done

case0: cmp byte ptr [bx],0 je done cmp byte ptr [bx],?A? jb next0

25

cmp byte ptr [bx],?Z? ja next0 add byte ptr [bx],20h next0: inc bx jmp case0

case1: cmp byte ptr [bx],0 je done cmp byte ptr [bx],?a? jb next1 cmp byte ptr [bx],?z? ja next1 sub byte ptr [bx],20h next1: inc bx jmp case1

case2: cmp byte ptr [bx],0 je done cmp byte ptr [bx],?A? jb next2 cmp byte ptr [bx],?Z? ja next20 add byte ptr [bx],20h jmp next2

next20: cmp byte ptr [bx],?a? jb next2 cmp byte ptr [bx],?z? ja next2 sub byte ptr [bx],20h next2: inc bx jmp case2 done: pop bx ret

lucase endp

〔习题3.31〕

子程序的参数传递有哪些方法,请简单比较。 〔解答〕

26

〔习题3.32〕

采用堆栈传递参数的一般方法是什么,为什么应该特别注意堆栈平衡问题。 〔解答〕

〔习题3.33〕

编写一个求32位数据补码的子程序,通过寄存器传递入口参数。 〔解答〕 方法1:

neg32 proc ;入口参数:DX.AX=32位有符号数 neg ax ;实现0-DX.AX功能

neg dx

sbb dx,0 ;这条指令也可以用dec dx代替

ret

neg32 endp ;出口参数:DX.AX=32位有符号数的补码 方法2:

neg32 proc ;入口参数:DX.AX=32位有符号数 not ax ;实现DX.AX求反加1 not dx add ax,1 adc dx,0 ret

neg32 endp ;出口参数:DX.AX=32位有符号数的补码

〔习题3.34〕

编写一个计算字节校验和的子程序。所谓“校验和”是指不记进位的累加,常用于检查信息的正确性。主程序提供入口参数,有数据个数和数据缓冲区的首地址。子程序回送求和结果这个出口参数。传递参数方法自定。 〔解答〕

;数据段 array db 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h ;数组 count equ $-array ;数组元素个数 result db ? ;校验和 ;代码段 mov bx,offset array ;BX←数组的偏移地址 mov cx,count ;CX←数组的元素个数 call checksum ;调用求和过程

27

mov result,al ;处理出口参数

mov ax,4c00h int 21h

;计算字节校验和的通用过程

;入口参数:DS:BX=数组的段地址:偏移地址,CX=元素个数 ;出口参数:AL=校验和

;说明:除AX/BX/CX外,不影响其他寄存器

checksum proc xor al,al ;累加器清0 sum: add al,[bx] ;求和 inc bx ;指向下一个字节 loop sum ret checksum endp end

〔习题3.35〕

编制3个子程序把一个16位二进制数用4位16进制形式在屏幕上显示出来,分别运用如下3种参数传递方法,并配合3个主程序验证它。

? 采用AX寄存器传递这个16位二进制数 ? 采用temp变量传递这个16位二进制数 ? 采用堆栈方法传递这个16位二进制数 〔解答〕

?

.model small .stack .data

wdata dw 34abh .code .startup mov ax,wdata call dispa .exit 0 ; dispa proc push cx push dx

28


《微机原理及接口技术》(第2版)—习题解答.doc 将本文的Word文档下载到电脑
搜索更多关于: 《微机原理及接口技术》(第2版)—习题解答 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

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