汇编语言题目答案.doc_第1页
汇编语言题目答案.doc_第2页
汇编语言题目答案.doc_第3页
汇编语言题目答案.doc_第4页
汇编语言题目答案.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

第4章 自测练习一、选择题(四选一)1.设计子程序应该采用的一对伪指令是_C_。 A segment/ends B start/end start C proc/endp D macro/endm2.主程序将它的参数带给子程序,这个参数被称为 A 。 A 入口参数 B 出口参数 C 寄存器参数 D 存储器参数3.对应主程序CALL指令调用子程序,子程序结束通常采用_D_ 指令返回主程序。 A jmp B iret C hlt D ret4.下面程序段条件转移语句发生跳转的条件是AL=_D_ 。 cmp al,0fbh jnl next A 80h B 8fh C 0f0h D 0ffh5.如下程序段中的“dec cx”指令执行了_C_ 次。 mov cx,4 jcxz next again: dec cx jnz again next: A 0 B 1 C 4 D 5二、填空题1.程序的基本结构有 顺序 、 分支 、 循环 和子程序四种。2.子程序可以通过_寄存器_、存储单元、(地址表)、_堆栈_等传递参数。3.循环结构的程序通常由 初始部分 、 循环体 和 循环控制 三部分组成。4.如果主程序调用与它处在同一个代码段的子程序,这是 段内 调用。5.下面程序段完成将存储单元abcd1中一个压缩型BCD码拆成两个非压缩型BCD码,高位BCD码存放在abcd3单元,低位BCD码存放在abcd2单元,再分别转换为对应的ASC码。请将程序补充完整: mov al,abcdl mov cl,4 shr al,cl Or al,30h mov abcd3,al mov al,abcdl and al, 0fh orl al,30h mov abcd2,al6.在下述程序段的每一空框内填入一个语句,以实现如下功能:字节变量string中存放着一个字符串,以0DH为结束标志,求串长度并送字变量count中。 lea si,string mov al,0dh xor cx,cx goon: cmp al,si jz next inc cx _inc si_ jmp goon next: mov cont,cx7.下述程序段运行后,AL=_88h_、CL=_80h_ _。 mov al,38h mov bl,49h call sub0 inc al dec cl sub0 proc add al,bl mov cl,al daa ret sub0 endpdaa:加法的十进制调整指令(AL)把AL的和调整到压缩的BCD格式这条指令执行前必须执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在AL寄存器中。本指令的调整方法:若AF标志(辅助进位位)为1,或AL寄存器的低4位是16进制的AF,则AL寄存器内容加06H,且将AF位置1。若CF标志为1,或AL寄存器的高4位是16进制的AF,则AL寄存器内容加60H,且将CF位置1。DAA指令对OF标志无定义,但影响所有其他条件标志。8.阅读如下子程序,说明它的功能: sumary proc xor ax,ax xor dx,dx ;执行后,DX= 0 。 again: add ax,bx adc dx,0 ;执行的操作是DX= DX+0+CF 。 inc bx inc bx loop again ;发生转移的条件是: cx 0 。 ret sumary endp子程序的入口参数:DS:BX=_16数组首地址、CX=_数据个数。子程序的出口参数:AX=_求和结果低16位、DX=_求和结果高16位。子程序功能为:_将CX个16位无符号数求和。三、问答题1. 什么是多重循环?循环体中存在循环结构就形成多重循环。2.于程序中为什么需要现场保护和恢复?如何实现?主程序和子程序可能都要使用某个现场数据,例如,寄存器内容。如果子程序不进行保护,就会改变原来的内容,返回主程序后将使主程序产生错误的执行结果。所以,通常子程序开始保护现场数据,返回之前恢复原来的数据。现场保护和恢复通常借用堆栈区实现,也可以采用特定区的方法。也就是把现成数据暂存入堆栈区域或特定存储区实现保护。实现恢复则是从堆栈或存储区取出被保护的数据。3.试述过程定义的一般格式。过程定义采用proc和endp一对伪指令实现,有一个用户定义的过程名(subname),可以选择是近(near)调用还是远(far)调用。这对伪指令中间是过程体,有任意合法的汇编语言语句组成,如下所示:subname procnear/far ; 过程定义. ; 过程体subname endp ; 过程结束4.什么是子程序嵌套和子程序递归?子程序中又调用子程序就形成子程序嵌套。子程序中直接或间接调用该子程序本身就形成子程序递归。5.说明子程序参数传递的三种主要方法。寄存器、共享变量(公共存储单元)、堆栈四、程序阅读题1.dal数据区中有50个字节数据,下面程序段将每个数据的低四位变反,高四位不变,并依次存人da2数据区中。请将程序补充完整。 mov cx,50 lea si,dal lea di,da2 K1: mov al,si xor al,0fh movdi,al inc si inc di dec cx _jnz k1_2.下面是一个用地址表方法实现多分支的程序段。它根据xyz单元中的数据,找到地址表中的对应地址实现转移,请将程序补充完整: xyztbl dw addr0 dw addrl dw addr2 dw addr3 xyz db 2 lea si,xyztbl mov ax,xyz _add ax,ax (或shl ax,1) add si,ax _mov bx,si_ jmp bx3.下述程序段运行后,nums开始的10个字节存储单元内容依次是什么? nums db 0,1,2,3,4,5,6,7,8,9 lea si,nums lea di,nums+l mov cx,5 again: mov al,si xchg al,di mov si,al add si,2 add di,2 loop againnums开始的字节存储单元内容依次是1、0、3、2、5、4、7、6、9、8。本程序依次将两个数据相互交换了一下位置。4.下段程序的功能是什么?程序执行后BL=_7_、DL=_9_、AX=_0_ 将AX逐位左移,计算其中“1”和“0”的个数。 mov ax,4bd5h mov bl,0 mov dl,bl mov cx,16 k1: shl ax,1 jc k2 inc bl jmp k3 k2: inc dl k3: loop kl5.如下源程序的功能是,从键盘读入一字符串(长度小于40),再将该串反转后,输出显示。请在空格中添入正确的语句。 maxno equ 41 sseg segment stack dw 100 dup(?) sseg ends dseg segment mesg1 db Input a string:$ mesg2 db Its reverse is:$ buf db maxno,?,maxno dup(?) dseg ends cseg segment assume cs:cseg,ds:dseg,ss:sseg start: _mov ax,dseg_ ;设置数据段ds地址 mov ds,ax mov dx,offset mesg1 mov ah,9 int 21h mov dx,offset buf mov ah,0ah ;利用DOS功能0AH从键盘输入一串字符 int 21h xor ax,ax _mov al, buf+1_ ;取实际读人字符个数 1ea di,buf+2 ;第一个字符有效地址送DI mov si,di add si,ax mov byte ptr si,$ ;字符串结尾填入“$”,以便用DOS功能调用9号实现显示 dec si cont: cmp di,si _jae done ;当disi时结束_ ;如果字符串长度是奇数,则会出现si和di相等的情况 ;如果字符串长度是偶数,则会出现di大于si的情况 mov al,si xchg al,di mov si,al ;前后两个字符相互交换,实现反转 dec si inc di ;调整DIjmp cont done: lea dx,buf+2 ;反转后,字符串显示 mov ah,9 ;9号功能调用需要“$”结尾字符串 int 21h mov ax,4c00h int 21h cseg endsend start五、程序设计题1.从键盘接受一个小写字母,然后找出它的前导字符和后续字符,并按顺序输出这3个字符 mov ah,1 ;输入一个小写字母 int 21h push ax ;暂时保存到堆栈 push ax ;因显示功能调用回破坏AX内容mov dl,aldec dl ;输出前导字符mov ah,2int 21hpop ax ;取出输入的字符mov dl,al ;输出该字符mov ah,2int 21hpop axmov dl,al ;输出后继字符inc dlmov ah,2int 21h(本题目也可以采用一个循环程序段实现)2.假设给字节变量char预留了26个单元的空间,试编写程序段,将字母AZ依次存放进去。 ;数据段 char db 26 dup(?) ;代码段 mov al,a mov bx,offset char mov cx, 26again: mov bx, al inc al inc bx loop again提示:还可以采用串存储指令实现3.编写计算100个16位正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示“overflow”。;数据段parray dw 23,98,75 ;假设有100个数据wordsum dw 0msg db overflow,$ ;代码段mov cx,100mov ax,0mov bx,offset parrayagain: add ax,bxjnc nextmov dx,offset msgmov ah,9int 21h ;显示溢出信息jmp done ;然后跳出循环体next: add bx,2loop againmov wordsum,axdone: 4.编写一个完整的程序,要求如下: 采用简化段(或完整段)定义格式; 提示输入字符串“Input string:”; 从键盘输入一个字符串(不超过255); 分别统计其中的大写字母和小写字母的个数(采用于程序形式); 将大、小写字母个数分别存放在ucase和lcase单元中。 stack segment stack ;定义堆栈段 db 1024 dup(0) stack ends data segment ;定义数据段 msg db Input string:0dh,0ah,$ string db 255 db ? db 255 dup(?) lcase db 0 ucase db 0 data ends code segment ;定义代码段 assume cs:code,ds:data,ss:stack start: mov ax,data ;程序开始点 mov ds,ax mov ah,9 ;提示输入字符串 mov dx,offset msg int 21h mov ah,0ah ;从键盘接受字符串 mov dx,offset string int 21h mov bx,offset string+2 ;设置入口参数 mov cl,bx-1 ;DS:BX指向字符串首地址 xor ch,ch ;CX等于字符串长度 call slength ;调用子程序,统计大小写字母的个数 mov lcase,al ;处理出口参数:AL=小写字母个数 mov ucase,ah ;AH=大写字母个数 mov ax,4c00h int 21h ;程序结束,返回DOS;子程序:采用寄存器传递入口参数和出口参数 slength proc push dx xor ax,ax slen1: mov dl,b

温馨提示

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

评论

0/150

提交评论