汇编语言程序设计课后习题答案_第1页
汇编语言程序设计课后习题答案_第2页
汇编语言程序设计课后习题答案_第3页
汇编语言程序设计课后习题答案_第4页
汇编语言程序设计课后习题答案_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章 汇编语言程序设计习题答案一、单项选择题1.c2.b3.c4.c5.c6.a7.a8.c9.b10.d11.b12.b13.d14.c15.c16.a17.d18.d19.a20.c21.b22.d23.d24.a二、多项选择题1.abcef2.ace3.ac4.abcd三、填空题1.para2.1,2,60,120,13.segment,ends4.12005.段内转移,段间转移6.ah7.过程,proc,ret,near,far8.leabx,buf9.1,410.0504h11.asm,exe12.立即寻址,直接寻址四、判断题vvvv五、程序分析题1.32.12h,3412h3.4

2、6h,73h4. (1) 从目的串中查找是否包含字符 0,若找到则停止,否则继续重复搜索。 (2) zf=1, 说明已找到字符 zf=0, 说明未找到字符 cx0,说明中途已找到字符退出 cx=0,且zf=0说明串中无字符 0 5. 1, 0, 3, 2, 5, 4, 7, 6, 9, 86. 87h,81h7. 44aah,44d5h8. deccx,jnc,jz9. jnzl210. adcdx,0,clc11. aas12. stosb13. 1,3,1,2,214.(2000h)=39h (2001h)=00h 将(2000h),(2001h)两相邻单元中存放的未组合型bcd码压缩成组

3、合型bcd码,并存入(2000h)单元,0(2001h) 15.a)2345h,6780hb)将dx、ax中存放的32位二进制数向左移动4位16 0 ,1009h 0 对数据段内1000h1008h单元置数,依次送入1,2,4,8,16,32,64,128,0共九个 17.20h,10,t18. $-buf assume cs:code,ds:data mov ds,ax mov ax,0 jle next jnz next jnz lopa begin19. 不相同,第一个数据段72h在前,04在后,后一个04h在前,72h在后。20. 09h,0eh,0dh六、简答题1. nums分配了1

4、80个字节 (3分) var分配了15个字节2.(1)把sp所指的堆栈顶部的一个字的内容弹回ip,sp加2。(2)段间返回指令把sp所指的堆栈顶部的两个字的内容先弹回ip后弹回cs,sp加4。3.2, 10, 204.地址:00h01h02h03h04h05h06h07h08h09h0a0h数据:04h00h1ah00h78h56h41h42h5. (1)在存储器中分别为table、xad、yad、sta分配11字节,1字节,1字节,16字节单元(2)程序运行后,xad、yad,单元中的值为9和39h,屏幕上显示的字符是“9”6.yxgfdcba96217.程序功能是将从string开始的n个

5、字节中的字符串变成大写存放到从newstr开始的n个字节中。程序执行后,从newstr开始的n个字节中的内容是assemble language is powerful。七、编程题1. 参考程序:code segmentassume cs:code,ds:codego:mov ax,datamov ds,axand al,0f0hexit:code endsend go2. 参考程序:data segmentorg 1000hdatdb1234$567$8data endscode segmentassumecs:code,ds:data,es:datastart:movax,datamovd

6、s,axmoves,axcldmovbx,1000hmovcx,100xorax,axmoval,$call foundfound proc nearpush axcldrepnescasbxorax,axandcx,0ffhjzoverdecbxmoval,diover:retpop axfound endpcode endsendstart3. org 2100hdata segmentdat1 db 1,2,3,4,5,6,7,8db 1,2,3,4,5,6,7,8db 0,0,0,0,0,0,0,0sum db ?data endsstack segmentst1 db 100 dup

7、(?)tp equ length st1stack endscode segmentassume cs:code, ds:data, ss:stackstart: mov ax, datamov ds, axmov ax, stackmov ss, ax ;初始化堆栈段mov bx, offset dat1 ;指向数据mov cx,8 ;循环次数 cx=8call maddmadd proc nearpush axpush dxmov dx,simov bx,0mov di,siadd di,8add bx,16clc ;清进位cf= 0aa: mov al, si ;取一个字节到axadc

8、al,di ;ax =ax+di +cfmov bx+10,al ;存一个字到bxpushf ;保护进位cfinc si ;修改第一个数的地址指针siinc di ; 修改第二个数的地址指针diinc bx ;修改结果指针bxpopf ;恢复标志寄存器loop aa ; cx = cx-1,若 cx=0 转 aa;cx=0,暂停mov bx,dxadd bx,16pop dxpop axretmadd endpcode endsend start4.org 2000hdata segmentdata1 db 1234h,1234hdata endscode segmentassume cs:c

9、ode, ds:datago:mov ax,datamov ds,axmov ax,ptr word 2000hmov cx,ptr word2002hmul cxmov 2004h,axmov 2006h,dxcode endsend go5. code segmentassume cs:code, ds:codego:mov ax,datamov ds,axand ax,02hjz ze:mov dh,1jmp exitze:mov dh,0exit:code endsend go6.参考程序:mov bx,offset bufmov cx,80mov s1,0mov s2,0mov s3

