汇编语言第2章_第1页
汇编语言第2章_第2页
汇编语言第2章_第3页
汇编语言第2章_第4页
汇编语言第2章_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言程序设计讲授人:杜春来第2章计算机组织讲授人:杜春来本章结构2.1.计算机系统概述2.2.IA-32CPU功能结构2.3.寄存器组介绍2.4.存储器管理2.5.外设2.1.计算机系统概述系统总线CPU运算器控制器寄存器主存储器辅存储器I/O接口输入设备输出储器计算机的系统组成简单逻辑示意图本章结构2.1.计算机系统概述2.2.IA-32CPU功能结构2.3.寄存器组介绍2.4.存储器管理2.5.外设2.2.IA-32CPU功能结构示意图本节课需要讲解的内容2.2.CPU功能结构:IA-32CPU的操作模式从硬件上实现了特权级的管理功能0~3(数值越小,表示的特权越高)操作系统其他程序-1级操作系统核心程序-0级中间软件-2级应用程序-3级相互访问能力负责存储管理、保存和存取控制等部分的核心程序专门的应用子系统,如数据库管理程序、办公自动化系统、软件开发环境功能2.3.寄存器组介绍2.3.1.通用寄存器(部分回顾)2.3.2.指令指针寄存器2.3.3.段寄存器2.3.4.标志寄存器2.3.5.系统寄存器2.3.通用寄存器(回顾)寄存器是CPU内部的高速存储单元,数量有限它们为处理器提供各种操作所需要的数据或地址等信息汇编语言程序采用它们各自的符号名16位Intel8086/80286CPU中有AX BX CX DXSI DI BP SP32位80386/80486/Pentium系列CPU中有EAX EBX ECX EDXESI EDI EBP ESP2.3.1数据寄存器和变址寄存器数据寄存器EAX——累器加,使用频度最高,用于算术、逻辑运算和与外设的信息交换;EBX——基址寄存器,常用做存放存储器地址;ECX——计数器,在循环指令和串操作指令中用作隐含计数器(非常重要,以后可以慢慢体会);EDX——I/O端口的指针,常用于存放外设端口地址;DX也用来存放双字长数据的高16位变址寄存器:常用于存储器寻址时提供地址ESI是源变址寄存器,串操作的源操作数指针EDI是目的变址寄存器,串操作的目的操作数指针2.3.2.指针寄存器指令指针寄存器:(和段寄存器CS联合,确定下一条指令的物理地址)EIP堆栈指针寄存器:(数据的传递重要渠道、程序的返回地址)ESP:堆栈栈顶的偏移地址EBP:堆栈的基址黑客、病毒等攻击者梦寐以求的终极目标黑客、病毒等攻击者特权提升的重要手段2.3.3.段寄存器段寄存器指示段基址,各种寻址方式确定段内偏移地址每个段寄存器用来确定一个段的起始地址依据此原则,汇编语言中存在三种类型的段代码段:CS(其指定的段称为指示当前代码段,与指令指针EIP联合,指示下一条要执行的指令)堆栈段(主存中的一个特殊区域,采用先进后出的操作方式)SS(与EBP、ESP、BP、SP联合来存取堆栈中的指令)数据段:DS

(除访问堆栈外的其他存储器数据所使用的默认段寄存器)ES(某些串操作指令将ES作为目的操作数的段寄存器)FS(与GS一般用作数据段寄存器)GS(同上)注意重点掌握代码段CS、堆栈段SS数据段DS、ESCS/SS/ES/FS/GS也都可以作为访问存储器数据时所引用的段寄存器,此时需要显示的在指令中指定,使得他们成为段超越前缀。例如想引用代码段中的数据,CS:

8000H,同样显示的用SS:013FH堆栈段超越前缀引用堆栈中的数据,诸如此类:ES:0876H,FS:7777H,GS:2134H2.3.4.标志寄存器重点掌握CF:进位标志ZF:零标志PF:符号标志DF:方向控制OF:溢出标志IF:中断允许TF:单步标志NT:任务嵌套IOPL:I/O特权VM:虚拟8086状态标志系统标志控制标志2.3.5.系统寄存器2.3.5.1.内存管理寄存器2.3.5.2.控制寄存器(CR0~CR3)2.3.5.3.调试寄存器(DR0~DR7)2.3.5.4.测试寄存器(TR6~TR7)这些寄存器对于用户应用程序是透明不可见的,只有在优先级为0的层次上运行的程序才可以改变这些寄存器注意2.3.5.1内存管理寄存器用于指示保护模式下系统中特殊段的地址信息的寄存器,一共有4个:全局描述符表寄存器GDTR

