


不同物理地址段关联的硬件及作用不同。8086加电或复位时,CX=0xFFFF,IP=0x0000。指向的是ROM所在段内的位置。
计算机设置为从硬盘启动时,ROM-BIOS将读取硬盘主引导扇区【逻辑扇区0】的内容,将它加载到0x0000:0x7c00。然后,用一个Jmp指令跳到那里执行。
jmp 0x0000:0x7c00

主引导扇区尺寸是512字节,其中最后两个字节必须是0xaa 0x55。
无符号的数据的数值确定,对每个比特位按2^i * v求和。i是比特位距离最低位距离,v是该位2进制数值。
有符号的数据的数值确定:
先确定符号,最高位是1是负数。最高位是0是正数。
正数的数值确定和无符号的数值确定方式一致。
负数的数值确定,用数值0减去二进制负数,得到的结果按无符号数解释,解释出来的数值就是负数的数值部分。【0减,处理器按无符号相减处理,处理器永远是大数减去小数,不是大数的额外补充一个扩展位让其变成大数后进行相减。】
处理器视角下都是无符号数,对二进制数值的解释是软件层面的事情。
bx&si
bx&di
bp&si
bp&di
bx,bp是基址寄存器
si,di是变址寄存器
PF:运算结果低8位1的数量是偶数,PF被设置为1,否则,设置为0。
CF:如果运算需要向前进位(进位会被丢弃)或借位(无符号数值小的数减大的数会借位),CF被设置为1,否则,设置为0。
OF:参与的运算得到的结果。如果参与运算的数是有符号的,且结果按有符号解释下数值含义也是对的,OF被设置为0,否则,设置为1。参与运算的结果在处理器这一层面,统一通过进位,借位,无符号方式的进行运算并得到结果的。
立即数
寄存器
物理内存位置

可以将汇编程序按作用划分为加载程序,用户程序。加载程序,往往通过是硬盘主引导程序的一部分,系统加电启动后,最先执行硬盘主引导程序,并在这里执行加载操作,将用户程序从磁盘加载到物理内存,做出一些必要的辅助操作后,将执行流程移交到用户程序。此后,系统运行用户程序的代码序列。
处理器通过端口和外围设备打交道。本质上,端口是一些寄存器。这些寄存器位于I/O接口电路。
用户程序需要在程序固定部分(程序头),提供用户程序尺寸,入口点(所在程序段,段内偏移),重定位表项数,段重定位表格。
因为用户程序编译后,各个程序段及标号的汇编地址都是在程序起始物理地址为0下的数值,这些数值需要对应到执行时实际物理内存位置,完成这个转换只需要知道,程序被加载到的物理内存的起始位置即可。

实模式下,0x00000~0x003ff区间用于集中存放256个中断的处理函数的入口点。入口点由偏移地址,段地址构成。
处理器对中断的处理:
1.保护断电的现场
保护现场:
包含标志寄存器压栈,CS,IP压栈。
初始化:
清理IF和TF标志位
2.执行中断处理程序
处理器知道中断号,知道每个中断号对应处理函数的入口点物理位置,取得入口点的偏移,段地址用以设置IP,CS完成控制流的转移。
IF设置为0下,处理器不会响应硬件中断。可通过指令进行开关。
3.返回接着执行。
所有中断处理程序最后一条指令必须是iret。
处理器因此,依次出栈并用出栈数据设置IP,CS,FLAGS完成流程跳转,及环境恢复。
由指令人为产生,中断号人为指定。
计算机加点后,BIOS程序执行期间建立起来的。



对16位实际模式:
[BX/BP] + [SI/DI] + [8或16位偏移量]
对32位保护模式:
[EAX/EBX/ECX/EDX/ESP/EBP/ESI/EDI] + [EAX/EBX/ECX/EDX/EBP/ESI/EDI] * [1/2/4/8] + [8位或32位偏移量]



对数据段的向上和向下扩展:
常规数据段是向上扩展
栈段是向下扩展
对代码段的依从和非依从:
非依从,特权级相同的代码段可调用跳转到本代码段,支持门调用。
依从,允许低特权级代码段可调用跳转到本代码段。
在32位下,如希望地址的第21位【从1计数】不是恒为0,需要控制端口,进行设置。这样才能使用32位地址空间。
保护模式通过一个标志位来区分,保护,非保护下的区别是:
非保护模式,对程序的段无保护。代码段或数据段的寻址采用段寄存器值*0x10+偏移的方式。
保护模式,对程序的段有保护。代码段或数据段的寻址采用,段寄存器值所关联的段描述符中32位基地址+偏移。
将CR0寄存器的第1位【从1计数】设置为1,就进入了保护模式。

将上述格式的段选择子设置到类型CS,DS,ES,这类段寄存器后。处理器会从内存中GDT或LDT表中找到索引关联项,将关联项的64比特位,与CS,DS,ES,这类段寄存器建立关联。后续的代码位置或数据位置在保护模式下,遵循段基地址+偏移。段基地址将从关联的段寄存器所关联的64位描述符中给出的段基地址得到。段的保护及性质也是64位段描述符中指示的为准。
当你将CR0的第1位设置为1,完成从非保护模式到保护模式的转换后,你需要紧接着执行一条远跳转指令。以便流水线完全以新的模式继续运作。