汇编语言题目答案.doc

上传人:h**** 文档编号:1422785 上传时间:2019-02-25 格式:DOC 页数:8 大小:58KB
下载 相关 举报
汇编语言题目答案.doc_第1页
第1页 / 共8页
汇编语言题目答案.doc_第2页
第2页 / 共8页
汇编语言题目答案.doc_第3页
第3页 / 共8页
汇编语言题目答案.doc_第4页
第4页 / 共8页
汇编语言题目答案.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、1第 4 章 自测练习一、选择题(四选一)1.设计子程序应该采用的一对伪指令是_C_ _。A segment/ends B start/end startC 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,0fbhjnl nextA 80h B 8fh C 0f0h D 0ffh5.如下

2、程序段中的“dec cx”指令执行了_C _ 次。mov cx,4jcxz nextagain: dec cxjnz againnext: A 0 B 1 C 4 D 5二、填空题1.程序的基本结构有 顺序 、 分支 、 循环 和子程序四种。2.子程序可以通过_寄存器_、存储单元、 (地址表) 、_堆栈_等传递参数。3.循环结构的程序通常由 初始部分 、 循环体 和 循环控制 三部分组成。4.如果主程序调用与它处在同一个代码段的子程序,这是 段内 调用。5.下面程序段完成将存储单元 abcd1 中一个压缩型 BCD 码拆成两个非压缩型 BCD 码,高位 BCD 码存放在 abcd3 单元,低位

3、 BCD 码存放在 abcd2 单元,再分别转换为对应的ASC码。请将程序补充完整:mov al,abcdlmov cl,4shr al,cl Or al,30hmov abcd3,almov al,abcdland al, 0fh orl al,30h mov abcd2,al6.在下述程序段的每一空框内填入一个语句,以实现如下功能:字节变量 string 中存放着一个字符串,以 0DH 为结束标志,求串长度并送字变量 count 中。lea si,stringmov al,0dh xor cx,cx2goon: cmp al,sijz next inc cx_inc si_jmp goon

4、next: mov cont,cx7.下述程序段运行后,AL=_88h_、CL=_80h_ _。mov al,38hmov bl,49hcall sub0inc aldec clsub0 procadd al,blmov cl,aldaaretsub0 endpdaa:加法的十进制调整指令(AL)把 AL 的和调整到压缩的 BCD 格式这条指令执行前必须执行 ADD 或 ADC 指令,加法指令必须把两个压缩的 BCD 码相加,并把结果存放在 AL 寄存器中。本指令的调整方法:若 AF 标志(辅助进位位)为 1,或 AL 寄存器的低 4 位是 16 进制的 AF,则 AL 寄存器内容加 06H,

5、且将 AF 位置 1。若 CF 标志为 1,或 AL 寄存器的高 4 位是 16 进制的 AF,则 AL 寄存器内容加 60H,且将 CF 位置 1。DAA 指令对 OF 标志无定义,但影响所有其他条件标志。8.阅读如下子程序,说明它的功能:sumary procxor ax,axxor dx,dx ;执行后,DX= 0 。again: add ax,bxadc dx,0 ;执行的操作是 DX= DX+0+CF 。inc bxinc bxloop again ;发生转移的条件是: cx 0 。retsumary endp子程序的入口参数:DS:BX=_16 数组首地址、CX=_数据个数 。子程

6、序的出口参数:AX=_求和结果低 16 位、DX= _求和结果高 16 位。子程序功能为:_将 CX 个 16 位无符号数求和。三、问答题31.什么是多重循环?循环体中存在循环结构就形成多重循环。2.于程序中为什么需要现场保护和恢复?如何实现?主程序和子程序可能都要使用某个现场数据,例如,寄存器内容。如果子程序不进行保护,就会改变原来的内容,返回主程序后将使主程序产生错误的执行结果。所以,通常子程序开始保护现场数据,返回之前恢复原来的数据。现场保护和恢复通常借用堆栈区实现,也可以采用特定区的方法。也就是把现成数据暂存入堆栈区域或特定存储区实现保护。实现恢复则是从堆栈或存储区取出被保护的数据。3

7、.试述过程定义的一般格式。过程定义采用 proc 和 endp 一对伪指令实现,有一个用户定义的过程名 (subname),可以选择是近(near) 调用还是远 (far)调用。这对伪指令中间是过程体,有任意合法的汇编语言语句组成,如下所示:subname procnear/far ; 过程定义. ; 过程体subname endp ; 过程结束4.什么是子程序嵌套和子程序递归?子程序中又调用子程序就形成子程序嵌套。子程序中直接或间接调用该子程序本身就形成子程序递归。5.说明子程序参数传递的三种主要方法。寄存器、共享变量(公共存储单元) 、堆栈四、程序阅读题1.dal 数据区中有 50 个字节

