1 / 222

第 3 章教学内容及目标

第 3 章教学内容及目标. 教学内容 : 工作模式,程序设计模型 , 实模式存储器寻址, 段和偏移寄存器之间的隐含关系。堆栈及其实现 、 I/O 口的组织 。 教学目标: 了解工作模式,建立起程序设计模型的基本概念,了解实模式存储器寻址的有关问题的基本概念,以便于为进一步学习汇编语言程序设计打下基础。 能够描述软件堆栈的工作原理,建立 I/O 空间的概念。. 实践教学 : 用 REGISTER 窗口观察 CPU 中各寄存器的 名称与长度, EFLAGS/FLAGS 的位意义。 教学设计 (1):

trevor
Download Presentation

第 3 章教学内容及目标

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第3章教学内容及目标 教学内容:工作模式,程序设计模型,实模式存储器寻址, 段和偏移寄存器之间的隐含关系。堆栈及其实现、I/O口的组织。 教学目标:了解工作模式,建立起程序设计模型的基本概念,了解实模式存储器寻址的有关问题的基本概念,以便于为进一步学习汇编语言程序设计打下基础。能够描述软件堆栈的工作原理,建立I/O空间的概念。

  2. 实践教学:用REGISTER窗口观察CPU中各寄存器的 名称与长度,EFLAGS/FLAGS的位意义。 教学设计(1): • 首先介绍“结构”和3.1节中三种工作模式的概念。 • 以3.2节中的图3.1和图3.2为依据,介绍程序设计模型概念:32位寄存器、16位寄存器和8位寄存器。 • 以chap3-1.asm为例,启动PWB → 进入CodeView。点Windows → Register,打开Reg窗口,介绍8位寄存器、16位寄存器和32位寄存器及其引用方法。 • 上机时查看EFLAGS/FLAGS的方法:在PWB下打开帮助内容 → Assembly → Language Overview → Processor Flag Summary。

  3. 实践教学:用MEMORY 1窗口观察DS段中数据的存放方式。 教学设计(2): • 首先介绍实地址模式存储器的大小的概念。 • 以3.3节中的图3.6为依据,介绍字数据和双字数据在内存中的存放规律。 • 以chap3-2.asm为例,启动PWB → 进入CodeView。点Windows → Memory 1,打开Memory 1窗口,验证字数据和双字数据在内存中的存放规律。

  4. 4.介绍内存分段管理,逻辑地址、物理地址及其变换4.介绍内存分段管理,逻辑地址、物理地址及其变换 5.以chap3-2.asm为例,启动PWB → 进入CodeView。点Windows → Source 1,打开Source 1窗口,以Assembly方式显示,验证逻辑地址变换为物理地址的方法。 6.介绍3.4节中的段和偏移寄存器之间的隐含关系的概念和3.4节中的保护模式存储器寻址的概念。 7.课堂练习:练习题23。

  5. 教学设计(3): 1.首先介绍堆栈的两种实现方法和操作方式的概念。 2. 以3.6.1节中的图3.13和图3.14为依据,介绍硬件堆栈的工作过程。 3. 介绍3.6.2节中的软件堆栈的概念。 4. 以3.6.2节中的图3.15、图3.16和图3.17为依据,介绍软件堆栈的初始化、压栈操作和出栈操作的工作过程。

  6. 5. 以chap3-3.asm为例,启动PWB → 进入CodeView。点Windows → Register,设置为16位方式。点Windows → Memory 1,设置为SS∶0。练习16位数据压栈操作和出栈操作的工作过程。

  7. 6. 以chap3-4.asm为例,启动PWB → 进入CodeView。点Windows → Register,设置为32位方式。点Windows → Memory 1,设置为SS∶0。练习32位数据压栈操作和出栈操作的工作过程。 7. 介绍3.7节中的I/O口组织的概念。

  8. 第3章 IA-32 Intel 系列CPU的结构 CPU的结构指的是从汇编语言程序员的角度所能够感受到的系统属性,诸如寄存器结构、存储器访问技术、指令系统、指令系统所支持的数据类型、I/O技术等。

  9. 3.1 工作模式(operating mode) IA-32 Intel系列CPU支持3种工作模式: 保护模式(protected mode)、 实地址模式(real-address mode)、 系统管理模式(system management mode)。

  10. Windows操作系统环境下使用CPU的何种工作模式? 使用保护模式。 在这种模式下,全部的指令与结构特性都可以使用,处在保护模式下的Windows操作系统所使用的存储器模型是“flat”。

  11. 在上电(power-up)之后,32 位CPU首先进入何种工作模式? 通常,在上电(power-up)或者系统复位(reset)之后,IA-32 Intel系列CPU总是首先进入实地址模式,然后再切换到保护模式。

  12. 在实地址模式下,CPU仅支持与该模式有关的存储器模型,例如“tiny”、“small”……,但“flat” 存储器模型不能用。CPU仅能访问00000H~FFFFFH之间的内存区域。

  13. 3.2 程序设计模型(programming model) CPU所具有的程序可见寄存器的组合称之为程序设计模型。

  14. 32位寄存器: 通用寄存器: EAX、EBX、ECX、EDX、 ESP、EBP、EDI、ESI,共8个。 指令指针寄存器:EIP。 标志寄存器:EFLAGS。 “E”:Extensive,因此上述寄存器称为扩展寄存器。

  15. 哪些CPU能够寻址扩展寄存器? 80386以上的CPU。 段寄存器:CS、DS、ES、SS、FS、GS, 共6个,每个长度为16位。

  16. 16位寄存器: 通用寄存器:AX、BX、CX、DX、 SP、BP、DI、SI,共8个。 指令指针寄存器:IP。 标志寄存器:FLAGS。 

  17. 8位寄存器: AH、AL、BH、BL、CH、CL、DH、DL,共8个,如图3.2所示。

  18. 双字(Double Word)数据:32位长,如32 位寄存器的内容。 字(Word)数据:16位长,如16位寄存器的 内容。 字节(Byte)数据:8位长,如8位寄存器的 内容。

  19. 通用寄存器: 如下表所示。

  20. 寄存器 操 作 表3.1通用寄存器的隐含引用 EAX 偏移地址 AX 字乘,字除,字I/O AL 字节乘,字节除,字节I/O,换码,10进制算术 AH 字节乘,字节除 BP 寻址堆栈区(SS段),指向栈内任意单元 EBX 寻址数据区(DS段) BX 换码 ECX 在字符串和循环操作中用作计数器 CX 在字符串和循环操作中用作计数器 CL 在移位和循环操作中用作计数器 EDX 乘,除 DX 字乘,字除,间接I/O ESP 堆栈指针寻址堆栈区(SS段),指向栈顶 SP 堆栈指针寻址堆栈区(SS段),指向栈顶 ESI 指向DS段中数据的指针,指向源字符串的指针 SI 指向DS段中数据的指针,指向源字符串的指针 EDI 指向DS段中数据的指针,指向目的字符串的指针 DI 指向DS段中数据的指针,指向目的字符串的指针

  21. 指令指针EIP/IP(Instruction Pointer)寄存器的用途: ※ 工作于实地址模式下的时候,使用16位IP, ※ 工作于保护模式下的时候,使用32位的EIP。 ※ EIP/IP承担着指令寻址的功能,即 EIP/IP的内容指向将要执行的下一条指令所在存储单元的偏移地址,以便于CPU可以正确地从内存CS段取指令并执行指令。 ※ 指令指针由CPU的硬件更新。

  22. EIP/IP是控制指令(程序)流向的寄存器,下列5种情况影响着其内容的更新:EIP/IP是控制指令(程序)流向的寄存器,下列5种情况影响着其内容的更新: 1.计算机加电之后,CPU中执行复位(reset)功能的硬件会把reset向量打入IP(此时处于实地址模式下)。此后,CPU硬件就会从此单元取出第1条指令执行。这第1条指令往往是一条无条件转移指令JMP,转向系统初始化程序段去执行。 2.在顺序执行指令期间,CPU硬件会自动增量EIP/IP的内容,以便使其指向下条指令的偏移地址。

  23. 3. 在转移执行指令期间,转移类指令会更新EIP/IP的内容,使其指向转移目标地址,以便从转移目标处执行。 4. 过程调用的时候,指令CALL可以更新EIP/IP的内容,使其指向过程的入口地址,以便执行被调用的过程。过程执行完之后,返回地址(CALL指令的后续指令的地址)打入EIP/IP,以便接着从返回地址处继续执行。 5. 当发生中断请求的时候,CPU的中断管理硬件会把中断向量(中断服务程序的入口地址)打入IP,以便执行中断服务程序。中断服务程序执行完之后,断点(返回)地址打入IP,以便接着从断点处继续执行。

  24. 标志寄存器EFLAGS/FLAGS的功能: 用来指示CPU的状态,同时也可以控制它的操作。 当CPU工作于保护模式下的时候,使用EFLAGS;当CPU工作于实地址模式下的时候,使用FLAGS。图3.3示出了标志寄存器EFLAGS和FLAGS及其各个二进制位所代表的意义 。

  25. 状态标志: CF、PF、AF、ZF、SF、OF共6个, 这些状态标志位指示着CPU执行算术和逻辑指令操作结果的相应属性。

  26. 各个状态标志的功能如下: CF(Carry Flag):进位标志。 当执行算术指令操作结果的最高有效位输出了进位或借位时,CF为1。否则,CF为0。 该标志在多字节加法和减法中使用。该标志也可以指示无符号数算术操作的溢出状态。循环指令也可以通过把某个内存或寄存器中的位放入CF而隔离它。

  27. PF(Parity Flag):奇偶校验标志。 如果PF=1,说明结果的低8位中含有偶数个1。否则,PF=0。 该标志可以用来检查数据传送错误。该标志在现代程序设计中已很少使用,它是早期Intel CPU在数据通信环境中校验数据的一种手段。今天,奇偶校验常常由数据通信设备完成,不再需要由CPU完成。

  28. AF(Auxiliary Flag):辅助标志或半进位标志。 当使用BCD码进行算术操作的时候,如果AL寄存器的位3向高位输出了进位或借位,AF为1。否则,AF为0。 使用BCD码进行算术操作的指令DAA和DAS要测试此标志位。

  29. ZF(Zero Flag):零标志位。 当执行算术或逻辑指令操作的结果为0时,ZF为1。否则,ZF为0。 条件转移类指令常常需要测试此标志位的状态,以决定是否改变程序的流向。

  30. SF(Sign Flag):符号标志。 该标志位的状态与操作结果最高有效位的状态相同,即当操作结果最高有效位为1时,SF为1。否则,SF为0。 该标志位可以用来指出带符号整数(用补码表示)运算结果的正/负情况(最高有效位为0时,表示该数为正;最高有效位为1时,表示该数为负)。

  31. OF(Overflow Flag):溢出标志。 溢出标志在带符号整数进行加或减操作时可能出现。如果OF为1,说明产生了算术溢出。此种情况意味着有效数字已丢失了,因为计算结果的长度已超出了硬件的表示能力。如果结果为正数太大,或者结果为负数太小时,均会发生溢出。在这种情况下,可利用INTO指令产生一个内部中断来处理。

  32. 字符串操作控制标志:1个。 DF(Direction Flag):方向标志。 当DF为1时,字符串操作指令(MOVS、CMPS、SCAS、LODS、STOS)对DI和SI的内容执行自动减量操作,以便于字符串处理从高地址到低地址。当DF为0时,字符串操作指令对DI和SI的内容执行自动增量操作,以便于字符串处理从低地址到高地址。 STD指令可以置“1”DF,CLD指令可以置“0”DF。

  33. 系统控制标志:TF、IF共2个。 TF(Trap Flag):陷阱标志。 陷阱标志能够激活芯片上调试功能,以便对程序进行查错和改错。当TF为1时,会使CPU进入单步方式,以进行调试。当TF为0时,则禁止陷阱特性。 在单步方式下,CPU每执行完一条指令之后,就自动产生一个内中断。此时,中断服务程序会显示出CPU各寄存器的内容,程序员通过查看CPU各寄存器以及相关内存变量的内容,可判断出各条指令的执行结果是否正确,从而达到调试的目的。

  34. 在MASM6.1x中内嵌的CodeView中就有这样的功能。 没有指令能够对TF进行置1和清0操作。 置1的方法是:首先用PUSHF指令把(FLAGS)推入 堆栈,然后把栈上的TF置1,即执行 ([SP])OR 0100H 操作,然后用POPF指令再弹回FLAGS。 TF清0由中断服务程序负责,方法与置1类似,只是清0执行 ([SP])AND FEFFH 操作。

  35. IF(Interrupt-enable Flag):中断开放标志。 当IF为1时,允许CPU识别并响应可屏蔽的外部中断请求(从CPU的INTR引脚进入)。当IF为0时,禁止这些中断。 IF位的状态不影响非屏蔽外部中断和内中断。指令STI可以对IF进行置1操作,指令CLI可以对IF进行清除操作。

  36. 段寄存器: 段寄存器,16位长,共有6个,它们指定了6个当前可寻址的存储器段。 8086 CPU可以使用 代码段寄存器CS(Code Segment)、 数据段寄存器DS(Data Segment)、 堆栈段寄存器SS(Stack Segment)、 附加段寄存器ES(Extra Segment)4个段寄存器。 80386以上的CPU还可以使用另外2个附加段寄存器 FS和GS。

  37. 代码段CS: 代码段是一个存储器区域,这里保存CPU所使用的程序代码。 全部指令都从当前代码段中取出,偏移量由指令指针EIP/IP提供。

  38. 实地址模式下,CS定义一个64KB存储器段的起点,即CS的内容指向代码段的起始地址,也称代码段的基地址;实地址模式下,CS定义一个64KB存储器段的起点,即CS的内容指向代码段的起始地址,也称代码段的基地址; 保护模式下,CS的内容是一个指针,称之为选择字(selector)。选择字可以选择一个描述代码段起始地址和长度的描述符(descriptor)。 实地址模式下,代码段限制为64KB长;保护模式下,代码段可以达到4GB长。

  39. 数据段DS: 数据段是包含指令使用的大部分数据的存储区域。其段内偏移地址按指令的寻址方式的指定,再经计算后得到。 实地址模式下,数据段限制为64KB长; 保护模式下时,数据段可以达到4GB长。

  40. 大部分操作数通常是从当前数据段取出,这取决于偏移地址的来源所涉及到的指针。大部分操作数通常是从当前数据段取出,这取决于偏移地址的来源所涉及到的指针。 对于操作数寻址来说,DS是默认段。如果需要从ES、FS、GS中寻址操作数时,可以在指令前面加上跨段前缀。

  41. 堆栈段SS: 堆栈段寄存器定义堆栈用的存储区。 其段内偏移地址由ESP/SP、EBP/BP提供。 使用ESP/SP只能寻址栈顶数据,使用EBP/BP可以寻址堆栈段内任意位置上的数据。 在过程调用中,常常利用堆栈传递参数。

  42. 附加段ES: 附加段是为字符串操作指令存放目的操作数而附加的一个数据段,也可以用来存放一般的操作数。

  43. FS和GS: 这两个段寄存器与DS、ES一样,可以用来确定数据段,以便把数据段的数量扩展到4个。 因此,CPU可以访问4种不同类型的数据结构。FS和GS仅在80386以上的CPU中才能使用。

  44. 实践教学:用MEMORY 1窗口观察DS段中数据的存放方式。 教学设计(2): • 首先介绍实地址模式存储器的大小的概念。 • 以3.3节中的图3.6为依据,介绍字数据和双字数据在内存中的存放规律。 • 以chap3-2.asm为例,启动PWB → 进入CodeView。点Windows → Memory 1,打开Memory 1窗口,验证字数据和双字数据在内存中的存放规律。

  45. 4.介绍内存分段管理,逻辑地址、物理地址及其变换4.介绍内存分段管理,逻辑地址、物理地址及其变换 5.以chap3-2.asm为例,启动PWB → 进入CodeView。点Windows → Source 1,打开Source 1窗口,以Assembly方式显示,验证逻辑地址变换为物理地址的方法。 6.介绍3.4节中的段和偏移寄存器之间的隐含关系的概念和3.4节中的保护模式存储器寻址的概念。 7.课堂练习:练习题23。

  46. 3.3 实地址模式存储器寻址memory addressing in real address mode 实地址模式存储器寻址操作方式只允许CPU寻址第一个1MB的存储器空间。 其物理地址范围是:00000H~FFFFFH。

  47. 3.3.1 实地址模式存储器组织(memory organization in real address mode) 字数据的高位字节总是存放在高地址存储器单元中, 字数据的低位字节总是存放在低地址存储器单元中, 如图3.6所示。

  48. 3.3.2 内存的分段管理技术(segment management technology of memory) ※ 在实地址模式下,段基地址的低4位全为0。 ※ 在任意时刻,程序可以访问如下四个段的 内容: 当前代码段CS、当前数据段DS、 当前堆栈段SS、当前附加段ES。 ※ 每个段都会由操作系统指派一个基地址, 基地址是该段在内存空间的起始单元的地址;

More Related