汇编语言与接口技术习题解答_第1页
汇编语言与接口技术习题解答_第2页
汇编语言与接口技术习题解答_第3页
汇编语言与接口技术习题解答_第4页
汇编语言与接口技术习题解答_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、习题3.1014问题:画图说明下列语句分配的存储空间及初始化的数据值 解答:(1)byte_var DB 'ABC',10,10h,'EF',3 DUP(-1,?,3 DUP(4)A'B'C'1010hE'F'-1一44441h 42h 43h OahlOh 45h 46h ffh04h 04h 04h(2) word_var DW 10h,-5,3 DUP(?)10h0FBhFFh10h 53.16 解:3.18 解:done:3.19 解:bufX signXmov ah,1 int 21h sub al,20h mo

2、v dl,al mov ah,2 int 21hmov ax, bufX cmp ax, bufY jge done mov ax, bufY mov bufZ, ax.model small.stack.datadw -7 db ?.code .startup cmp bufX,0只允许输入小写字母转换为大写字母显示;test bufX,80hjl next ;jnz next mov signX,0 jmp donenext:mov signX,-1done:.exit 0end3.20 解:mov dl, ' 2'mov ax,bufX cmp ax,bufY je ne

3、xt1 dec dl next1: cmp ax,bufZje next2 dec dl next2: mov ah,2int 21h3.22 编制程序完成 12H 45H 0F3H 6AH 20H OFEH 90H 0C8H 57H和 34H 等10个字节数据之和,并将结果存入字节变量 SUM中 (不考虑溢出和进位)。;wjxt322.asm .model small .stack .data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h equ 10 db ?.code .startup xor si, si xor al, al mov cx

4、, num add al, b_datasi inc si loop again mov sum, al .exit 0 endb_data num sumagain:原始数据;数据个数 ;预留结果单元;位移量清零;取第一个数 ;累加次数;累加 ;指向下一个数 ;如未完,继续累加 ;完了,存结果3.30 解:lucase proc push bx mov bx,offset string cmp al,0 je case0cmp al,1 jz case1 cmp al,2 jz case2 jmp donecase0:cmp byte ptr bx,0je donecmp byte ptr

5、bx,' A'jb next0cmp byte ptr bx,' Z'ja next0add byte ptr bx,20hnext0:inc bxjmp case0case1:cmp byte ptr bx,0je donecmp byte ptr bx,' a'jb next1cmp byte ptr bx,' z'ja next1sub byte ptr bx,20hnext1:inc bxjmp case1case2:cmp byte ptr bx,0je donecmp byte ptr bx,' A'j

6、b next2cmp byte ptr bx,' Z'ja next20add byte ptr bx,20hjmp next2next20:cmp byte ptr bx,' a'jb next2cmp byte ptr bx,' z'ja next2sub byte ptr bx,20hnext2:inc bxjmp case2done:pop bxretlucaseendp习题 3.1 解答:参考教材(第 60 页)习题 3.6问题:给出你采用一个源程序格式书写的例题 3.1 源程序 解答:.model small.stack.data s

7、tring db 'Hello, Assembly ! ',0dh,0ah, '$'.codestart: mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ax,4c00hint 21hend start习题 3.12 解答: ORG 伪指令习题 3.13 解答:段地址和偏移地址属性,类型属性习题 3.26问题: 过程定义的一般格式是怎样的?子程序开始为什么常有 PUSH 指令、 返回前为什么 常有 POP 指令?下面完成 16 位无符号数累加的子程序有什么不妥吗?若有,请改 正:解答:cra

8、zyPROC ;crazy PROCpush 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 bxloop again ; loop again ret ; retENDP crazy ; crazy ENDP 字量求和子程序 入口参数:BX =数据首址CX =数据个数 出口参数:AX =和的低字DX =和的高字(进位部分)习题 3.28 问题:请按如下说明编写子程序:;子程序功能:把用 ASCII 码

9、表示的两位十进制数转换为对应二进制数 ;入口参数: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.341问题:编写一个计算字节校验和的子程序。所谓 “校验和 ”是指不记进位的累加,常用于检 查信息的正确

10、性。主程序提供入口参数,有数据个数和数据缓冲区的首地址。子程 序回送求和结果这个出口参数。传递参数方法自定。解答:;数据段array db 12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90hcount equ $-array ;数组元素个数result db ? ;校验和;代码段(主程序)mov bx,offset array ; BX J数组的偏移地址mov cx,count ; CX J数组的元素个数call checksum ;调用求和过程mov result,al ;处理出口参数习题 3.342;代码段(子程序);计算字节校验和的通用过程;入口参数:DS

11、:BX =数组的段地址:偏移地址CX =元素个数;出口参数:AL =校验和;说明:除 AX/BX/CX 外,不影响其他寄存器checksum procxor al,al ;累加器清 0sum:add al,bx ;求和inc bx ;指向下一个字节loop sumretchecksum endp习题 3.17 已知用于 LED 数码管的显示代码表为:LEDtabledb 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示09、AF这16个数码的显示代码。现编写一个程序实现将led num中的

12、一个数字(09、AF)转换成对应的 LED显示代码。解答;数据段LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0clh,86h,8ehlednum db 0ah; 代码段mov bx, offset LEDtablemov al, lednumxlat ;al 中存有对应的 LED 显示代码习题 3.21而不是例题中仅例题 3.7 中,如果要实现所有为 1的位都顺序执行相应的处理程序段 执行最低为 1位的处理程序段),请写出修改后的代码段。解答;代码段mov al,numbermov bx,0 ;