中断描述符表寄存器IDTR局部描述符表寄存器LDTR任务状态寄存器TR用于指定内存分段管理所用系统表的基地址(处理器为这些寄存器的加载和保存提供了特定的指令)GDTR、LDTR、IDTR和TR都是段基址寄存器,这些段中含有分段机制的重要信息表。GDTR、IDTR和LDTR用于寻址存放描述符表的段。TR用于寻址一个特殊的任务状态段(TaskStateSegment,TSS)。TSS中包含着当前执行任务的重要信息。

全局描述符表寄存器GDTR在这个寄存器中存放一个伪描述符,用于定于全局描述符号表GDT所在的系统段的信息,该寄存器48bit,高32位表示GDT段的基地址,低16位表示以字节为单位的GDT段界限全局描述符表寄存器GDTRGDT描述附表0164732位线性基地址16位段界限15指令LGDT和SGDT分别用于加载和保存GDTR寄存器的内容

中断描述符表寄存器IDTR在这个寄存器中存放一个伪描述符,用于定于中断描述符号表IDT所在的系统段的信息,该寄存器48bit,高32位表示IDT段的基地址,低16位表示以字节为单位的IDT段界限IDT描述附表0164732位线性基地址16位段界限15指令LIDT和SIDT分别用于加载和保存IDTR寄存器的内容

中断描述符表寄存器IDTR局部描述符表寄存器LDTR在这个寄存器中存放一局部描述符表LDT的信息,该寄存器48bit,高32位表示LDT段的基地址,低16位表示以字节为单位的LDT段界限包含LDT表的段必须在GDT表中有一个段描述符项。1。当使用LLDT指令把含有LDT表段的选择符加载进LDTR时,LDT段描述符的段基地址、段限长度以及描述符属性会被自动地加载到LDTR中。2。当进行任务切换时,处理器会把新任务LDT的段选择符和段描述符自动地加载进LDTR中任务状态寄存器TRTR寄存器用于存放当前任务TSS段的16位段选择符、32位基地址、16位段长度和描述符属性值。它引用GDT表中的一个TSS(任务状态段)类型的描述符。指令LTR和STR分别用于加载和保存TR寄存器的段选择符部分。

当使用LTR指令把选择符加载进任务寄存器时,TSS描述符中的段基地址、段限长度以及描述符属性会被自动加载到任务寄存器中。

当执行任务切换时,处理器会把新任务的TSS的段选择符和段描述符自动加载进任务寄存器TR中。2.3.5.系统寄存器2.3.5.1.内存管理寄存器2.3.5.2.控制寄存器(CR0~CR3)2.3.5.3.调试寄存器(DR0~DR7)2.3.5.4.测试寄存器(TR6~TR7)2.3.5.2.控制寄存器(CR0~CR3)控制寄存器(CR0~CR3)用于控制和确定处理器的操作模式以及当前执行任务的特性。CR0中含有控制处理器操作模式和状态的系统控制标志;CR1保留不用;CR2含有导致页错误的线性地址;CR3中含有页目录表物理内存基地址,因此该寄存器也被称为页目录基地址寄存器PDBR(DirectoryBaseaddressRegister)CR0中协处理器控制位

CR0的4个位:扩展类型位ET、任务切换位TS、仿真位EM和数学存在位MP用于控制80x86浮点(数学)协处理器的操作。CR0中保护控制位