10、,0compare: mov al,bxcmp al,60jb don1 ;低于60转cmp al,80jbe don2 ;低于等于80,高于60转inc s3 ;高于80,s3+1jmp lpdon1: inc s1jmp lpdon2: inc s2lp: inc bxloop comparehlt7.参考程序:mov di,2000hcldmov al,23h mov cx,100repnz scasb ;al -#jnz stop ;没找到,退出dec di ;找到,退回到原地址mov di,00h ;替换为0mov dx,di stop:hlt 8 start:pushcspushi

11、pmovax,0moves,axmovdi,4*60hmovax,offset functionstoswmovax,set functionstoswint60hfunctionproc moval,dat cmpal,dat+1 jncl1 movah,dat+1 movby1,al moval,ahl1:subal,dat+1aasrunction endp 9. data segmentdat db 3,4,2,3,4,6,7,8,9,19dataendscode segment assume cs:code,ds:data start: movax,datamovds,axmovcx

12、,10movsi,offsetdat1lp1:callpaixuincsilooplp1 movdx,offsetdat1movah,09hint21hincdxmovcx,08hmovax,0lpadd:addax,ptrbytrdxlooplpaddmovbl,8divblmovavg,ahmovah,4ch int21hpaixu proc nearpushcxpushsimoval,sicmplp:cmpal,byte ptrsi+1jgenextmovbl,si+1movsi,blmovsi+1,almoval,bl next:incsi loopcmplppopsipopcx pa

13、ixuendpcodeendsendstart 10. data segment bufer db 10,0,20,15,38,236 max db 0 min db 0avi db 0data ends stack segment para stackstack dw 100 dup (?) stack ends code segment assume cs:code,ds:data,ss:stack (1分) start proc far begin: push ds mov ax,0 push ax mov ax,data mov ds,ax lea di,buffer mov dx,0

14、 ;使dh=0,dl=0 mov cx,6 mov ax,0 ; 和清0 mov bh,0 ; 最大值 mov bl,0ffh ; 最小值 lop1: cmp bh,di ja next1 ; 若高于转移 mov bh,di; 大值bhnext1: cmp bl,di ; jb next2 ; 若低于转移 mov bl,di; 小值bl next2: mov dl,di; 取一字节数据 add ax,dx ; 累加和 inc di loop lop1 mov max,bh;送大值 mov min, bl;送小值 mov dl, 6 div dl, ;求平均值 mov avi, al;送平均值

15、ret start endpcode ends end begin 11解:(1).【程序】(完整段模式)data segment score db 7,8,9,8,10,10,9,8,7,10 n=$-score average db ? max db ? min db ?data endscode segment code assume cs:code,ds:datastart:mov ax,datamov ds,axmov dl,scoremov max,dlmov min,dlmov cx,n-1mov bx,1cycle:mov al,scorebxadd dl,alcmp al,m

16、axjle cmpminmov max,alcmpmin: cmp al,minjge nextmov min,alnext:inc bxloop cyclesub dl,maxsub dl,minmov cl,3sar dl,clmov average,dlmov ah,4chint 21hcode endsend start(2).【程序】(简化段模式).model small.386.stack.data score db 7,8,9,8,10,10,9,8,7,10 n=$-score.data? average db ? max db ? min db ?.code .startup

17、 mov dl,score mov max,dl mov min,dl mov cx,n-1 mov bx,1 .while cxmov al,scorebxadd dl,al.if al max mov max,al.endif.if al min mov min,al.endifinc bxdec cx .endw sub dl,max sub dl,min sar dl,3 mov average,dl .exitend12(1).【程序】(完整段模式)data segment score db 90,23,56,67,98,78,10,45,87,100 n=$-score score

18、f db 0 scoree db 0 scored db 0 scorec db 0 scoreb db 0 scorea db 0data endscode segment codeassume cs:code,ds:datastart:mov ax,datamov ds,axlea si,scoremov cx,nmov dl,10class:mov ah,0mov al,sidiv dlsub al,5jg greatinc byte ptr scorefjmp nextgreat:mov ah,0mov bx,axinc byte ptr scorefbxnext:inc siloop

19、 classmov ah,4chint 21hcode ends end start(2).【程序】(简化段模式).model small.386.stack.data score db 90,23,56,67,98,78,10,45,87,100 n=$-score.data? scoref db 0 scoree db 0 scored db 0 scorec db 0 scoreb db 0 scorea db 0.code .startuplea si,scoremov cx,nmov dl,10.repeat mov ah,0 mov al,si div dl sub al,5 .i

20、f(al=0)inc byte ptr scoref .elsemov ah,0mov bx,axinc byte ptr scorefbx .endif inc si.untilcxz.exitendend13. 参考程序如下:dseg segment buf1 db 98h,32h cnt equ $ - buf1 buf2 db 51h,46hsum db cnt dup(?)dseg ends cseg segmentassume cs:cseg,ds:dseg main proc farstart:push dsmov ax,0 push axmov ax,dsegmov ds,axmov si,offset buf1 lea di,buf2 mov bx,offset sum mov cx,cnt clc lop:mov al,siadc al,di daa mov bx,al inc si inc di inc bx loop lop retain endpcseg ends end start 14.参考程序如下:dseg segmenta dw ?b dw ?dseg ends cseg segmentassume cs:cseg,ds:dseg main proc farstart:push d

温馨提示

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

评论

0/150

提交评论