13、BX J记录为1的位数restart: cmp al,0 ;AL = 0 结束jz done;最低位右移进入 CF;为 1,转移;不为 1,继续again:shr al,1jc next inc bx jmp againnext:push axpush bxshl bx,1 ;位数乘以 2(偏移地址要用 2 个字节单元) jmp addrsbx ;间接转移: IPJtable BX ;以下是各个处理程序段fun0:mov dl,'0'jmp dispfun1:mov dl,'1'jmp dispfun2:mov dl,'2'jmp dispfun

14、3:mov dl,'3'jmp dispfun4:mov dl,'4'jmp dispfun5:mov dl,'5'jmp dispfun6:mov dl,'6'jmp dispfun7:mov dl,'7'jmp dispdisp:mov ah,2 ;显示一个字符int 21h pop bxpop axjmp restartdone:习题 3.24 编写计算 100 个正整数之和的程序。如果和不超过 16 位字的范围( 65535),则保存 其和到 wordsum ,如超过则显示 Overflow ! '

15、。解答;数据段count parrayequ 100dw count dup(?) ;假设有 100 个数据wordsum dw 0msgdb overflow ','$' ;代码段 mov cx,count mov ax,0 mov bx,offset parrayagain:add ax,bx jnc next mov dx,offset msg mov ah,9 int 21h ;显示溢出信息 jmp done;然后,跳出循环体next:add bx,2 loop again mov wordsum,axdone:习题 3.25 编程把一个 16 位无符号二进制数

16、转换成为用 8421BCD 码表示的 5 位十进制数。转换 算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;依次用余数除以 100、 10和 1,得到“百位”、“十位”和“个位”。解答;wjxt325.asm .model small .stack 256 .dataarraydbcddw ?;源字数据db 5 dup(?) ;五位 bcd 结果,高对高低对低 .code.startupmov dx, array;取源数据(余数)mov bx, 10000;除数mov cx, 10;除数系数mov si, 4 ;目的数据高位位移量again:mov ax

17、, dx ; dx.ax 中存放被除数mov dx, 0div bx;除于bx,商ax,余数dxmov dbcdsi, al ;商< 10,存结果push dx ;暂存余数mov ax, bx ;除数除于 10mov dx,0div cx ; dx.ax除于cx,商ax、余数0存在dxmov bx, ax ; bx 是除数pop dxdec si ;目的数据位移量减 1jnz againmov dbcd, dl ;存个位数( < 10 ).exit 0end习题 3.27 编写一个源程序,在键盘上按一个键,将从 AL 返回的 ASCII 码值显示出来,如果按 下 ESC 键则程序退

18、出。请调用书中的 HTOASC 子程序。解答again:mov ah,1int 21hcmp al,1bh ; ESC 的 ASCII 码是 1bhje donecall htoascmov ah,2int 21h jmp againdone:习题 3.29 调用HTOASC子程序,编写显示一个字节的16进制数、后跟“ H ”的子程序。解答DIPASC proc ;入口参数:AL =要显示的一个 16进制数push cxpush dxpush axmov cl,4 ;转换高位shr al,clcall HTOASCmov dl,al ;显示mov ah,2int 21hpop ax ;转换低位

19、call HTOASCmov dl,al ;显示mov ah,2int 21hmov dl, ' H'显示一个字母“ H ”mov ah,2 int 21h pop dx pop cx ret DIPASC endp HTOASCproc ;将 AL 低 4 位表达的一位 16 进制数转换为 ASCII 码and al,0fh cmp al,9 jbe htoasc1add al,37h;是 OAH OFH,力口 37H 转换为 ASCII 码ret ;子程序返回htoascl: add al,30h;是 09,力口 30H 转换为 ASCII 码ret ;子程序返回HTOAS

20、C endp习题 3.35 编制 3个子程序把一个 1 6位二进制数用 4位 1 6进制形式在屏幕上显示出来,分别运 用如下 3 种参数传递方法,并配合 3 个主程序验证它。 采用 AX 寄存器传递这个 16 位二进制数 采用 temp 变量传递这个 16 位二进制数 采用堆栈方法传递这个 16 位二进制数 解答.model small.stack.datawdata dw 34abh.code .startup mov ax,wdata call dispa.exit 0Jdispa proc push cx push dx mov cl,4 mov dl,ah shr dl,cl call

21、 dldisp mov dl,ah and dl,0fh call dldispmov dl,al shr dl,cl call dldisp mov dl,al and dl,0fh call dldisp pop dx pop cx retdispaendpdldispJproc push ax or dl,30h cmp dl,39h jbe dldisp1 add dl,7dldisp1:mov ah,2int 21h pop ax retdldispendpend.model small.stack.datawdatadw 34abhwordtempdw ?.code.startupmov ax,wdata mov wordtemp,ax call dispa.exit 0Jdispa procpush cxpush dxmov cl,4mov dl,byte ptr wordtemp+1 shr dl,cl call dldispmov dl,byte ptr w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论