#第二章
2.1简答题
🖍(1)ALU是什么?
答:算数逻辑单元(Arithmetic Logic Unit ,ALU),是计算机的运算器,负责处理器所能进行的各种运算,主要就是算术运算和逻辑运算。(p24)
🖍(2)8086的预指为什么可以称为指令预取
答:取值是指从主存取出指令代码通过总线传输到处理器内部指令寄存器的过程。8086分成总线接口单元(BIU)和指令执行单元(EU),可以独立操作。在执行单元执行一条指令进行译码执行时,总线接口单元可以读取下一条指令,等到执行时不需要进行取指了,所以称为预取。换句话说BIU与EU两个单元相互独立,分别完成各自操作。(P26)
🖍(3)Pentium的片上Cache采用统一存储结构还是分离存储结构?
答:Pentium采用分离的 Cache结构,一个用做高速缓冲指令的指令 Cache,一个用做高速缓冲数据的数据 Cache。(p29)
🖍(4)堆栈的存取原则是什么?
答:堆栈的存取原则的先进后出(也称后进先出)操作方式存取数据。(p31)
🖍(5)标志寄存器主要保存哪方面的信息?
答:标志寄存器主要保存反映指令执行结果和控制指令执行形式的有关状态。
🚫注意:
-
进位标志(CF,0),运算时,若最高位产生了进位或借位,则CF=1;否则,CF=0。
-
奇偶标志(PF,2),运算结果的最低8位,“1”的个数为偶数时PF=1;否则PF=0
-
调整标志(AF.4),运算时,若半字节有进位或借位,则AF=1;否则AF=0
-
零标志(ZF,6),运算结果为0,则ZF=1;否则ZF=0
-
符号标志(SF,7),运算结果符号位为1时,SF=1;否则SF=0
-
溢出标志(OF,11),运算时,若操作数超过了机器字长所限定的数据范围,称为溢出,则OF=1;否则OF=0。(p31)
🖍(6)执行了一条加法指令后,发现ZF=1,说明结果是什么?
答:ZF为零标志,ZF=0,表示运算结果为0。(P31)
🖍(7)汇编语言中的标识符与高级语言中的变量和变量名组成原则有本质区别吗?
答:没有。标识符最多由31个字母、数字及规定的特殊符号组成,但不能以数字开头。(p40)
🖍(8)汇编语言的标识符大小不敏感意味着什么?
答: 汇编语言的标识符大小写不敏感,即表示字母大小写不同、但表示同一个符号。(p40)
🖍(9)在汇编语言源程序文件中,END语句后的语句会被汇编吗?
答:不会,源程序的最后需要有一条汇编结束END语句,这之后的语句不会被汇编程序所汇编。
⛔️注意:汇编结束表示汇编程序到此结束将源程序翻译成目标模块代码的过程,而不是指程序终止执行。(P42)
🖍(10)为什么将查找操作数的方法称为寻“址”方式?
答:指令的操作数需要通过存储器地址或I/O地址,才能查找到数据本身,故称为数据寻址方式。
⛔️注意:主存或外设在汇编语言中被抽象为存储器地址或I/O地址,而寄存器虽然以名称表达,但机器代码中同样用地址编码区别寄存器,所以指令操作数需要通过地址指示。通过地址才能查到数据本身,这就是数据寻址方式。(p48)
2.2判断题
🌳(1)程序计数器PC(Program Counter)或指令指针EIP寄存器属于通用寄存器。❌(P33)
解释:程序计数器PC与指令指针EIP的功能等同。在IA-32处理器中。程序计数器对应32位指令指针寄存器EIP,属于专用寄存器。程序由指令组成,指令存放在主存储器中,处理器需要一个专用寄存器表示将要执行的指令在主存的位置,这个位置用存储器表示,存储器地址保存在程序计数器中。
🌳(2)处理器的指令译码是将指令代码翻译成它代表的功能的过程,与数字电路的译码器是不同的概念。✔️
🌳(3)EAX也被称为累加器,因为它使用最频繁。✔️(p30)
解释:
-
EAX:累加器(Accumulator),使用频度最高,用于算术运算、逻辑运算、以及与外设传送信息等。
-
EBX:基址寄存器(Base Address Register),常用来存放存储器地址,以方便指向变量或数组中的元素。
-
ECX:计数器(Counter),作为循环操作等指令中的计数器。
-
EDX:数据寄存器(Date Register),可以存放数据,其中低16位DX常用来存放外设端口地址。
-
ESI:源变址寄存器(Source Index Register),用于指向字符串或数组的源操作数。源操作数是指被传送或参与运算的操作数。
-
EDI:目的变址寄存器(Destination Index Register),用于指向字符串或数组的目的操作数。目的操作数是指保存传送结果,或运算结果的操作数。
-
ESP:基址指针寄存器(Base Pointer Register),默认情况下指向程序堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变量。
-
EBP:堆栈指针寄存器(Stack Pointer Register),专用于指向程序堆栈区域顶部的数据,在涉及堆栈操作的指令中会自动增加或减少。
🌳(4)处理器的传送指令MOV属于汇编语言的执行性语句。✔️(P39)
解释:执行性语句格式:标号: 处理器指令助记符 操作数,操作数 ;注释
说明性语句格式(指示性):名字 伪指令助记符 参数,参数~~ ;注释
🌳(5)汇编语言的语句由明显的四个部分组成,不需要分隔符区别。❌(p39)
解释:汇编语言源程序由语句序列构成,每条语句一般占一行,每行不超过132个字符,语句由相似两种,一般都由分隔符分成的4个部分组成。
🌳(6)80-90需要借位,所以执行后,进位标志CF=1.✔️(p31)
解释:运算时,若最高位产生了进位或借位,则CF=1;否则,CF=0。
🌳(7)MASM汇编语言的注释以分号开始,但不能用中文分号。✔️(P41)
🌳(8)IA-32处理器在实地址方式下,不能使用32位寄存器。❌(P35)
解释:实地址方式下,IA-32处理器只能寻址1MB物理存储器,每个段最大不超过64KB,但可以使用32位寄存器,32位操作数和32位寻址方式。
🌳(9)存储器寻址方式的操作数当然在主存了。✔️(P49)
解释:寻址主存中存储的操作数就称为存储器寻址方式,也称为主存寻址方式。编程时,存储器地址使用包含段选择器和偏移地址的逻辑地址。
🌳(10)保护方式下,段基地址加偏移地址就是线性地址或物理地址。✔️(p36)
解释:在平展或段式存储模型下,线性地址将被直接或通过分页机制映射到物理地址。不使用分页机制是,线性地址与物理地址一一对应,线性地址不需转换就被发送到处理器地址总线上。使用分页机制时,线性地址空间被分成大小一致的快,称为页。页在硬件支持下由操作系统或核心程序管理,构成虚拟存储器,并转换到物理地址空间。
进一步理解:https://blog.youkuaiyun.com/strdhgthbbh/article/details/90761981
2.3填空题
😏(1)寄存器EDX是32位的,其中低16位的名称是DX,还可以分为两个8位的寄存器,其中D8~D15部分可以用名称DH表示。
解释:(P30)
😏(2)IA-32处理器在保护模式下,段寄存器是16位的。
解释:IA-32处理器通用指令的基本执行环境包括8个32位通用寄存器,6个16位段寄存器,32位标志寄存器和指令指针。(p30)
😏(3)逻辑地址由段基地址和偏移地址两部分组成。代码段中下一条要执行的指令由CS和EIP寄存器表示,后者在实地址模型中起作用的仅有IP寄存器部分。
解释:实地址存储模型限定每个段不超过64KB(=216字节),所以段内偏移地址可以用16位数据表示。所以仅IP寄存器部分起作用(P35)
😏(4)进行8位二进制数加法:10111010+01101100,8位结果为00100110,标志PF= 0。
解释:PF为奇偶标志,运算结果的最低8位,“1”的个数为偶数时PF=1;否则PF=0。’1‘的个数为3所以PF=0。(p32)
😏(5)在实地址工作方式下,逻辑地址:"7380H:400H"表示的物理地址是73C00H,并且该段起始于73800H物理地址。
解释:根据实地址存储模型,只要将逻辑地址中的段基地址左移4位(16进制就移动一位),加上偏移地址就得到20位物理地址。(p37)
段基地址7380H左移一位为73800H,表示该段起始于73800H,加上偏移地址400H为73C00H.
😏(6)IA-32处理器有8个32位通用寄存器,其中EAX,EBX,ECX,EDX可以分为16位和8位操作;还有另外四个是ESI,EDI,ESP,EBP.
解释:上述8个寄存器是在8086支持的16位通用寄存器的基础上扩展而得到的。去掉表的含扩展含义的字母E,就是8个16位通用寄存器的名称:AX,BX,CX,DX,SI,DI,SP,BP,分别表示相应32位通用寄存器的低16位部分,其中前四个通用寄存器AX,BX,CX,DX还可以进一步分成高字节和低字节两部分,这样又有了8个8位通用寄存器:AH,AL,BH,BL,CH,CL,DH,DL.(P30)
😏(7)IA-32处理器复位后,首先进入的是实地址工作方式。该工作方式的最大分段不超过64KB.
解释:通电或复位后,IA-32处理器处于实地址方式(Real-address Mode,简称实方式),实地址存储模型限定每个段不超过64KB(=216字节)(p35)
😏(8)MASM要求汇编语言源程序文件的扩展名ASM,汇编产生扩展名为.OBJ的文件称为目标模块,编写32位Windows应用程序应选择FLAT(平展)存储模型。
解释:(p46,p44,p42)
😏(9)除外设数据外的数据寻址方式有3类,分别称为:立即数寻址,寄存器寻址,存储器寻址
解释:(p48)
-
立即数寻址:用常量表达的具体数值。在立即数寻址方式中指令需要的才最书紧跟在操作码之后作为指令机器代码的一部分,并随着处理器的取指操作从主存进入指令寄存器。这种操作数用常量形式直接表达,从指令代码中立即得到,称之为立即数。立即数寻址方式只用于指令的源操作数,在传送指令中常用来给寄存器或存储单元赋值。
-
寄存器寻址:用寄存器名表示的其中内容 。指令的操作数存放在处理器的寄存器中,就是寄存器寻址方式。通常直接使用寄存器名表示他保存的数据,即寄存器操作数。寄存器寻址方式简单快捷,是最常使用的寻址方式。
-
存储器寻址:用存储器地址代表的保存的数据。寻址主存中存储的操作数就称为存储器寻址方式,也称为主存寻址方式。编程时,存储器地址试用包括段选择器和偏移地址的逻辑地址。
-
寻址:通过地址访问(存取,读写)
😏(10)用EBX作为基地址指令,默认采用DS段寄存器指向的数据段;如果采用BP,EBP,SP,ESP,作为基地址指针,默认采用SS短寄存器指向堆栈段。
解释:数据段寄存器DS,代码段寄存器CS,堆栈段寄存器SS,附加段寄存器ES。
2.4理器内部具有哪 3 个基本部分? 8086 分为哪两大功能部件?其各自的主要功能是什么?(p25,p26)
答:
-
处理器内部有算术逻辑单元(ALI),寄存器和指令处理单元三个基本单元。
-
分为总线接口单元BIU与执行单元EU.
-
总线接口单元:管理着8086与系统总线的接口,负责处理器对存储器和外设进行访问,8086所有对外操作必须通过BIU和这些总线进行。
-
执行单元:负责指令译码、数据运算和指令执行。
-
2.5 8086怎样实现了最简单的指令流水线?(p27)
答:8086中,指令的读取是在BIU单元,而指令的执行是在EU单元。因为BIU和EU两个单元相互独立、分别完成各自操作,所以可以并行操作。也就是说,在EU单元对一个指令进行译码执行时,BIU单元可以同时对后续指令进行读取,这就是最简单的指令流水线技术。
2.6什么是标志?什么是 IA-32 处理器的状态标志、 控制标志和系统标志?说明状态标志在标志寄存器 EFLAGS 的位置和含义。(p31)
答:
-
标志(Flag):用于反映指令执行结果或控制指令执行形式的一个或多个二进制数位。
-
状态标志:最基本的标志,用来记录指令执行结果的辅助信息。
-
控制标志:DF标志,控制字符串操作的地址方向。DF=0每次串操作后的存储器地址就会自动增加,即从低地址向高地址处理数据串。DF=1,每次串操作后的存储器地址就会自动减少,即从高地址向低地址处理数据串。处理器执行CLD指令设置DF=0,执行STD指令设置DF=1。
-
系统标志:用于控制操作系统或核心管理程序的操作方式。换句话说用于控制处理器执行指令的方式。
-
状态标志在EFLAGS的位置和含义如下:
32 … 22 … 11 … 7 6 5 4 3 2 1 0 0 0 0 OF SF ZF 0 AF 0 PF 1 CF -
进位标志(CF,0),运算时,若最高位产生了进位或借位,则CF=1;否则,CF=0。
-
奇偶标志(PF,2),运算结果的最低8位,“1”的个数为偶数时PF=1;否则PF=0
-
调整标志(AF.4),运算时,若半字节有进位或借位,则AF=1;否则AF=0
-
零标志(ZF,6),运算结果为0,则ZF=1;否则ZF=0
-
符号标志(SF,7),运算结果符号位为1时,SF=1;否则SF=0
-
溢出标志(OF,11),运算时,若操作数超过了机器字长所限定的数据范围,称为溢出,则OF=1;否则OF=0。
-
2.7举例说明 CF 和 OF 标志的差异。
答:
-
进位标志(CF,0),运算时,若最高位产生了进位或借位,则CF=1;否则,CF=0。
溢出标志(OF,11),运算时,若操作数超过了机器字长所限定的数据范围,称为溢出,则OF=1;否则OF=0。
-
进位标志 CF 表示无符号数运算结果是否超出范围, 超出范围后加上进位或借位, 运算结果仍然正 确;溢出标志 OF 表示有符号数运算结果是否超出范围,如果超出范围,运算结果已经不正确。
-
例一:3AH+7CH=B6H
无符号运算:58+124=182.范围内,无进位
有符号运算:58+124=182,范围外,有溢出
-
例二:AAH+7CH=126H:AAH=10101010B=-[01010101+1]=-86
无符号运算:170+124=294范围外,有进位
有符号运算:-86+124=28范围内,无溢出
2.8什么是 8086 中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理 地址表达(均为十六进制形式) :① FFFF∶0 ② 40∶17 ③ 2000∶4500 ④ B821∶4567(p33,p35)
答;
-
物理地址:在处理器地址总线上输出的地址称为物理地址。每个存储单元有一个唯一的物理地址。
-
逻辑地址:在处理器内部,程序员编程时采用逻辑地址,采用“段基地址:偏移地址“形式。某个存储单元可以有多个逻辑地址,即处于不同起点的逻辑段,但物理地址是唯一的。
-
物理地址与逻辑地址的转换:将逻辑地址中的段地址 左移二进制 4 位(对应 16 进制是左移一位,即乘以 16),加上偏移地址就得到 20 位物理地址。(保护方式与实地址方式及计算方式可以一样,但意义不一样)
-
物理地址为:FFFF0H+0000H=FFFF0H
-
物理地址为:00400H+0017H=00417H
-
物理地址为:20000H+4500H=24500H
-
物理地址为: B8210H+4567H=BC777H
-
2.9 IA-32 处理器有哪三类基本段,各是什么用途?(P35)
答:
-
代码段:存放程序的指令代码。程序的指令代码必须安排在代码段,否则将无法正常进行。
-
数据段:存放当前运行程序所用的数据。程序中的数据默认是存放在数据段, 也可以存放在其他逻 辑段中。
-
堆栈段:主存中堆栈所在区域。程序使用的堆栈一定在堆栈段。
2.10 什么是平展存储模型、段式存储模型和实地址存储模型?(p34)
答:
-
平展存储模型下:对程序来说是一个连续的地址空间,称为线性空间。程序需要的代码数据和堆栈都包含在这个地址空间中。
-
段式存储模型:对程序来说存储器由一组独立的地址空间组成,独立的地址空间称为段。通常,代码、数据和堆栈位于分开的段中。
-
实地址存储模型:是8086处理器的存储模型。他是段式存储模型的特例,其线性地址空间最大为1MB,由最大为64KB的多个段组成。
2.11 什么是实地址方式、保护方式和虚拟 8086方式?它们分别使用什么存储模型?(p34)
答:
-
实地址方式:与8086具有相同的基本结构,只能寻址1MB物理空间,逻辑段最大不超过64KB;但可以使用32位寄存器、32位操作数和32位寻址方式;相当于可以进行32位处理的快速8086.实地址工作方式只能支持实地址存储模型。
-
保护方式:具有强大的段页式存储管理和特权与保护能力,使用全部32条地址总线,可寻址4GB物理存储器,保护方式通过描述符实现分段存储管理,每个逻辑段可答4GB.处理器在保护方式时。可以使用平展或段式存储模型。
-
虚拟8086方式:在保护方式下运行的类似实方式的运行环境,只能在1MB存储空间下使用“16位段”。处理器工作在虚拟8086方式时,只能使用实地址存储模型。
2.12 汇编语句有哪两种,每个语句由哪 4 个部分组成?(p39)
答:
-
执行性语句:表达处理器指令的语句。
标号: 指令助记符 操作数,操作数 ;注释
-
说明性语句(指示性语句):表示汇编程序命令的语句。
名字 伪指令助记符 参数,参数 …… ;注释
2.13 汇编语言程序的开发有哪 4 个步骤,分别利用什么程序完成、产生什么输出文件。(p44)
答:
-
编辑:用文本编辑器形成一个以 ASM 为扩展名的源程序文件。
-
汇编:用汇编程序将 ASM 文件转换为 OBJ 模块文件。
-
连接:用连接程序将一个或多个目标文件链接成一个 EXE 或 COM 可执行文件。
-
调试:用调试程序排除错误,生成正确的可执行文件。
2.14MASM 汇编语言中,下面哪些是程序员可以使用的正确的标识符。 FFH,DS,0xvab,Again,next,@data,h_ascii,6364b,.exit,small(p40)
答:FFH,Again,next,h_ascii。
⛔️ 注意:标识符最多由31个字母、数字及规定的特殊符号组成,但不能以数字开头。、
2.15给出 IA-32 处理器的 32 位寻址方式和 16 位寻址方式的组成公式,并说明各部分作用。(P50)
答:
-
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 程序、汇编连接生成可执行程序和列表文件,掌握汇编语言的开发。
答:
汇编程序如下:
EG0201:
; eg0201.asm in Windows Console include d:\masm\io32.inc ;数据段 .data msg byte 'Hello, Assembly!',13,10,0 ;字符串 ;代码段 .code start: mov eax,offset msg ;显示 call dispmsg exit 0 end start
编译连接程序:
@echo off REM make32.bat, for assembling and linking 32-bit Console programs (.EXE) d:\masm\BIN\ML /c /coff %1.asm if errorlevel 1 goto terminate d:\masm\BIN\LINK32 /subsystem:console %1.obj if errorlevel 1 goto terminate DIR %1.* %1.exe :terminate @echo on
结果如下:
EG0202:
; eg0201d.asm in MS-DOS include io16.inc .data msg byte '你好,汇编语言!',13,10,0 ;字符串 .code start: mov ax,@data mov ds,ax mov eax,offset msg ;显示 call dispmsg exit 0 end start
编译连接程序:
@echo off REM make32.bat, for assembling and linking 32-bit Console programs (.EXE) d:\masm\BIN\ML /c /coff %1.asm if errorlevel 1 goto terminate d:\masm\BIN\LINK32 /subsystem:console %1.obj if errorlevel 1 goto terminate DIR %1.* %1.exe :terminate @echo on
结果如下: