《汇编语言与接口技术》习题解答(第三章).doc

上传人:F****n 文档编号:98110632 上传时间:2019-09-08 格式:DOC 页数:13 大小:76KB
返回 下载 相关 举报
《汇编语言与接口技术》习题解答(第三章).doc_第1页
第1页 / 共13页
《汇编语言与接口技术》习题解答(第三章).doc_第2页
第2页 / 共13页
《汇编语言与接口技术》习题解答(第三章).doc_第3页
第3页 / 共13页
《汇编语言与接口技术》习题解答(第三章).doc_第4页
第4页 / 共13页
《汇编语言与接口技术》习题解答(第三章).doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《《汇编语言与接口技术》习题解答(第三章).doc》由会员分享,可在线阅读,更多相关《《汇编语言与接口技术》习题解答(第三章).doc(13页珍藏版)》请在金锄头文库上搜索。

1、3.16 解:mov ah,1;只允许输入小写字母int 21hsub al,20h;转换为大写字母mov dl,almov ah,2int 21h;显示3.18 解:mov ax, bufXcmp ax, bufYjge donemov ax, bufYdone:mov bufZ, ax3.19 解:.model small.stack.databufXdw -7signXdb ?.code.startupcmp bufX,0;test bufX,80hjl next;jnz nextmov signX,0jmp donenext:mov signX,-1done:.exit 0end3.2

2、0 解:mov dl,2mov ax,bufXcmp ax,bufYje next1dec dlnext1:cmp ax,bufZje next2dec dlnext2:mov ah,2int 21h3.22 编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。;wjxt322.asm.model small.stack.datab_datadb 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始数据numequ 10;数据个数sumdb

3、?;预留结果单元.code.startupxor si, si;位移量清零xor al, al;取第一个数mov cx, num;累加次数again:add al, b_datasi;累加inc si;指向下一个数loop again;如未完,继续累加mov sum, al;完了,存结果.exit 0end3.30 解:lucaseprocpush bxmov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0:cmp byte ptr bx,0je donecmp byte ptr bx,

4、Ajb next0cmp byte ptr bx,Zja next0add byte ptr bx,20hnext0:inc bxjmp case0case1:cmp byte ptr bx,0je donecmp byte ptr bx,ajb next1cmp byte ptr bx,zja next1sub byte ptr bx,20hnext1:inc bxjmp case1case2:cmp byte ptr bx,0je donecmp byte ptr bx,Ajb next2cmp byte ptr bx,Zja next20add byte ptr bx,20hjmp ne

5、xt2next20:cmp byte ptr bx,ajb next2cmp byte ptr bx,zja next2sub byte ptr bx,20hnext2:inc bxjmp case2done:pop bxretlucaseendp习题3.1解答:参考教材(第60页)习题3.6问题:n 给出你采用一个源程序格式书写的例题3.1源程序解答:.model small.stack.datastringdb Hello, Assembly !,0dh,0ah,$.codestart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int

6、21hmov ax,4c00hint 21hend start习题3.12解答:ORG伪指令习题3.13解答:段地址和偏移地址属性,类型属性习题3.26问题:n 过程定义的一般格式是怎样的?子程序开始为什么常有PUSH指令、返回前为什么常有POP指令?下面完成16位无符号数累加的子程序有什么不妥吗?若有,请改正:解答:crazyPROC;crazyPROCpush ax;xor ax,ax;xor ax,axxor dx,dx;xor dx,dxagain:add ax,bx;again:add ax,bxadc dx,0;adc dx,0inc bx;inc bxinc bx;inc bxl

7、oop again;loop againret;retENDP crazy; crazyENDP字量求和子程序入口参数:BX数据首址CX数据个数出口参数:AX和的低字DX和的高字(进位部分)习题3.28问题:n 请按如下说明编写子程序:;子程序功能:把用ASCII码表示的两位十进制数转换为对应二进制数;入口参数:DH十位数的ASCII码,DL个位数的ASCII码;出口参数:AL对应的二进制数解答:asctobprocpush cx;先转换十位数and dh,0fhshl dh,1;乘以10mov ch,dhshl dh,1shl dh,1add dh,ch;转换个位数and dl,0fh;十位

8、数加个位数add dh,dl;设置出口参数mov al,dhpop cxretasctobendp习题3.341问题:n 编写一个计算字节校验和的子程序。所谓“校验和”是指不记进位的累加,常用于检查信息的正确性。主程序提供入口参数,有数据个数和数据缓冲区的首地址。子程序回送求和结果这个出口参数。传递参数方法自定。解答:;数据段arraydb 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90hcountequ $-array;数组元素个数resultdb ?;校验和;代码段(主程序)mov bx,offset array;BX数组的偏移地址mov cx,count

9、;CX数组的元素个数call checksum;调用求和过程mov result,al;处理出口参数习题3.342;代码段(子程序);计算字节校验和的通用过程;入口参数:DS:BX数组的段地址:偏移地址CX元素个数;出口参数:AL校验和;说明:除AX/BX/CX外,不影响其他寄存器checksumprocxor al,al;累加器清0sum:add al,bx;求和inc bx;指向下一个字节loop sumretchecksumendp习题3.17已知用于LED数码管的显示代码表为:LEDtabledb 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,9

10、0h,88h,83h,0c6h,0c1h,86h,8eh它依次表示09、AF这16个数码的显示代码。现编写一个程序实现将lednum中的一个数字(09、AF)转换成对应的LED显示代码。解答 ;数据段LEDtabledb 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0clh,86h,8ehlednumdb 0ah ; 代码段 mov bx, offset LEDtable mov al, lednum xlat;al中存有对应的LED显示代码习题3.21例题3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(

11、而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段。解答;代码段mov al,numbermov bx,0;BX记录为1的位数restart:cmp al,0;AL0结束jz doneagain:shr al,1;最低位右移进入CFjc next;为1,转移inc bx;不为1,继续jmp againnext:push axpush bxshl bx,1;位数乘以2(偏移地址要用2个字节单元)jmp addrsbx;间接转移:IPtableBX;以下是各个处理程序段fun0:mov dl,0jmp dispfun1:mov dl,1jmp dispfun2:mov dl,2jmp

12、 dispfun3:mov dl,3jmp dispfun4:mov dl,4jmp dispfun5:mov dl,5jmp dispfun6:mov dl,6jmp dispfun7:mov dl,7jmp dispdisp:mov ah,2;显示一个字符int 21hpop bxpop axjmp restartdone: 习题3.24编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示Overflow !。解答 ;数据段countequ 100parraydw count dup(?);假设有100个数据wordsumdw 0msgdb overflow,$;代码段mov cx,countmov ax,0mov bx,offset parrayagain:add ax,bxjnc nextmov dx,offset msgmov ah,9int 21h;显示溢出信息jmp done;然后,跳出循环体next:add bx,2loop againmov wordsum,axdone:习题3.25编程把一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号