汇编语言习题答案3.doc

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

1、1第 3 章 自测练习一、选择题(四选一)1.表示一条处理器指令所在存储单元的符号地址是 C 。A 变量 B 常量 C 标号 D 偏移量2.汇编语言中的变量有多种类型属性,但错误的类型是 B 。A 字节型 byte B 字符型 charC 字型 word D 双字型 dword3.执行 mov bx,seg var 指令,BX 得到变量 var 的 B 。A 物理地址 B 段地址 C 偏移地址 D 内容4.MASM 语句中,采用 C 分隔标号和指令。A 逗号 B 分号 C 冒号 D 空格5.欲设定从偏移地址 100H 开始安排程序,可使用 A 伪指令。A org 100h B start=10

2、0hC start db 100h D start equ 100h6.与“mov bx,offset var”指令等效的指令是 D 。A mov bx,var B 1ds bx,varC les bx,var D 1ea bx,var7.下条语句buf db l0 dup(3 dup(?,10),3,10)汇编后,变量 buf 占有的存储单元字节数是 B 。A 100 B 80 C 40 D 208.数据定义语句“numl dw(12 or 6 and 2) ge 0eh”,定义的 num1 单元的内容是 B 。A 0 B 0FFFFH C 1 D 0FFH9.要求将 A、B 两个字符的 A

3、SCII 码 41H 和 42H 顺序存放在连续两个字节存储单元中,可选用的语句是 A 。A dbAB B dw AB C db 0ABH D dw 0ABH10.在汇编语言程序中,对 END 语句叙述正确的是 C 。A END 语句是一可执行语句B END 语句表示程序执行到此结束C END 语句表示源程序到此结束D END 语句在汇编后要产生机器码11.下面的数据传送指令中,错误的操作是 D 。A mov ss:bx+di,byte ptr 10h B mov dx,l000hC mov word ptrbx,1000h D mov ds,2000h12.下面指令执行后,变量 dab 中的

4、内容是 C 。daw dw 2A05hdab db 0Fahmov al,byte ptr dawsub dab,alA 0DAH B 0FAH C 0F5H D 0D0H213根据下面的语句序列,AX 寄存器的内容是 C 。tab db 1,2,3,4,5,6entry equ 3mov bx,offset tabadd bx,entrymov ax,bxA 0405H B 0304H C 0504H D 0403H14.假设 V1 和 V2 是用 DW 定义的变量,下列指令中正确的是 A 。A mov V1,20h B mov V1,V2C mov al,V1 D mov 2000h,V2

5、15若定义 xyz dwA,则 xyz 字存储单元中存放的数据是 A 。A 0041H B 4100H C 0061H D 6100H16使用伪指令定义:val db 2 dup (1,2,3dup(3),2dup(1,0),1)则在 val 存储区内前 10 个字节单元的数据是 D 。A 1,2,3,3,2,1,0,1,2,3 B 1,2,3,3,3,3,2,1,0,1C 2,1,2,3,3,2,1,0,2,1 D 1,2,3,3,3,1,0,1,0,1二、填空题1.用汇编语言编写的程序称为 汇编语言源程序 ,它必须由_汇编_程序将它转换成二进制的机器语言程序,这种机器语言程序被称为_目标代

6、码程序_ ,而转换的过程称为_汇编_ 。它还必须用_连接_程序连接,才能生成可执行的程序2.汇编语言源程序的扩展名是_ASM _,目标程序的扩展名是 _OBJ_,通常产生的可执行程序的扩展名是_EXE_ _3.汇编语言语句中,源操作数和目的操作数采用 , (逗号) 分隔。4.指令“cmp ax,80h”中源操作数的寻址方式是 立即寻址方式 。5.若定义“datavar db 0a5h,5bh”,填空指令“mov bx,_word ptr datavar”,使该指令无语法错误。6.若操作结果为零转向标号 goon,应使用的语句为_jz goon (或 je goon)_。7.与指令“loop a

7、gain”功能等效的两条指令依次是_dec cx_ 和_jnz again_。8.用“dw 1234h”语句定义的一个字,如果改用 db 定义时,语句应为_db 34h,12h_。9.定义 wdata dw l020h,则执行 mov al,byte wdata 指令后,AL=_20h_。10.如下数据定义:V1 db 4dup(2),2count equ 10V2 dd count dup(?)为变量 V1 分配 5 个字节存储;为变量 V2 分配 40 个字节存储11.现有变量定义如下:ary dw 10 dup(?)试填写执行如下指令的结果:3mov ax,type ary ;AX=_2

