汇编与接口复习考试.docx
- 文档编号:30687829
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:16
- 大小:35.80KB
汇编与接口复习考试.docx
《汇编与接口复习考试.docx》由会员分享,可在线阅读,更多相关《汇编与接口复习考试.docx(16页珍藏版)》请在冰豆网上搜索。
汇编与接口复习考试
汇编与接口考试
●成绩计算:
平时40分[考勤问答(5分)+平时作业(15分)+大作业(20分)]+期末60分=100分
●期末考试:
⏹考试形式:
开卷笔试(可使用实验室或自己的电脑)
⏹考试时间:
2015年6月26日(周五)下午1:
30~3:
30
⏹考试地点:
实验中心B401
⏹考试题型:
填空(15题,每题2分,共30分)、问答(6题,每题5分,共30分)、编程(4题,每题10分,共40分)
复习重点与考试要求
要求等级:
了解、熟悉、掌握/会。
1CPU
1)要求
了解计算机的组成和功能,了解CPU的概念、功能和组成,了解CISC和RISC的概念和特点(80486?
)。
了解x86和x64的发展过程,熟悉8086和80386的结构,掌握8086和80386的寄存器。
了解Intel主要CPU的总线宽度,熟悉8086的地址空间分布,掌握8086的地址计算方法和常用寻址方式。
熟悉x86的常用指令(对应的英文原文和含义)。
2)重点
●寄存器:
8086的通用寄存器、段寄存器和专用寄存器的名称和功用。
80386的扩展。
●标志寄存器:
常用标志位的名称和功用。
●系统寄存器:
80386新增加的控制寄存器(CR0~CR3)和系统指针寄存器(GDTR/LDTR/IDTR/TR)。
●地址计算:
16位实模式下的地址计算方法(地址总线宽度、寻址空间,分段内存管理、段的大小、物理地址的生成方法)。
●寻址方式:
立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、基址相对寻址、直接变址寻址、基址变址寻址。
80386的扩展。
2汇编
1)要求
了解汇编程序概念和功能。
了解MASM和NASM的概念、特点和主要区别(为什么选NASM?
)。
掌握NASM的数值和字符串常数的表示方法。
掌握常用的NASM伪指令,熟悉常用的NASM汇编程序指令,掌握宏定义和重复宏。
掌握操作符ORG与特殊记号$和$$。
掌握常用BIOS中断及其调用方法。
了解可执行文件格式,掌握编写和生成COM文件的方法,会编写简单的汇编程序。
了解Debug软件的使用方法。
2)重点
●伪指令:
Dx、RESx、EQU、TIMES。
●汇编指令:
SECTION、EXTERN、GLOBAL。
●宏:
宏定义%macro、重复宏%rep。
●操作符ORG、特殊记号$和$$
●常用BIOS中断:
显示中端10h的功能13h/0Eh/06h、键盘中端16h的功能00h、磁盘中断13h的功能00h/02h。
●中断调用方法:
movah,功能号、……;设置各种入口参数、int中断号。
●COM文件:
DOS的二进制裸格式,不分段,会被装载到当前段的100h处(需使用org100h指令,DS=SS=CS、SP=100h-4),文件大小必须≤64KB-256B。
文件的扩展名必须为com。
●例子:
Hello
●汇编语言程序的编写、编译和测试:
⏹用NotePad++编写汇编源代码(*.asm);
⏹用NASM将源程序编译成COM文件(或BIN)文件;
⏹COM文件可直接在WinXP的命令行下运行测试;
⏹也可利用WinImage将COM文件(和BIN文件)复制到FAT软盘映像文件中,利用Bochs或VMware虚拟机,在DOS或MyOS命令行中运行测试。
3指令
1)要求
掌握汇编语句的格式,熟悉CPU指令的分类,掌握常用CPU指令的格式和操作。
2)重点
●数据传送指令:
MOV、MOVZX、PUSH/POP、PUSHA[D]/POPA[D]、IN/OUT。
●算术指令:
ADD/SUB/MUL/DIV、INC/DEC。
●逻辑运算指令:
AND、OR、NOT、XOR、TEST。
●移位指令:
SHL/SHR。
●串处理指令:
MOVS、CMPS、SCAS、LODS/STOS;REP、REPE/Z、REPNE/Z。
●转移指令:
JMP[SHORT/NEAR/FAR]、JZ/E、JNZ/E、JB/JL、JAE/JGE、JA/JG、JCXZ。
●循环指令:
LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE。
●子程序指令:
CALL/RET、CALLFAR/RETF。
●中断指令:
INT/IRET[D]。
●标志处理指令:
STD/CLD、STI/CLI。
●其他指令:
NOP、HLT。
4中断处理与计时器
1)要求
了解PC机(实模式下的)中断的分类、IVT、CPU响应和IRET的功能,掌握中断控制器8259A的初始化和操作方法,了解计时器8253的组成、输入频率、初始节拍和工作过程,掌握通过8253的I/O端口设置计时器时钟中断频率的方法,会编写初始化8259A和设置其起始中断号、屏蔽中断请求和发送EOI的汇编代码,会编写设置计时器8253的时钟中断频率的汇编代码。
2)重点
●分类
⏹屏蔽(x86处理器有两条外部中断请求线):
NMI(NonMaskableInterrupt,不可屏蔽中断)和INTR(InterruptRequest,中断请求[可屏蔽中断]),不可屏蔽中断的优先级要高于可屏蔽中断的。
⏹软硬:
硬件中断——由两个级联的8259A芯片所代理的可屏蔽外设中断、软件中断——BIOS中断或由操作系统定义的系统服务中断(用inti指令调用)。
●IVT:
x86计算机在启动时会自动进入实模式状态,并由主板上的系统BIOS初始化8259A的各中断线的类型(0号为时钟中断),同时在内存的低位区(地址范围为0~1023[3FFH],1KB)创建含256个中断向量(存放中断处理程序的入口地址)的表IVT(InterruptVectorTable,中断向量表),其中每个中断向量[地址]占4个字节,格式为:
16位段值:
16位偏移值,字节序为:
IP、CS。
●CPU响应:
在实模式下,每当中断发生时,CPU都会中止当前程序的运行,并先后将寄存器FLAGS、CS和IP的当前值压入当前程序栈,接着清除IF标志(IF=0以禁止中断),最后转换程序控制到IVT中的中断号i所对应(4*i处)的向量所指定的中断处理程序的入口位置。
●中断返回指令:
IRET=POPIP、POPCS、POPF
●可编程中断控制器8259A
⏹PC机中有两个级联的8259A
⏹每个8259A有8根中断请求线IR0~IR7,从8259A被级联到主8259A的第3根中断请求线IR2上。
⏹每个8259A都有两个I/O端口,主8259A所对应的端口地址为20h和21h,从8259A的为A0h和A1h。
程序员可通过in/out指令来读写这些端口,从而操作这两个中断控制器。
⏹初始化:
8259A的初始化由有严格顺序的4步组成
1.往端口20h(主片)[或A0h(从片)]写入ICW1
2.往端口21h(主片)[或A1h(从片)]写入ICW2(设置起始中断向量号)
3.往端口21h(主片)[或A1h(从片)]写入ICW3
4.往端口21h(主片)[或A1h(从片)]写入ICW4
⏹操作:
在初始化8259A后,可在任何时候,以任何顺序向8259A发送OCW(OperationCommandWord,操作控制字)
◆OCW1(21h或A1h端口)——屏蔽中断请求
◆OCW2(20h或A0h端口)——发送EOI(EndofInterrupt,中断结束)
◆OCW3(20h或A0h端口)——(=10或11)设置下一个读端口的动作将要读取IRR(未处理中断)或ISR(正在处理的中断)寄存器的内容。
●计时器/可编程时钟8253
⏹组成:
由石英晶体振荡器、计数器和寄存器三部分组成
⏹输入频率:
1.19MHz(1,193,181.8181Hz)
⏹工作过程:
计时器在启动时,将保持寄存器中的值复制到计时器中。
在晶振每来一个脉冲时,计时器的值减1。
当计时器的值减至0时,引发一个中断。
然后,寄存器将自动把其中的值复制到计时器中,再重新开始计数。
这样会产生周期性的中断,称为时钟节拍
⏹计数器:
8253中有3个16位计数器,作用各不相同。
◆计数器0——输出到IRQ0,产生(18.2Hz的)周期性时钟中断
◆计数器1——产生输出间隔为15μs的脉冲,用于DMA刷新
◆计数器2——输出不同频率的方波,经75477电流驱动器放大后,推动扬声器发出不同频率的声音
⏹初始时钟中断频率=1193182/65535≈18.2(为时钟的最低频率值)
⏹I/O端口:
8253有4个I/O端口——40h(计数器0)、41h(计数器1)、42h(计数器2)、43h(控制字寄存器)。
不能直接写计数器端口,须先向控制字寄存器写入8位的控制字来确定8253的工作方式(mode)和选择计数器
⏹设置计时器的时钟中断频率:
对应于8253中计数器0的工作方式2,对应的控制字值为34h。
通过修改8253中计数器0的值(=1193182/n,每秒n次中断),可设置自己的计时器中断的频率(为n)
5内存管理与保护模式
1)要求
掌握实模式与保护模式的主要特点和区别,掌握逻辑地址、线性地址和物理地址的区别及映射方法。
掌握分段和分页与内存保护和虚拟内存管理的关系、特权的分级与分类、特权级与访问控制及代码转移之间的关系。
掌握段选择符、(段)描述符、GDT和LDT的概念、大小、结构和功用。
掌握IA-32所采用的主要内存管理方法(段页式)、基本页面的大小(4KB)、页表的实现方式(二级页表:
一级=页目录、二级=页表)。
掌握进入保护模式与启动分页机制的主要步骤和实现方法。
会编写定义GDT/LDT、段选择符、页目录和诸页表,进入保护模式与启动分页机制的汇编代码。
会编写获取并显示内存信息的汇编代码。
2)重点
●实模式与保护模式
⏹实模式
◆1978年推出的16位处理器8086,采用分段内存管理,20位物理地址=16位段寄存器值*16(或左移4位)+16位偏移量,寻址空间为(220=)1MB,最大段长为(216=)64KB
◆因为只能生成和访问真实的物理内存地址,所以被称为实地址模式(real-addressmode),简称为实模式(realmode)
◆实模式下的分段技术,没有提供任何内存保护功能,无特权分级、也不能阻止内存的越界访问
⏹保护模式
◆1982年推出的16位处理器80286,引入(分段式的)内存保护机制,称之为保护模式(protectedmode)。
寻址空间为(224=)16MB,最大段长为(216=)64KB或(216+8=224=)16MB,只能从实模式进入保护模式,而不能从保护模式返回实模式
◆1985年推出的32位处理器80386,其保护模式支持32位的地址空间,寻址空间达到(232=)4GB。
引入(基于分段的)分页机制,采用段页式内存管理方法。
其中,分段是必须的,分页则是可选的。
分段管理提供内存保护功能,分页机制支持虚拟内存管理
◆优点:
保护模式不但增大了可访问的地址空间(1MB-->16MB-->4GB[-->16ZB]),而且提供了大量(分段)内存保护机制。
如区分4个特权级(高/内核0~3低/用户)和3种特权级类型(运行程序的CPL、访问段的DPL、代码转移的RPL)、限制对数据的访问、进行段的越界检查、控制代码转移(包括过程调用CALL、程序切换JMP和中断处理INT)
●特权级
⏹4个特权级别:
在IA32处理器的分段机制中,采用的是环保护方式(内层的级别高,外层的级别低),有0~3共4个特权级(PrivilegeLevel),数字越小级别越高。
特权级0用于操作系统、特权级3用于用户进程
⏹三种特权级类型:
处理器通过识别CPL、DPL和RPL这三种特权级,来进行特权级检验,从而实现分段内存的保护功能
◆CPL(CurrentPrivilegeLevel,当前特权级)——为当前执行的程序或任务的特权级,存储在段寄存器CS和SS的低2位中,也叫寄存器特权级。
◆DPL(DescriptorPrivilegeLevel,描述符特权级)——为段或门的特权级,存储在段或门描述符的DPL字段中,用于对目标代码和数据的访问控制,也叫目标特权级。
◆RPL(RequestedPrivilegeLevel,请求特权级)——为取代(override)特权级,存储在指向目标代码段的段/门选择符的低2位中,也叫选择符特权级,用于控制过程调用(CALL)、程序跳转(JMP)和中断处理(INT)。
⏹访问控制
◆只有CPL≤DPL时,当前的程序才有权访问对应的段
◆只有RPL≤DPL时,才允许代码转移
⏹特权指令:
仅当CPL为0时才能执行的CPU指令,常用特权0级系统指令:
LGDT/SGDT(装载/保存GDT寄存器)、LLDT/SLDT(装载/保存LDT寄存器)、LIDT/SIDT(装载/保存IDT寄存器)、LTR/STR(装载/保存任务寄存器)、MOV控制寄存器(读写控制寄存器C0和C3)
●一致性:
为进一步控制代码转移和数据访问,在段描述符中专门引入了一个一致性控制位C(Conforming,一致/符合/顺应),位于段描述符类型字段的第3位
⏹所有的数据段总是非一致的,不允许特权级更低的代码段访问
⏹一致代码段允许从特权级更低的代码转入(并以转入前的原特权级继续运行),而非一致代码段则不允许
⏹不论是一致还是非一致(nonconforming)的代码段,都不允许(通过CALL和JMP指令)从高特权级转移到低特权级
⏹一般将(高特权级的)系统服务和实用程序等放入一致代码段,供(低特权级的)用户程序访问。
而将不能被特权级更低的程序和过程访问的系统实用程序放入非一致代码段
●分段与分页:
保护模式下,分段用于段的内存保护(包括特权级检验和越界检查),分页则用于虚拟内存管理(包括页面的寻址和在主辅存间的交换)
⏹分段:
分段将处理器可寻址的内存空间(称为线性地址空间)划分为较小的受保护的地址空间(称为段),段可用于容纳程序的代码、数据和堆栈,或系统的数据结构(如GDT、LDT或TSS)。
可以为每个运行的程序指派各自的段集(LDT)。
分段机制还允许将段分类,从而可限制在某个特定段类上能够执行的操作
◆在保护模式下,内存使用线性地址空间,如果不分页,则线性地址与物理地址是一致的
◆分段内存空间使用逻辑地址:
逻辑地址=段选择符:
偏移量,CPU通过段选择符(寄存器)获取(指定描述符表的指定偏移量处的)段描述符(在装入段选择符时已被同步装入段寄存器的影子结构中),并从中得到段的基址和界限,若偏移量≤界限,则:
段基址+偏移量=>线性地址,即:
◆段选择符(segmentselector)=保护模式下的16位段寄存器,内容是段描述符在描述符表中的偏移地址,由于(段)描述符为64位(8字节),所以该偏移地址是8B对齐,低3位为0。
其中,第0和1位用作/为请求特权级RPL、第2位用作/为表指示符TI(TabelIndicator)(=0:
GDT、=1:
LDT)。
CPU在装入段选择符时,会同步装载对应的段描述符到寄存器的64位影子结构,以避免CPU在内存地址映射时(对GDT或LDT)的内存访问
◆段描述符:
用于分段内存管理中的地址生成和保护,包含32位段基址、20位段界限和12个(属性)控制位,共计64位(8字节)。
为了与(24位基址、16位界限、8个控制位的)80286的48位段描述符兼容,80386段描述符中的基址、界限和控制位都不是连续存放的
◆描述符表:
IA-32有两种描述符表——GDT用于访问操作系统内核及LDT、IDT和TSS等系统数据结构,LDT则用于访问应用程序的各种段。
整个系统只有一个GDT,而每个应用程序一般都有一个自己的LDT,但是CPU中只有一个LDTR寄存器,用于存放当前应用程序的LDT
●GDT(GlobalDescriptorTable,全局描述符表)——是线性空间里的一种数据结构(本身不是一个段),每个系统在每一时刻,都必须且只能装入唯一的一个GDT,其32位基址和16位界限等参数位于CPU中的48位(6B)系统地址寄存器GDTR(须用LGDT指令装入)中,可被系统中的所有程序和任务使用
●LDT(LocalDescriptorTable,局部描述符表)——本身是一个段(为LDT类型的系统段),可定义若干个,但CPU中只有一个表示当前LDT的80位系统地址寄存器LDTR。
GDT中必须包含指向每个LDT段的段描述符,使用段选择符访问。
为了在访问LDT时消除地址转换,在使用LLDT指令装入LDT的段选择符时,CPU会同时将LDT的16位段选择符和(对应的64位段描述符中的)基线性地址、界限、访问权限都存储在LDTR寄存器中
●一个程序的代码段、数据段和堆栈段的段描述符,既可以放在GDT中,也可以放在LDT,由段选择符中的TI位(位于选择符中的2号位/第3位)来决定:
TI=0:
GDT、TI=1:
LDT
●由于段选择符是16位的,而且其低3位必须为0(8B对齐),所以GDT和LDT的大小都≤(216=)64KB,表中描述符的个数≤(213=)8192=8K
⏹分页
◆对IA-32处理器,只有分页机制才支持虚拟内存,但分页是建立在分段的基础之上的,故IA-32处理器采用的是段页式内存管理方法
◆IA-32处理器采用的是两级分页方式。
一级页表为页目录,有(210=)1024个页目录项(PageDirectoryEntry,PDE),占4B*1024=4KB。
每个页目录项指向一个(二级)页表,它也有(210=)1024个页表项(PageTableEntry,PTE),每个页表也占4B*1024=4KB。
总共有1024*1024=1M个页,占4B*1M=4MB空间
◆32位的页目录项和页表项的高20位分别为页表和页帧起始物理地址的高20位(4KB对齐,低12位必须为0),低12位控制位
◆页目录的起始地址保存在控制寄存器CR3中
◆4KB分页时的32位线性地址格式:
页目录项序号(10b)+页表项项序号(10b)+页帧内偏移地址(12b)
◆线性地址到物理地址的映射过程:
从CR0获得页目录的起始地址线性地址中的页目录项序号*4=页目录项的偏移地址由页目录项的起始地址+偏移地址=>对应页目录项地址从该页目录项中获取页表起始物理地址线性地址中的页表项序号*4=页表项的偏移地址由页表项的起始地址+偏移地址=>对应页表项地址从该页表项中获取页帧起始物理地址由页帧的起始地址+线性地址中的页帧内偏移地址=>线性地址所对应的物理地址
●进入保护模式
⏹主要步骤
◆准备GDT
◆准备GDTR指针(48位GDT参数:
16位界限与32位基址)
◆用LGDT指令将GDTR指针加载到GDTR寄存器
◆关闭中断
◆打开A20地址线
◆置CR0寄存器的PE位
◆双字跳转进入保护模式
⏹定义GDT:
用3参数宏Descriptor定义若干描述符(首个必须为全0的空描述符)、用各段在代码中的地址初始化描述符中基址部分
⏹打开地址线A20:
inal,92h
oral,00000010b
out92h,al
⏹置CR0寄存器的PE位
moveax,cr0
oreax,1
movcr0,eax
⏹跳转进入保护模式:
jmpdwordSelectorCode32:
0
●启动分页机制
⏹主要步骤
◆准备PD和PT(分配内存空间、在描述符表中增加PD和PT的段描述符)
◆让CR3指向PD的起始地址
◆置CR0寄存器的PG位为1
◆短跳转启动分页机制
⏹采用4KB分页大小。
为了简化,所有线性地址对应相等的物理地址,让页目录和所有页表在内存中是连续的。
并将页目录PD的开始地址PageDirBase定在200000h(2M)处,大小为4KB(1K个目录项)。
将1024个一个个依次连续紧密排列的页表PT的开始地址PageTblBase定在201000h(2M+4K)处,紧跟在PD之后,大小为1KB*4K(1M个表项)
⏹将页目录DP和诸页表PT各设为一段(前者的粒度为B,后者的为4KB),在GDT中添加相应的描述符,并定义对应的段选择符
⏹先初始化页目录,再初始化所有页表(1K个,占4M内存空间)
⏹其他启动分页机制的代码:
;让CR3指向页目录
moveax,PageDirBase;CR3=>页目录起始地址
movcr3,eax
;置CR0中的PG位
moveax,cr0
oreax,80000000h
movcr0,eax;CR0的PG位=1
;通过跳转完成分页机制启动
jmpshort.3
.3:
nop
●获取内存大小:
在实模式下,可通过调用BIOS中断15h的E801h和E820h号功能来确定内存的容量
⏹E801h号功能的15h号中断,调用简单,且可获得系统全部内存容量,但是不能知晓可用内存的具体分布范围
⏹E820h号功能的15h号中断,调用复杂,且需多次调用,但是能够确定内存的类型、容量和分布
●利用修改显存内容的方法,显示多字节整数的十六进制字符串的汇编例程
6门与中断
1)要求
了解保护模式下中断处理机制的改变。
掌握四种门描述符的概念、大小、结构和功用。
了解TSS、TSS描述符和TSS段选择符的概念、功用和关系。
掌握IDT的概念、内容和功用。
掌握IDTR的概念、大小、结构、功用和装入方法。
会创建IDT。
2)重点
●保护模式下的IA-32处理器,对中断的响应机制发生了很大变化。
单纯入口地址的中断向量被复杂的(入口地址+若干属性控制位的)门描述符(gatedescriptor)代替,简单的中断向量表IVT也被复杂的IDT(InterruptDescriptorTable,中断描述符表)代替
●门与中断:
在保护模式下,门(gate)可用于异常和中断处理,还可用于任务和CPU运行状态(特权级)的切换
⏹IA-32的四种门:
任务门(用于任务切换)、中断门(用于中断处理,CPU会清除中断允许标志IF)、陷阱门(用于异常处理,CPU不会清除中断允许标志IF)、调用门(用于改变优先级)
⏹(64位的)任务门描述符提供对任务的受保护的间接引用,可置于GDT、LDT或IDT中,其数据结构的主要内容为16位的TSS段选择符和4位类型(必须=0101[=5])与1位P属性。
GDT、LDT或IDT中的任务门可指向同一任务(在GDT中的TSS描述符,从而同一TSS)
⏹TSS(Task-StateSegment,任务状态段):
用于保护任务运行现场的一种数据结构,用于任务切换。
对应的TSS描述符(只能)位于GDT中,任务门描述符中的TSS段选择符就是指向GDT中的TSS描述符的
⏹其他三种门描述符(64位)的数据结构是类似的(只是其中的4b类型属性值不同:
中断门=1110[=14]、陷阱门=1111[=15]、调用门=1100[=12]):
16位段选择符、32位偏移量、16位的属性和参数个数
●IDT
⏹原来实模式下的中断处理程序,在保护模式下已经不能再运行
⏹实模式下的中断向量表IVT(InterruptVectorTable)被保护模式下的中断描述符表IDT(InterruptDescriptorTable)所替代
⏹IVT是由主板上ROM中的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 接口 复习 考试