8、数据,下面程序段将每个数据的低四位变反,高四位不变,并依次存人 da2 数据区中。请将程序补充完整。mov cx,50lea si,dallea di,da2K1: mov al,sixor al,0fh movdi,alinc siinc didec cx_jnz k1_2.下面是一个用地址表方法实现多分支的程序段。它根据 xyz 单元中的数据,找到地址表中的对应地址实现转移,请将程序补充完整:xyztbl dw addr0dw addrldw addr24dw addr3xyz db 2lea si,xyztblmov ax,xyz_add ax,ax (或 shl ax,1)add si

9、,ax_mov bx,si_jmp bx3.下述程序段运行后,nums 开始的 10 个字节存储单元内容依次是什么?nums db 0,1,2,3,4,5,6,7,8,9lea si,numslea di,nums+lmov cx,5again: mov al,sixchg al,dimov si,aladd si,2add di,2loop againnums 开始的字节存储单元内容依次是 1、0、3、2、5、4、7、6、9、8。本程序依次将两个数据相互交换了一下位置。4.下段程序的功能是什么?程序执行后 BL=_7_、DL= _9_、AX=_0_将 AX 逐位左移,计算其中“1”和“0”的

10、个数。mov ax,4bd5hmov bl,0mov dl,blmov cx,16k1: shl ax,1jc k2inc bljmp k3k2: inc dlk3: loop kl5.如下源程序的功能是,从键盘读入一字符串(长度小于 40),再将该串反转后,输出显示。请在空格中添入正确的语句。maxno equ 41sseg segment stackdw 100 dup(?)5sseg endsdseg segment mesg1 db Input a string:$mesg2 db Its reverse is:$buf db maxno,?,maxno dup(?)dseg ends

11、cseg segmentassume cs:cseg,ds:dseg,ss:ssegstart: _mov ax,dseg_ ;设置数据段 ds 地址mov ds,axmov dx,offset mesg1mov ah,9int 21hmov dx,offset bufmov ah,0ah ;利用 DOS 功能 0AH 从键盘输入一串字符 int 21hxor ax,ax_mov al, buf+1_ ;取实际读人字符个数1ea di,buf+2 ;第一个字符有效地址送 DImov si,diadd si,axmov byte ptr si,$ ;字符串结尾填入“$” ,以便用 DOS 功能调

12、用 9 号实现显示dec sicont: cmp di,si_jae done ;当 disi 时结束_;如果字符串长度是奇数,则会出现 si 和 di 相等的情况;如果字符串长度是偶数,则会出现 di 大于 si 的情况mov al,sixchg al,dimov si,al ;前后两个字符相互交换,实现反转dec siinc di ;调整 DIjmp contdone: lea dx,buf+2 ;反转后,字符串显示mov ah,9 ;9 号功能调用需要“$”结尾字符串int 21hmov ax,4c00hint 21hcseg endsend start五、程序设计题1.从键盘接受一个小

13、写字母,然后找出它的前导字符和后续字符,并按顺序输出这 3个字符6mov ah,1 ;输入一个小写字母int 21hpush 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 依次存放进去。 ;数据

14、段char db 26 dup(?);代码段mov al,amov bx,offset charmov cx, 26again: mov bx, alinc alinc bxloop 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 parray

15、again: add ax,bx7jnc 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

16、dup(0)stack endsdata segment ;定义数据段msg db Input string:0dh,0ah,$string db 255db ?db 255 dup(?)lcase db 0ucase db 0data endscode segment ;定义代码段assume cs:code,ds:data,ss:stackstart: mov ax,data ;程序开始点mov ds,axmov ah,9 ;提示输入字符串mov dx,offset msgint 21hmov ah,0ah ;从键盘接受字符串mov dx,offset string int 21hmov

17、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,4c00h8int 21h ;程序结束,返回 DOS;子程序:采用寄存器传递入口参数和出口参数slength procpush dxxor ax,axslen1: mov dl,bx ;取出一个字符cmp dl,A ;判断是否为大写字母jb slen3 ;小于“A” ,不是字母cmp dl,Zja slen2 ;不是大写字母,可能是小写字母inc ah ;是大写字母,则大写字母个数加 1jmp slen3slen2: cmp dl,a ;判断是否为小写字母jb slen3cmp dl,zja slen3inc al ;是小写字母,则小写字母个数加 1slen3: inc bxloop slen1pop dxretslength endpcode endsend start

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

当前位置:首页 > 教育教学资料库 > 试题真题

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。