8、_mov bx,length ary ;BX=_10_mov cx,size ary ;CX=_20_12.已知数据段如下:org 0100hary dw 3,$+4,5,6cnt equ $-arydb 1,2,cnt,3则执行如下指令后,AX=_0106h_,BX=_0308h_。mov ax,ary+2mov bx,ary+10MASM 的操作符“$” 表示当前偏移地址,所以 ary 定义的$+4=102h+4=106h。同理,cnt=$-ary=108h-100h=813.程序段如下:blk db 46h,84h,34h,-5,20h,22h,73hmov cx,7lea si,blk

9、next: mov al,siinc sitest al,81hloopz nextmov bl,si该程序段运行后,AL=_84h_、BL=_34h_。第一次顺序执行到 test 指令时,al=84h. 84h 和 81h 相逻辑与的结果是 80h,将使zf=0。随后执行 loopz 指令,因为 zf1 而终止循环;此时 al=84h,因为 si 已经加 1 指向后一个数据,所以 bl=34h。14.如下源程序;数据段avar dw 0bvar dw 0cvar dw 10,20,30;代码段lea bx,cvarmov ax,bxmov bvar,axmov ax,bx+2add ax,b

10、varmov avar,ax执行后,avar= 30 。三、问答题1.汇编语言中,伪指令语句与硬指令语句的本质区别是什么?硬指令:每个硬指令就是一个处理器指令,在 CPU 执行时产生相应功能;4伪指令:伪指令并不产生处理器指令,它通常用于辅助汇编程序对源程序进行汇编。2.汇编语言程序的开发有哪 4 个步骤,分别利用什么程序完成、产生什么输出文件。编辑:用纯文本编辑程序源程序,产生 ASM 源程序。汇编:用汇编程序汇编源程序,产生 OBJ 目标程序。连接:用连接程序将目标程序转换为 EXE 可执行程序。调试:用调试程序调试可执行程序。3.源程序中如何指明程序执行的起始点?通常在起始指令设置一个标

11、号(例如 START) ,然后用“END START”伪指令说明该标号的指令为起始点。4.标号有哪三个属性?其含义是什么?段地址:表示标号所在代码段的段地址。偏移地址:表示标号所在代码段的段内偏移地址。类型:引用该标号时,表示它所在同一个段NEAR 类型,还是另外一个段FAR 类型。5.说明如下两条语句的区别:xyz1 db 75xyz2 equ 75“xyz1 db 75”语句定义了一个字节变量 xyz1,在主存存放了一个 75 的数据。“xyz2 equ 75”语句说明了一个常量 xyz2,它代表 75,它在主存中并没有存放任何内容。6.下列语句在存储器中分别为变量数据区分配多少个字节单元

12、?var5 dd 10 分配 4 个字节单元var6 dw 4 dup(?),2 分配 10 个字节单元四、程序阅读题1下述程序段运行后,从 Bxyz 单元开始依次存放的数据是什么?Axyz db 0F8hBxyz db 3dup(?)lea di,Bxyzmov cx,3mov al,Axyzlop: sar al,1mov di,alinc diloop lop从 Bxyz 单元开始依次存放 0FCH、0FEH、0FFH52.现有源程序如下:;数据段org 100hblock dw l,2,3,4,5,6,7,8,9count equ ($-block)/2result dw count,

13、?;代码段 lea bx,block-2mov cx,resultxor ax,axgoon: add bx,2cmp ax,bxjae nextmov ax,bxnext: loop goonmov result+2,ax该程序段执行完后:result+2 字存储单元的内容是什么?result+2 字存储单元的内容是 9(最大值)BX 等于多少?BX 等于 110H程序循环了多少次?程序循环了 9 次3.现有下列数据段:string dbABCDEFGHIJKLcount equ $-stringbuffer db count dup(0)下面程序段是实现把 string 中所有字符逆向传送

14、到 buffer 缓冲区(即将 string 中第一个字符送到 buffer 的最后一个单元,sting 中最后一字符送到 buffer 的第一个单元,) 。请把程序中所空缺的指令填上。mov si,offset buffer-1mov di,offset buffermov cx,countcld again: movsb_sub si, 2_loop again本题中目的存储区用 DI 指示首地址,源存储区用 SI 指示尾地址,以便实现逆向传送。如果串传送指令 MOVSB 采用增量方式(CLD 指令)则 DI 和 SI 都自动加 1,而实际上 SI6需要的是减 1,所以第二个空缺位置应该填

