
x86汇编语言
《x86汇编语言:从实模式到保护模式》
Lsang_
这个作者很懒,什么都没留下…
展开
-
总索引
汇编地址与偏移地址;8086、80286、80386介绍;8086地址分配、计算机启动过程;分页、线性地址与物理地址;GDT、GDT描述符;保护模式下段寄存器:段选择子;TSS、TSS描述符;LDT、LDT描述符;注:LDT描述符、TSS描述符为GDT描述符S='0’时的特例;特权级:DPL、RPL、CPL;调用门;任务门;中断门、陷阱门;注:中断门与陷阱门只能存放在IDT,任务门...原创 2020-03-04 22:29:26 · 396 阅读 · 0 评论 -
QEMU、GDB调试QEMU
1原创 2020-04-28 17:28:32 · 2189 阅读 · 0 评论 -
8253可编程计数器/定时器
8253有3个16位的counter(0,1,2),其中counter0用作IRQ0;PC输入频率为1193180Hz ==>每次(count-1)需1/1193180s,则若想设置10ms中断则counter0应置为1193180/100;counter配置:8253counter(0,1,2)置位端口分别为端口(40h,41h,42h),16位;端口43h配置8253Mode Co...原创 2020-04-01 18:11:58 · 2717 阅读 · 0 评论 -
中断及中断描述符表
1.中断外部硬件中断:从处理器外部来的中断信号,通过两个信号线INTR(可屏蔽中断)、NMI(非屏蔽中断)引入处理器;中断控制器8259芯片(PIC):每片8259只有8个中断输入引脚,在个人电脑上使用,需要两块(主片、从片);INTEL处理器允许256(0~255)个中断,8259负责提供其中15个,但中断号不固定;8259内部有8位中断屏蔽寄存器(IMR),对应8个中断输入引脚;8259有...原创 2020-03-03 20:39:06 · 2209 阅读 · 0 评论 -
实时时钟RTC
1.简述外围设备控制器芯片(ICH)内部,集成了实时时钟电路(RTC),以及两个CMOS组成的静态存储器(CMOS RAM),通常为128B;RTC负责计时,由1个32.768kHz的石英晶体振荡器驱动,经分频后用于CMOS RAM进行每秒一次的时间刷新;CMOS RAM中时间信息如下表所示,前10字节为常规时间信息:偏移地址内容偏移地址内容0x00秒0x07日...原创 2020-03-03 16:30:25 · 644 阅读 · 0 评论 -
分页、线性地址与物理地址
1.线性地址到物理地址转化过程32位线性地址,前高10位为在页目录表的索引,4KB/4B=1K=2^10==>10位;中间10位为在页表中的索引,4KB/4B=1K=2^10==>10位;低12位为在页中的偏移量,4KB=2^12==>12位;上图页目录与页表中,为方便直接存放了物理基地址,实际页目录项,页表项结构如下:注:页目录与页表本身也是页,大小为4K...原创 2020-03-03 16:19:28 · 820 阅读 · 0 评论 -
任务门及任务切换
1.利用中断引发任务切换:1.1中断描述符表IDT:在保护模式下,实模式下中断向量表不再使用,取而代之的是中断描述符表IDT。IDT与GDT,LDT一样,用于保存描述符;但IDT保存的是门描述符:中断门、陷阱门、任务门;1.2任务门中断发生时,如果中断号对应的门是任务门,则必须进行任务切换;任务门描述符格式:P位指示该门是否有效,0不允许通过此门实施任务切换;DPL为任务门描述...原创 2020-02-23 02:10:16 · 796 阅读 · 0 评论 -
一般特权级保护及调用门
1原创 2020-02-22 00:14:47 · 492 阅读 · 0 评论 -
任务状态段TSS及TSS描述符、局部描述符表LDT及LDT描述符
1.TSS介绍在一个多任务环境中,当发生了任务切换,需保护现场,因此每个任务的应当用一个额外的内存区域保存相关信息,即任务状态段(TSS);TSS格式固定,104个字节,处理器固件能识别TSS中元素,并在任务切换时读取其中信息。2.TSS与LDT对比TSS/LDT对比 LDT每个任务都配有一个LDT,LDT基地址、界限等信息存放在任务对应的TCB中;将LDT视为一种特殊的内存段,则可为每...原创 2020-02-21 21:21:22 · 7109 阅读 · 1 评论 -
栈切换及控制返回过程
1.栈切换过程使用调用门改变了CPL,必须切换栈,即从当前栈切换到与目标代码段特权级相同栈上。栈切换由处理器固件自动完成。栈切换过程如下:从TSS中选取目标代码段DPL的栈,读出段选择子和ESP;使用选择子读取栈描述符,检查特权级,类型等;临时保存旧栈(当前栈)SS,ESP;将(1)中独处的新栈选择子、段指针代入SS和ESP,切换到新栈;将(3)保存的旧栈SS,ESP压入新栈(保存现...原创 2020-02-21 18:25:46 · 898 阅读 · 0 评论 -
使用栈传递参数,ESP与EBP
1.栈访问方式栈的访问有两种:隐式,由处理器执行如push,pop,call,ret等指令时自动进行,需用到ESP(指令指针寄存器);将栈视为一般的数据段,直接访问其中内容,需要到EBP(栈基址寄存器)。如指令 mov edx,[ebp]:使用EBP时不用前缀,默认SS,SS描述符高速缓存器中32位基地址+EBP提供32位偏移==> 32位线性地址,访问取得一个双字,传送到EDX。...原创 2020-02-18 01:30:09 · 1898 阅读 · 0 评论 -
32位保护模式下对段的保护
1.修改段寄存器时的保护索引值 * 8 + 7<= 边界 => 取得描述符;看描述符TYPE字段是否有效;检查描述符TYPE字段是否与段寄存器要求匹配,规则如下表:段寄存器数据段代码段W=0(只读)W=1(读写)R=0(只执)R=1(执+写)CSNNYYDSYYNYESYYNYFSYYNYGSYYNYSSNYYY检查描述符P位,P=0即不在内存中,...原创 2020-01-21 23:39:24 · 338 阅读 · 0 评论 -
全局描述符
1原创 2020-01-21 23:41:20 · 1259 阅读 · 0 评论 -
实模式下的中断向量表
1.实模式下中断向量表如图,每个中断在向量表中占两个字;8259传来中断号、软中断指明中断号=>中断号*4得到中断处理程序入口地址;2.BIOS中断BIOS中断是软中断,是在加电之后,BIOS程序执行期间建立起来的。...原创 2020-01-12 19:01:58 · 1605 阅读 · 0 评论 -
寄存器EBP,ESP理解
寄存器EBP,ESP理解按调用约定__stdcall 调用函数test(int p1,int p2):假设执行函数前堆栈指针ESP为NN注意栈在内存中的生长方向是逆向push p2 ;参数2入栈, ESP = NN - 4hpush p1 ;参数1入栈, ESP = NN - 8hcall test ;函数返回地址入......原创 2018-06-15 09:24:14 · 748 阅读 · 0 评论 -
call、ret、retf
1.call近调用:即段内调用,只需得到偏移地址;远调用:即段间调用,需得到段地址和偏移地址;8086支持四种调用方式:16位相对近调用:call near task、call task、call 0x0500机器码:E8 操作数,操作数是偏移量(不是task、0x500),与IP运算后得到段内偏移地址;操作数计算:task汇编地址-call汇编地址-3(指令长度) =>操作数因调...原创 2020-01-12 00:31:15 · 429 阅读 · 0 评论 -
汇编地址与偏移地址
代码经过编译之后的文件内容,即代码对应的汇编地址如下:;汇编地址 机器码 源程序代码 00000000 B800B8 mov ax,0xb80000000003 8EC0 mov es,ax;注释不编译对应的汇编地址与偏移地址的关系如下图:将该段程序加载到物理地址0x60000处,能看到汇编地址与偏移地址是一致的。但若是使用vstart的话会改变之后的汇编地址,之后进行补...原创 2020-01-08 20:08:10 · 4182 阅读 · 0 评论 -
makefile制作虚拟磁盘、编译、运行虚拟机
1.dd指令参数作用if=文件名输入文件名,缺省为标准输入of=文件名输出文件名,缺省为标准输出ibs=bytes obs=bytesbs=bytes一次读入bytes个字节,即指定一个块大小为bytes个字节 一次输出bytes个字节,即指定一个块大小为bytes个字节同时设置读入/输出的块大小为bytes个字节cbs=bytes一次转换byt...原创 2020-01-05 20:04:12 · 483 阅读 · 0 评论 -
8086地址分配、计算机启动过程
1).8086地址分配:2).计算机启动过程:RESET => 硬件初始化:CS:0xFFFF,其余0x0000(包括IP);执行0xFFFF0处指令,通常为jmp;jmp到BIOS开始地方(0xF0000)执行BIOS程序;开始自检;若计算机设定从硬盘启动,读取MBR(主引导扇区),并加载到0x0000:0x7c00(即0x7C00)处 => 执行jmp 0x0000...原创 2020-01-05 18:14:23 · 1901 阅读 · 0 评论 -
8086、80286、80386
1 .基本参数参数内容8个16位通用寄存器(AX,BX,CX,DX),SI,DI,BP,SP4个段寄存器CS,DS,ES(Extra Segment),SS1个指令寄存器IP20位地址线16位的话只能访问64KB(2^16)内存: 0000H-FFFFH=65536B20位能够访问1MB内存:00000H-FFFFF2 .8086内存分段机制...原创 2020-01-05 16:47:25 · 1733 阅读 · 0 评论