3.操作系统——CPU的实模式、保护模式和长模式

实模式、保护模式、长模式

实模式16(实地址模式)

真实分为两个方面:

  1. 运行真实指令。不区分指令动作,只是直接执行指令的真实功能
  2. 发往内存的地址是真实、不加限制的。

总结来说就是,这个模式下直接往物理层写,而不是我们上一章说过的硬件抽象层

实模式寄存器

X86CPU在实模式下的每个寄存器都是16位。
在这里插入图片描述
其中:

  • AX:累加器,主要用于存放数据,算数、逻辑运算中的操作数或者结果。也可用来存放临时的地址。
  • BX:基地址寄存器,存放访问存储器时的地址。
  • CX:计数寄存器,保存计算值,如在移位、循环等指令中作为隐含计数使用。
  • DX:数据寄存器:用于数据传递。在间接寻址时IO指令存放IO端口地址。
  • IP:程序指针,指向下一条指令地址
  • SP:栈指针,指向当前栈顶
  • S结尾:段寄存器存放内存段基地址

实模式下如何访问内存

数据和指令都是放在内存中,如何寻址将数据装入寄存器?
所有内存地址得来的方式都是:段寄存器左移4位,再加上一个通用寄存器中的值形成地址。由这个地址去访问内存,着就是分段内存管理模型
在这里插入图片描述

注意:
代码段:由CS(段寄存器)和IP(程序指针)确定
栈段:由SS(段寄存器)和SP(栈针)确定
由此我们知道,不同程序执行,只需要分配不同的四个寄存器CS IP SS SP,就可以分配不同运行地址。

汇编Hello world

要点:

  • 数据段和代码段开头和结尾分别以 SEGMENT 和 ENDS标识
  • 字符串单引号括住,以$结束
  • ASSUME CS:CODE,DS:DATA ;告诉汇编程序,DS指向数据段,CS指向代码段
  • 数据段data经由AX转赋给DS
  • LEA是取地址指令
  • INT指令发出:软中断,具体见下一节详解。

data SEGMENT ;定义一个数据段存放Hello World!
    hello  DB 'Hello World!$' ;注意要以$结束
data ENDS
code SEGMENT ;定义一个代码段存放程序指令
    ASSUME CS:CODE,DS:DATA ;告诉汇编程序,DS指向数据段,CS指向代码段
start:
    MOV AX,data  ;将data段首地址赋值给AX                
    MOV DS,AX    ;将AX赋值给DS,使DS指向data段
    LEA DX,hello ;使DX指向hello首地址
    MOV AH,09h   ;给AH设置参数09H,AH是AX高8位,AL是AX低8位,其它类似
    INT 21h      ;执行DOS中断输出DS指向的DX指向的字符串hello
    MOV AX,4C00h ;给AX设置参数4C00h
    INT 21h      ;调用4C00h号功能,结束程序
code ENDS
END start

实模式中断

中断是中止当前程序,立即跳转到另一个特定的地址上,以运行特定代码。
实模式下,它的实现过程:先保存CS和IP寄存器,然后装载新的CS和IP
注:IP只和CS一起使用,只能由处理器才能直接改变其值。开始一段代码的时候,CS指向代码段起始地址,IP段指向段内偏移。这样CS+IP就能形成逻辑地址,由总线接口变换成物理地址从而取得指令。处理器也会自动根据当前指令长度改变IP值,从而执行下一条指令。

中断如何产生?

  1. **硬件中断:**中断控制器给CPU发送了一个
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值