15、上“SUB SI,2” 。4说明如下程序段完成什么功能dxyz1 db 300 dup(?)dxyz2 db l00 dup(?)mov cx,100mov bx,200mov si,0mov di,sinext: mov al,dxyz1bxsimov dxyz2di,alinc siinc diloop next将 dxyz1 后 100 个数据传送到 dxyz2 缓冲区。 五、程序设计题1.分别用一个说明性语句完成如下要求:将数据 56h、78、0b3h、100 依次存放在字节变量 onebyte 中;onebyte db 56h、78、0b3h、100字变量 twoword 依次存放数

16、据 3721h、l0h、100、4936h;twoword dw 3721h、l0h、 100、4936h;将字符串“How are you!” 存入变量 fourmsg;fourmsg db How are you!以 fivemulti 为首地址,连续存放字节数据,2 个 23h, 5 个A ,10 个 1 和 2,25个预留单元。fivemulti db 2 dup (23h), 5 dup (A ), 10 dup (1,2) , 25 dup (?)2.分别用一个执行性语句完成如下要求:栈顶内容弹出送字变量 stkw;pop stkw双字变量 memd 存放的地址指针送 ES 和 S

17、I;les si, memd 变量 vars 类型属性送 AX;mov ax, type vars取字符串变量 msg00 的首地址送 BX;mov bx , offset msg0073按照给定的条件为程序定义一个数据段:datal 是字符串 THIS IS A DATA_SEGMENT;data2 是字节变量,初值为 23、4BH、126、D3H;data3 是 16 位数据变量,初值为 100、255、3、5、3、5、3、5;data4 是 16 位数据变量,但只知需要占有 100 个存储单元;data5 变量存放 data4 变量的数据个数dataseg segmentdata1 db

18、 THIS IS A DATA_SEGMENTdata2 db 23, 4BH, 126, 0D3Hdata3 dw 100, 255, 3dup(3、5)data4 dw 50 dup(?)data5 dw length data4dataseg ends4.假设有一个数据段:buf1 db l00dup(z)buf2 dw 1234h,5678,0abhbuf3 db 20 dup (?)buf4 db 9,8,7,6,5请分别用一条语句完成如下操作:将 buf1 的偏移地址送入 BX;mov offset buf1将 buf2 的第 4 个字节数据送 DH;mov dh ,byte pt

19、r buf24将数据 9fh 送入 buf3 的第 10 个存储单元;mov buf310 , 9fh将 buf4 中最后一个单元内容加 1,但不能改变标志 CF 的状态;inc buf4+4计算 buf1 和 buf3 两者所占存储单元字节个数送 CX。Mov cx,size buf1+size buf35.现要将具有 20 个字符的 string1 字符串移到同一个数据段的 string2 中,请定义数据段,编写代码段String1 db abcdefghijklmnopqrst ; 假设一个字符串String2 db 20 dup (?); 代码段(也可以用串传送指令)mov cx, 2

20、0mov si ,offset string18mov di ,offset string2mov ds, axmov es, axcldrep movsb6.从键盘输入一个字符串(不超过 255 个) ,将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。;数据段maxnum equ 255kbuffer db maxnum, 0, maxnum dup (0);代码段mov dx, offset kbuffermov ah, 0ahint 21h ;键盘输入字符串mov bx, offset kbuffer+1mov cl,bx ;取字符mov ch, 0again: inc b

21、xmov al,bx ;取一个字符cmp al,a ;小于“a”不转换jb nextcmp al,z ;大于“z”不转换ja nextsub al,20h ;是小写字母则转换为大写字母next: mov dl,almov ah,02hint 21h ;显示输出loop again从键盘输入一个字符串需要利用 DOS 功能调用 0AH 号,该调用的关键是设置数据缓冲区。第一个字节单元填入最大可能输入的字符数(255) ;第二个单元任意,留作功能调用中填入实际输入的字符的字符数;后面用做填入字符的 ASCII 码。注意:0AH 号功能调用后,最后一个单元总是填入回车 ENTER 字符(ASCII 码为0DH) ,所以实际能够输入的字符数比最大字符数少 1。利用一个循环程序段处理将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示,显示功能利用 DOS 功能调用 02H 号。循环指令 LOOP 利用 CX 作为计数器,但字符数单元是一个字节量,所以只能传送到 CL,而 CH 应该为 0。

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

当前位置:首页 > 教育教学资料库 > 参考答案

Copyright © 2018-2021 Wenke99.com All rights reserved

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

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

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