汇编语言程序设计 第四版
【课后习题答案】 --囮裑為檤
第3章 汇编语言程序格式
〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用?
〔解答〕
伪指令语句与硬指令语句的本质区别是能不能产生CPU动作;
伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。
〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成?
〔解答〕
为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符;
汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。
〔习题3.3〕 什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
〔解答
保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。
〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成?
〔解答〕
汇编语句有执行性语句和说明性语句;
执行性语句由标号、硬指令助记符、操作数和注释四部分组成;
说明性语句由名字、伪指令助记符、参数和注释四部分组成
〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
〔解答〕
血蛋白低⒈ 编辑 文本编辑程序 汇编语言源程序.asm
⒉ 汇编 汇编程序 目标模块文件.obj
⒊ 连接 连接程序 可执行文件.exe或.com风流倜傥意思
⒋ 调试 调试程序 应用程序
〔习题3.6〕区分下列概念:
(1)变量和标号
(2)数值表达式和地址表达式
(3)符号常量和字符串常量
〔解答〕
(1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。
(2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。
(3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。
〔习题3.7〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。
(1) mov byte ptr [bx],1000
(2) mov bx,offt myword[si]
(3) cmp mybyte1,mybyte2
(4) mov al,mybyte1+mybyte2
(5) sub al,myword
(6) jnz myword
〔解答〕
(1)1000超出了一个字节范围
(2)寄存器的值只有程序执行时才能确定,而offt是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si]
(3)两个都是存储单元,指令不允许
(4)变量值只有执行时才确定,汇编过程不能计算
(5)字节量AL与字量myword,类型不匹配
(6)Jcc指令只有相对寻址方式,不支持间接寻址方式
〔习题3.8〕OPR1是一个常量,问下列语句中两个AND操作有什么区别?
AND AL,OPR1 AND 0feh
〔解答〕
前者为“与”操作硬指令助记符,可汇编成机器代码。
后者为逻辑运算符,在汇编时进行“与”运算,产生具体数值。
〔习题3.9〕给出下列语句中,指令立即数(数值表达式)的值:
(1) mov al,23h AND 45h OR 67h
(2) mov ax,1234h/16+10h
梦见死了的人(3) mov ax,NOT(65535 XOR 1234h)
(4) mov al,LOW 1234h OR HIGH 5678h
(5) mov ax,23h SHL 4
贯口《报花名》(6) mov ax,1234h SHR 6
(7) mov al,’a’ AND (NOT(’a’-’A’))
(8) mov al,’H’ OR 00100000b
(9) mov ax,(76543 LT 32768) XOR 7654h
〔解答〕
注:对于逻辑运算,有关操作数可化为二进制数。
(1)67h
(2)133h
(3)1234h
(4)76h东溪大峡谷
(5)0234h
(6)0048h
(7)41h
(8)68h
(9)7654h
〔习题3.10〕画图说明下列语句分配的存储空间及初始化的数据值:
(1) byte_var DB ’ABC’,10,10h,’EF’,3 DUP(-1,?,3 DUP(4))
(2) word_var DW 10h,-5,’EF’,3 DUP(?)
〔解答〕
(1)从低地址开始,依次是(十六进制表达):
41 42 43 0a 10 45 46 ff - 04 04 04 ff - 04 04 04 ff - 04 04 04
(2)从低地址开始,依次是(十六进制表达):
10 00 FB FF 46 45 - - - - - -
〔习题3.11〕请设置一个数据段mydatag,按照如下要求定义变量:
(1) my1b为字符串变量:Personal Computer
(2) my2b为用十进制数表示的字节变量:20
(3) my3b为用十六进制数表示的字节变量:20
(4) my4b为用二进制数表示的字节变量:20
(5) my5w为20个未赋值的字变量
(6) my6c为100的常量
(7) my7c表示字符串:Personal Computer
〔解答〕
mydatag gment
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 <Personal Computer>
mydatag ends
赵姓的来源
〔习题3.12〕分析例题3.2的数据段,并上机观察数据的存储形式。
〔解答〕
以字节为单位从低地址向高地址依次是:
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
‘a’ ‘b’ ‘c’
‘H’ ‘e’ ‘l’ ‘l’ ‘o’ 13 10 ‘$’
12个字符串’month’,每个字符串从低地址到高地址依次是:’m’ ‘o’ ‘n’ ‘t’ ‘h’
25×4个字节未定义初值的存储单元,操作系统设置为0
〔习题3.13〕修改例题3.3,现在用字定义伪指令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 si,offt source
mov di,offt target