状态标志:用来记录程序运行结果的状态信息。 控制标志:DF标志,控制字符串操作的地址方向。 系统标志:用于控制处理器执行指令的方式。
状态标志在标志寄存器EFLAGS中的位置和含义如下: 31 11 10 9 8 7 6 5 4 3 2 1 0 ?? OF SF ZF AF PF CF
〔习题2.7〕
举例说明CF和OF标志的差异。 〔解答〕
进位标志CF表示无符号数运算结果是否超出范围,超出范围后加上进位或借位,运算结果仍然正确;溢出标志OF表示有符号数运算结果是否超出范围,如果超出范围,运算结果已经不正确。 例1:3AH + 7CH=B6H
无符号数运算:58+124=182,范围内,无进位。 有符号数运算:58+124=182,范围外,有溢出。 例2:AAH + 7CH=①26H
无符号数运算:170+124=294,范围外,有进位。 有符号数运算:-86+124=28 ,范围内,无溢出。 〔习题2.8〕
什么是8086中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达(均为十六进制形式):
① FFFF∶0 ② 40∶17 ③ 2000∶4500 ④ B821∶4567 〔解答〕
物理地址:在处理器地址总线上输出的地址称为物理地址。每个存储单元有一个唯一的物理地址。 逻辑地址:在处理器内部、程序员编程时采用逻辑地址,采用“段地址:偏移地址“形式。某个存储单元可以有多个逻辑地址,即处于不同起点的逻辑段中,但其物理地址是唯一的。 逻辑地址转换成物理地址:逻辑地址由处理器在输出之前转换为物理地址。将逻辑地址中的段地址左移二进制4位(对应16进制是一位,即乘以16),加上偏移地址就得到20位物理地址。 ① FFFFH:0=FFFF0H ② 40H:17H=00417H
③ 2000H:4500H=24500H ④ B821H:4567H=BC777H 〔习题2.9〕
IA-32处理器有哪三类基本段,各是什么用途? 〔解答〕
IA-32处理器有代码段、数据段、堆栈段三类基本段。
代码段:存放程序的指令代码。程序的指令代码必须安排在代码段,否则将无法正常执行。
数据段:存放当前运行程序所用的数据。程序中的数据默认是存放在数据段,也可以存放在其他逻辑段中。
堆栈段:主存中堆栈所在的区域。程序使用的堆栈一定在堆栈段。 〔习题2.10〕
什么是平展存储模型、段式存储模型和实地址存储模型? 〔解答〕
平展存储模型下,对程序来说存储器是一个连续的地址空间,称为线性地址空间。程序需要的代码、数据和堆栈都包含在这个地址空间中。
段式存储模型下,对程序来说存储器由一组独立的地址空间组成,独立的地址空间称为段。通常,代码、数据和堆栈位于分开的段中。
实地址存储模型是8086处理器的存储模型。它是段式存储模型的特例,其线性地址空间最大为1MB
容量,由最大为64KB的多个段组成。 〔习题2.11〕
什么是实地址方式、保护方式和虚拟8086方式?它们分别使用什么存储模型? 〔解答〕
实地址方式:与8086具有相同的基本结构,只能寻址1MB物理存储器空间,逻辑段最大不超过64KB;但可以使用32位寄存器、32位操作数和32位寻址方式;相当于可以进行32位处理的快速8086。实地址工作方式只能支持实地址存储模型。
保护方式:具有强大的段页式存储管理和特权与保护能力,使用全部32条地址总线,可寻址4GB物理存储器。保护方式通过描述符实现分段存储管理,每个逻辑段可达4GB。处理器工作在保护方式时,可以使用平展或段式存储模型。
虚拟8086方式:在保护方式下运行的类似实方式的运行环境,只能在1MB存储空间下使用“16位段”。 处理器工作在虚拟8086方式时,只能使用实地址存储模型。 〔习题2.12〕
汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕
汇编语句有两种:执行性语句(处理器指令)、说明性语句(伪指令)。 每个语句有:标号、指令助记符、操作数或参数、注释4个部分组成。 〔习题2.13〕
汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕
汇编语言程序的开发有4个步骤:
编辑:用文本编辑器形成一个以ASM为扩展名的源程序文件。 汇编:用汇编程序将ASM文件转换为OBJ模块文件。
连接:用连接程序将一个或多个目标文件链接成一个EXE或COM可执行文件。 调试:用调试程序排除错误,生成正确的可执行文件。 〔习题2.14〕
MASM汇编语言中,下面哪些是程序员可以使用的正确的标识符。 FFH,DS,0xvab,Again,next,@data,h_ascii,6364b,.exit,small 〔解答〕
FFH,Again,next,h_ascii 〔习题2.15〕
给出IA-32处理器的32位寻址方式和16位寻址方式的组成公式,并说明各部分作用。 〔解答〕
① 32位存储器寻址方式的组成公式
32位有效地址 = 基址寄存器+(变址寄存器×比例)+位移量 其中的4个组成部分是:
·基址寄存器任何8个32位通用寄存器之一;
·变址寄存器除ESP之外的任何32位通用寄存器之一;
·比例可以是1,2,4或8(因为操作数的长度可以是1,2,4或8字节); ·位移量可以是8或32位有符号值。 ② 16位存储器寻址方式的组成公式
16位有效地址 = 基址寄存器+变址寄存器+位移量
其中基址寄存器只能是BX或BP,变址寄存器只能是SI或DI,位移量是8或16位有符号值。 〔习题2.16〕
说明下列指令中源操作数的寻址方式?假设VARD是一个双字变量。 (1)mov edx,1234h (2)mov edx,vard (3)mov edx,ebx
(4)mov edx,[ebx]
(5)mov edx,[ebx+1234h] (6)mov edx,vard[ebx] (7)mov edx,[ebx+edi]
(8)mov edx,[ebx+edi+1234h] (9)mov edx,vard[esi+edi] (10)mov edx,[ebp*4] 〔解答〕 ① 立即数 ② 直接 ③ 寄存器
④ 寄存器间接 ⑤ 寄存器相对 ⑥ 寄存器相对 ⑦ 基址变址
⑧ 相对基址变址 ⑨ 相对基址变址 ⑩ 带比例寻址 〔习题2.17〕
使用本书配套的软件包(或者按照本书说明)创建MASM开发环境,通过编辑例题2-1和例题2-2程序、汇编连接生成可执行程序和列表文件,掌握汇编语言的开发。 第3章 数据处理 〔习题3.1〕简答题 〔解答〕
① 没有。使用二进制8位表达无符号整数,257没有对应的编码。 ② 字符“'F'”的ASCII码就是数值46H,所以没有区别。
③ 汇编程序在汇编过程中对数值表达式计算,得到一个确定的数值,故称数值表达式为常量。 ④ 不能。数值500大于一个字节所能表达的数据量,所以不能为字节变量赋值。 ⑤ 源、目标寄存器位数不同,不能用该指令进行数据交换。 ⑥ 前者在指令执行时获得偏移地址,是正确的;但后者的OFFSET只能在汇编阶段获得偏移地址,但此时寄存器内容是不可知的,所以无法获得偏移地址。
⑦ INC,DEC,NEG和NOT指令的操作数既是源操作数也是目的操作数。 ⑧ 大小写字母转换利用它们的ASCII码相差20H。 ⑨ 加减法不区别无符号数和有符号数,但根据运算结果分别设置标志寄存器的CF和OF标志,可利用CF和OF进行区别。
⑩ 逻辑与运算规则类似二进制的乘法,所以称其为逻辑乘。 〔习题3.2〕判断题
〔解答〕
① 对 ② 对 ③ 对 ④ 错 ⑤ 错 ⑥ 对 ⑦ 错 ⑧ 错 ⑨ 对 ⑩ 对 〔习题3.3〕填空题 〔解答〕
① BYTE,OFFSET ② 97,61,小写字母a ③ 0DH(13),0AH(10) ④ 8843H
⑤ DWORD,4,WORD PTR XYZ
⑥ 3
⑦ 78894111 ⑧ 0,0,0
⑨ 0123456788765432H,83H ⑩ 4
〔习题3.4〕
下列十六进制数表示无符号整数,请转换为十进制形式的真值: ① FFH ② 0H ③ 5EH ④ EFH 〔解答〕 ① 255 ② 0 ③ 94 ④ 239
〔习题3.5〕
将下列十进制数真值转换为压缩BCD码: ① 12 ② 24 ③ 68 ④ 99 〔解答〕 ① 12H ② 24H ③ 68H ④ 99H
〔习题3.6〕
将下列压缩BCD码转换为十进制数:
① 10010001 ② 10001001 ③ 00110110 ④ 10010000 〔解答〕 ① 91 ② 89 ③ 36 ④ 90
〔习题3.7〕
将下列十进制数用8位二进制补码表示: ① 0 ② 127 ③-127 ④ -57 〔解答〕 ① 00000000 ② 01111111 ③ 10000001 ④ 11000111 〔习题3.8〕
进行十六进制数据的加减运算,并说明是否有进位或借位: ① 1234H+7802H ② F034H+5AB0H ③ C051H-1234H ④ 9876H-ABCDH 〔解答〕
① 1234H+7802H=8A36H,无进位 ② F034H+5AB0H=4AF4H,有进位 ③ C051H-1234H=BE1DH,无借位 ④ 9876H-ABCDH=ECA9H,有借位