PE:CR0的位0是启用保护(ProtectionEnable)标志。PG:CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址。WP:对于Intel80486或以上的CPU,CR0的位16是写保护(WriteProctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向用户级只读页面执行写操作;当该位复位时则反之。NE:对于Intel80486或以上的CPU,CR0的位5是协处理器错误(NumericError)标志。当设置该标志时,就启用了x87协处理器错误的内部报告机制;

CR2和CR3

CR2和CR3用于分页机制。CR3含有存放页目录表页面的物理地址,因此CR3也被称为PDBR(页分配基址寄存器)因为页目录表页面是页对齐的,所以该寄存器只有高20位是有效的。而低12位保留供更高级处理器使用,因此在往CR3中加载一个新值时低12位必须设置为0。每页4KBCR2用于出现页异常时报告出错信息。在报告页异常时,处理器会把引起异常的线性地址存放在CR2中。因此操作系统中的页异常处理程序可以通过检查CR2的内容来确定线性地址空间中哪一个页面引发了异常。2.3.5.系统寄存器2.3.5.1.内存管理寄存器2.3.5.2.控制寄存器(CR0~CR3)2.3.5.3.调试寄存器(DR0~DR7)2.3.5.4.测试寄存器(TR6~TR7)2.3.5.3.调试寄存器(DR0~DR7)CPU设置了8个32位调试寄存器,为程序调试提供了硬件支持。0~3为线性断点寄存器,可保存4个断点地址。DR6用于保存断点状态。DR7用于控制断点设置。断点状态Intel保留Intel保留线性断点地址2线性断点地址1线性断点地址0断点状态DR5DR4DR3DR2DR1DR0DR6线性断点地址3DR7调试寄存器的使用总体来说分为如下几步:1.把欲监视的地址放入Dr0~Dr3中的一个寄存器2.在Dr7种设置相应的控制位,使得Dr0~Dr3存放的监视地址生效3.继续运行程序,请大家记住一个规律:凡是需要和系统内核打交道的数据结构,一般都需要进行4字节对齐。C/C++中,编译器会自动帮你设置好对齐,而在ASM中,数据的内存布局都是由程序员决定的,所以,此处要特别小心。否则,最容易出现的结果就是:整个程序逻辑、编码都正确,可是就是出不来正确的结果。

2.3.5.1.内存管理寄存器2.3.5.2.控制寄存器(CR0~CR3)2.3.5.3.调试寄存器(DR0~DR7)2.3.5.4.测试寄存器(TR6~TR7)2.3.5.4.测试寄存器(TR6~TR7)

32位测试寄存器用于控制对分页单元中转换后备缓冲器TLB的测试。TLB中存放常用的页地址。TR6存放TLB的标签,以就是线性地址。TR7存放TLB的物理地址。本章结构2.1.计算机系统概述2.2.IA-32CPU功能结构2.3.寄存器组介绍2.4.存储器管理2.5.外设2.4.存储器管理2.4.1基本认识

2.4.2内容管理模型

物理内存在程序中是不能直接使用的,需要通过一定的内存管理机制(内存模式)来访问2.4.1基本认识寄存器与存储器的比较:寄存器存储器

在CPU内部在CPU外部访问速度快访问速度慢容量小,成本高容量大,成本低用名字表示用地址表示没有地址地址可用各种方式形成存储单元的地址和内容:

存储器以字节(8bit)为编程单位

每个字节单元都有唯一的地址编码

地址用无符号整数来表示(编程用十六进制表示)

一个字要占用相邻的两个字节

低位字节存入低地址,高位字节存入高地址

字单元地址用它的低地址来表示

机器以偶地址访问(读/写)存储器存储例子D7D0字节D15D0字D31D0双字D7D000006H78H00005H56H00004H12H00003H34H00002H00001H00000H低地址00002H“字”单元的内容为:[0002H]=1234H00002H“双字”单元的内容为:[0002H]=78561234H同一个地址既可以看作字节单元的地址,也可以看作字单元的地址,还可以看作双字单元的地址2.4.存储器管理2.4.1基本认识2.4.2内存管理模型

物理内存在程序中是不能直接使用的,需要通过一定的内存管理机制(内存模式)来访问,称为内存管理模型2.4.2内存管理模型(引子)逻辑地址?物理地址?D7D024f06H78H24f05H56H24f04H12H24f03H34H24f02H24f01H24f00H首先需要搞清的问题逻辑地址,很easy物理地址,大点的程序,你编编看!!!然后试试用两种地址编程00000H00001H00002H00003H???逻辑地址空间物理地址空间其实:简单说就是解决逻辑地址如何映射到物理的问题2.4.2.内存管理模型

2.4.2.1.实地址模型(实模型)

2.4.2.2.保护模式下的分段管理模型

2.4.2.3.分页模型

2.4.2.4.平展模型2.4.2.5.段页模型2.4.2.1.实地址模型(实模型)20根地址线可以访问220=1M的地址空间寄存器是16bit最大表达216=64K的地址空间如何表达这个1M的地址空间解决方法用一个寄存器表示某段在1M空间内的起始地址(段地址),用另一个寄存器表示表示段内某单元相对本段起始地址的偏移地址这样将1M空间分成许多“段”将一个数据的地址表示为:段地址:偏移地址实模式存储器寻址

16位段地址

16位偏移地址

0000+

20位物理地址例:(DS)=2100H,(BX)=0500H(PA)=21000H+0500H=21500H段寄存器段偏移地址偏移4bit=X16问题当堂思考:为什么左移4位,而不是3位或者5位、6位?答案:左移4位=20bit从中可以看到并不是什么地址都可以做段地址:段(基)地址:偏移地址

用16位寄存器表示段的起始地址(xxxxxH),并不是任意一个单元的地址都能作段的起始地址,只有那些形式为xxxx0H的地址才能作段的起始地址,该起始地址存入16位寄存器时,将0省略即可。偏移地址为16位,可直接放入16位寄存器。机器字长16位:仅能表示地址范围0000H~FFFFH(64KB)

故此每段最大限制为64K段起始地址:段不能起始于任意地址必须从小段首地址开始1M空间的分段问题1MB空间最多能分成多少个段

每隔16个存储单元就可以开始一个段,所以1MB最多可以有:220÷16=216=64K个段1MB空间最少能分成多少个段?每隔64K个存储单元开始一个段,所以1MB最少可以有:220÷216=16

个段关于多个逻辑地址映射到一个物理地址多个逻辑地址可以对应同一个物理地址逻辑地址 1460:100、1380:F00物理地址 14700H14700H14600H+100H14700H13800H+F00H14700H段地址左移4位加上偏移地址得到物理地址实模式下逻辑段可以重叠或分开各个逻辑段独立各个逻辑段重叠2.4.2.内存管理模型

2.4.2.1.实地址模型(实模型)

2.4.2.2.保护模式下的分段管理模型

2.4.2.3.分页模型

2.4.2.4.平展模型2.4.2.5.段页模型2.4.2.2.保护模式下的分段管理模型除了实模式外,为什么还需要其他内存管理模式?看一下古老的8086CPU对应的主流操作系统是什么DOS特点是什么?单进程,形象解释就是“一根筋”,同一个事件段只能干一件事情CPU中就仅仅有一个“孤独”的“人”在运行自从window出现,包含window3.1,windows3.2,window95,~windowsXP,windows7特点是什么?多进程,多线程,形象就是实现了“一心二用”这样,在CPU中宏观看有一群“人”在运行多个进程在运行,按照实模式我们看看发生什么现象结论是:必须将每个进程的空间分隔开来,形成其独立的线性逻辑地址空间00000H用户100001H…00010H00001H…00000H用户200010H00020H…00010H用户300011H…00050H由实模式可以知道:逻辑地址相同,则将映射到相同的物理地址,这样就要要求用户2的程序部分与用户1一致,同样,用户3的部分指令必须与用户2的重叠空间一样你认为这个可能吗?3人这样协同做的概率极小保护模式下(即脱离实模式)在这种模型下,将这个线性地址空间分成独立的内存空间,这一个一个独立的内存空间我们称为“段”数据、代码、堆栈分别处于不同的段中依然采用“段基址:偏移地址”在保护模式下,段基址和偏移地址都是32位的这样一个段最大可以寻址的地址空间为232=4G一个很显然的问题我们的段依然是16位的,怎么表达?和实模式一样,将段基址的值左移16位,可不可以?采用“间接存储”的方式,即16位段寄存器中不直接存这个段基址,而是存储一个能找到这个段基址的信息我们计算一下:如果段基址左移16再与32位偏移地址相加,最小需要分配的段大小。

216=64K段基址16个032位偏移地址+32位物理地址段管理模式下逻辑地址到物理地址转换逻辑地址段寄存器(16位)偏移地址(32位)段选择器全局描述符表(GDT)线性地址空间取32位段基地址索引描述符1描述符2描述符m描述符n+32位线性地址段1段2

段32.4.2.内存管理模型

2.4.2.1.实地址模型(实模型)

2.4.2.2.保护模式下的分段管理模型

2.4.2.3.分页模型

2.4.2.4.平展模型2.4.2.5.段页模型2.4.2.3.分页模型保护下的分段模式,都是将各个独立的用户逻辑空间转化成统一的32位线性地址空间在运行一个单独程序的时候,如果将程序一次性调入内存困难,即内存空间小于用户的程序逻辑地址空间怎么办?将用户的程序进行分割,分割成小片段,与这些小片段相对应,调度管理将这些小片段依次调入内存这样对用户程序的调度转换为对这些小片段的的管理这样内存的管理单位就是这些小片段的大小经过实践和理论分析,每一个片段大小为4K最合适,所以4K是最小的分配单位,这样一个8K的程序将占用2个页面,9K的程序占用3个页面(浪费了3K的内存空间,没有办法,惋惜惋惜吧)分页模式下逻辑地址到物理地址的转换页物理地址物理地址空间线性地址页目录页表偏移量入口页目录页表入口+2.4.2.内存管理模型

2.4.2.1.实地址模型(实模型)

2.4.2.2.保护模式下的分段管理模型

2.4.2.3.分页模型

2.4.2.4.平展模型2.4.2.5.段页模型2.4.2.4.平展模型平展存储模型是分段存储模型的一种特例所有的段都有相同的段基地址(基地址为0),都重合于同一个线性地址空间32微处理器上运行的应用程序,广泛采用平展存储模型。程序员看来,整个内存空间是一个单一、连续的线性地址空间。代码、数据、堆栈都包含在这个地址空间中2.4.2.内存管理模型

2.4.2.1.实地址模型(实模型)

2.4.2.2.保护模式下的分段管理模型

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论