《汇编语言程序设计第3章【课后答案】》由会员分享,可在线阅读,更多相关《汇编语言程序设计第3章【课后答案】(12页珍藏版)》请在金锄头文库上搜索。
1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档! 汇编语言程序设计 第四版 【课后习题答案】 -囮裑為檤 第 3 章 汇编语言程序格式 习题伪指令语句与硬指令语句的本质区别是什么伪指令有什么主要作用 解答 伪指令语句与硬指令语句的本质区别是能不能产生 CPU 动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生 CPU 动作的说明,并在程序执行前由汇编程序完成处理。 习题什么是标识符,汇编程序中标识符怎样组成 解答 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识
2、符一般最多由 31 个字母、数字及规定的特殊符号(如-,)组成,不能以数字开头。 习题 什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的 DB 就是伪指令助记符。 习题汇编语句有哪两种,每个语句由哪 4 个部分组成 解答 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 习题汇编语言程序
3、的开发有哪 4 个步骤,分别利用什么程序完成、产生什么输出文件。 解答 编辑 文本编辑程序 汇编语言源程序.asm 汇编 汇编程序 目标模块文件.obj 连接 连接程序 可执行文件.exe 或 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档! 调试 调试程序 应用程序 习题区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 解答 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地
4、址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 习题假设 myword 是一个字变量,mybyte1 和 mybyte2 是两个字节变量,指出下列语句中的错误原因。 (1) mov byte ptr bx,1000 (2) mov bx,offset mywordsi (3) cmp mybyte1,mybyte2 (4) mov al,mybyte1+mybyte2 (5) sub al,myword (6) jnz myword
5、解答 (1)1000 超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而 offset 是汇编过程计算的偏移地址,故无法确定,改为 lea bx,mywordsi (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量 AL 与字量 myword,类型不匹配 (6)Jcc 指令只有相对寻址方式,不支持间接寻址方式 习题OPR1 是一个常量,问下列语句中两个 AND 操作有什么区别 AND AL,OPR1 AND 0feh 解答 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!欢迎您阅读并下载本文
6、档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!(2)从低地址开始,依次是(十六进制表达): 10 00 FB FF 46 45 习题请设置一个数据段 mydataseg,按照如下要求定义变量: (1) my1b 为字符串变量:Personal Computer (2) my2b 为用十进制数表示的字节变量:20 (3) my3b 为用十六进制数表示的字节变量:20 (4) my4b 为用二进制数表示的字节变量:20 (5) my5w 为 20 个未赋值的字变量 (6) my6c 为 100 的常量 (7) my7c 表示字符串:Personal Computer 解
7、答 mydataseg segment my1b db Personal Computer my2b db 20 my3b db 14h ;20h my4b db 00010100b my5w dw 20 dup() my6c equ 100 ;my6c = 100 my7c equ mydataseg ends 习题分析例题的数据段,并上机观察数据的存储形式。 解答 以字节为单位从低地址向高地址依次是: 16 00 12 FFH FFH FFH FFH 00 00 00 00 00 00 00 00 1 2 3 4 5 45H 23H 00 00 00 00 00 00 00 00 欢迎您阅
8、读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!a b c H e l l o 13 10 $ 12个字符串month,每个字符串从低地址到高地址依次是:m o n t h 254 个字节未定义初值的存储单元,操作系统设置为 0 习题修改例题,现在用字定义伪指令 dw、字串传送指令 movsw 和字符串显示 9 号功能调用实现。 解答 .model small .stack .data source dw 3433h,3635h target dw 40 dup(),$ .code .startup mov ax,ds mov es,ax cld mov
9、si,offset source mov di,offset target mov cx,40 rep movsw mov si,0 mov dx,offset target mov ah,9 int 21h .exit 0 end 习题变量和标号有什么属性 解答 段地址:表示变量和标号所在代码段的段地址; 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!偏移地址:表示变量和标号所在代码段的段内偏移地址; 类型:引用变量时,表示是字节、字、双字等数据量。引用该标号时,表示它所在同一个段near类型,还是另外一个段far 类型。 习题设在某个程序中有
10、如下片段,请写出每条传送指令执行后寄存器 AX 的内容: mydata segment ORG 100H VARW DW 1234H,5678H VARB DB 3,4 ALIGN 4 VARD DD H EVEN BUFF DB 10 DUP() MESS DB HELLO BEGIN: MOV AX,OFFSET MESS MOV AX,TYPE BUFF+TYPE MESS+TYPE VARD MOV AX,SIZEOF VARW+SIZEOF BUFF+SIZEOF MESS MOV AX,LENGTHOF VARW+LENGTHOF VARD MOV AX,LENGTHOF BUFF
11、+SIZEOF VARW MOV AX,TYPE BEGIN MOV AX, OFFSET BEGIN 解答 MOV AX, OFFSET MESS ;AX116H MOV AX, TYPE BUFF+TYPE MESS+TYPE VARD ;AX = 1+1+4 = 06H MOV AX,SIZEOF VARW+SIZEOF BUFF+SIZEOF MESS ;AX = 4+10+5 = 19 = 13H MOV AX,LENGTHOF VARW + LENGTHOF VARD ;AX = 2+1 = 03H MOV AX,LENGTHOF BUFF + SIZEOF VARW ;AX =
12、10+4 =14 = 0EH 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档! MOV AX,TYPE BIGIN ; AX = FF02H (近) MOV AX,OFFSET BEGIN ;AX = 1BH 习题利用简化段定义格式,必须具有.MODEL 语句。MASM 定义了哪 7 种存储模式,TINY 和 SMALL 模式创建什么类型(EXE 或 COM)程序设计 32 位程序应该采用什么模式 解答 MASM 定义的 7 种存储模式是 TINY(微型模式、SMALL(小型模式)、COMPACT(紧凑模式)、MEDIUM(中型模式)、LARGE(
13、大型模式)、HUGE(巨大模式)、FLAT(平展模式);TINY 用于创建 COM 类型程序、一般程序都可以选用 SMALL 模式;设计 32 位的程序应该采用 FLAT 模式。 习题源程序中如何指明执行的起始点源程序应该采用哪个 DOS 功能调用,实现程序返回 DOS 解答 源程序中运用 STARTUP 伪指令指明执行的起始点;源程序应该采用 DOS 功能调用的 4CH 子功能实现程序返回 DOS 的。 习题在 SMALL 存储模式下,简化段定义格式的代码段、数据段和堆栈段的缺省段名、定位、组合以及类别属性分别是什么 解答 段 定 义 伪 指 令 段 名 定 位 组 合 类别 组名 .COD
14、E _TEXT WORD PUBLIC CODE .DATA _DATA WORD PUBLIC DATA DGROUP .DATA _BSS WORD PUBLIC BSS DGROUP .STACK STACK PARA STACK STACK DGROUP 习题如何用指令代码代替.startup 和.exit 指令,使得例题能够在 MASM 下汇编通过 解答 ;(文件名) .model small .stack .data string db Hello,Everybody !,0dh,0ah.$ 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文
15、档! .code start: mov ax ,data mov ds,ax mov dx,offset string mov ah,9 int 21h mov ax ,4c00h int 21h end start 习题创建一个 COM 程序完成例题的功能。 解答 ;lt301a,asm .model tiny .code .startup mov dx,offset string mov ah,9 int 21h .exit 0 string db Hello,Everybody!0dh,0ah,$ ; end 习题按下面要求写一个简化段定义格式的源程序 (1) 定义常量 num,其值为
16、5;数据段中定义字数组变量 datalist,它的头 5 个字单元中依次存放-1、0、2、5 和 4,最后 1 个单元初值不定; (2) 代码段中的程序将 datalist 中头 num 个数的累加和存入 datalist 的最后 1 个字单元中。 解答 .model small .stack .data num equ 5 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!datalist dw -1,0,2,5,4, .code .startup mov bx,offset datalist mov cx,num xor ax,ax again:
17、 add ax,bx inc bx inc bx loop again mov bx,ax .exit 0 end 习题按下面要求写一个完整段定义格式的源程序 (1)数据段从双字边界开始,其中定义一个 100 字节的数组,同时该段还作为附加段; (2)堆栈段从节边界开始,组合类型为 stack; (3)代码段的类别是code,指定段寄存器对应的逻辑段;主程序指定从 100h 开始,给有关段寄存器赋初值;将数组元素全部设置为 64h。 解答 stack segment para stack dw 512 dup() stack ends data segment array db 100 dup
18、() data ends code segment code assume cs:code,ds:data,es:data,ss:stack org 100h start: mov ax,data 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档! mov ds,ax mov es,ax mov di,offset array mov al,64h mov cx,100 cld rep stosb mov ax,4c00h int 21h code ends end start 习题编制程序完成两个已知双精度数(4 字节)A 和 B 相加并将结果存入
19、双精度变量单元 SUM 中(不考虑溢出)。 解答 ; .model small .stack 256 ;定义堆栈段大小为 256 个字节 .data A dd h ;定义两个双字的数(随意) B dd h sum dd ;定义结果,执行后为:h .code .startup xor si, si ;相对于变量的位移量清零 mov cx, 2 ;分高低字分别相加,共两次 clc ;清零 cf again: mov ax, word ptr Asi ;取第一个数的一个字(先低字后高字) adc ax, word ptr Bsi ;取第二个数的一个字(先低字后高字) mov word ptr sum
20、si, ax ;存和的一个字(先低字后高字) 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档! inc si ;修改位移量指向下一个字(加 2) inc si loop again ;cx=cx-1 ,if cx0 ,jump again .exit 0 end 习题编制程序完成 12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H 和 34H 等 10 个字节数据之和,并将结果存入字节变量 SUM 中(不考虑溢出)。 解答 .startup xor si, si ;位移量清零 mov al, bdatasi ;取第一个数
21、mov cx, num-1 ;累加次数 again: inc si ;指向下一个数 adc al, bdatasi ;累加 loop again ;如未完,继续累加 mov sum, al ;完了,存结果 .exit 0 end 习题结构数据类型如何说明、结构变量如何定义、结构字段如何引用 解答 结构类型的说明使用一对伪指令 STRUCT(是 STRUC,功能相同)和 ENDS。它们的格式为: 结构名 STRUCT ;数据定义语句 结构名 ENDS 结构变量定义的格式为: 变量名,结构名 字段初值表 引用结构字段,采用圆点“.”操作符,其格式是: 结构变量名.结构字段名。 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档! 习题记录数据类型如何说明,记录变量如何定义,width 和 mask 操作符是什么作用 解答 记录类型的说明采用伪指令 RECORD,它的格式为: 记录名 RECORD 位段,位段 定义记录变量的格式: 记录变量名 记录名 段初值表 Width 记录名/记录位段名操作符返回记录或记录位段所占用的位数。 mask 记录位段名操作符返回一个 8 位或 16 位数值,其中对应该位段的个位为 1,其余位为 0。