• DIY微型操作系统(2)—— 寄存器赋值


    书上已经为我们提供了最简单的“hello world”程序了

    相信大家玩的也挺欢乐的,不过这只是引导扇区的雏形

    而且如果找不到完整的光盘上的源代码,新手估计很难学的下去

    所以之后文中也会尽量贴出代码

    不过在继续开始之前,我们有另外意见很重要的事情要做:

    让所有东西都在掌控之中!

    如果你觉得觉得有几个特殊寄存器的值不知道怎么给,那么

    接下来我们要看看怎么样随心所欲地给所有寄存器赋值

     

     

    Intel x86系列寄存器与赋值方式 (存放到内存顺序:低地址对低地址)

    32bit名称

    16bit名称

    注释

    赋值方式

    EAX

    AX

    accumulator

     

    ECX

    CX

    counter

     

    EDX

    DX

    data

     

    EBX

    BX

    base

    可以用来控制制定内存地址(变址):

    MOV [SI],AX

    EBP

    BP

    base pointer

    ESI

    SI

    source index

    EDI

    DI

    destination index

    ESP

    SP

    stack pointer

     

    EFLAGS

    FLAGS

    flags

    不可以用MOV直接赋值

     

    IP

    instruction pointer

     

    CS

    code segment

     

    DS

    data segment

    不能用MOV赋立即数

    但可以通过AX等寄存器赋值

     

    ES

    extra segment

     

    SS

    stack segment

     

    FS

    segment part2

     

    GS

    segment part3

     

    GDT

    global description table

    通过LGDT赋值

     

    LDT

    local description table

    通过LLDT赋值

     

     

    赋值方式补充

    寄存器

    赋值方式

    DS,ES,SS,FS,GS

    MOV AX,7C00H

    MOV DS,AX

    PUSH 和 POP 指令

    IP

    JMP

    CALL

    CS:IP

    JMP 0x0001:0x0000

    CALL

    PUSH 和 RET 指令

    (E)FLAGES

    PUSHFD    ;push flags double-word

    POP EAX

    ...

    PUSH EAX

    POPFD    ;pop flags double-world

    GDT

    LGDT

    LDT

    LLDT

     

    一看这些,估计头都有点晕了吧

    没关系,也不用一下子就记住,只要用的时候知道上哪里查找就可以了。在以后的开发过程中用着用着就记住了。

    那么这次我们就到这里,可以在看书的时候稍微留意一下作者川合先生的代码是怎么赋值的,或许会有不少新收获。

     

    转载本文请保留以下网址:http://www.cnblogs.com/warren-wong/p/3976042.html

    如果发现文中有错误之处,请务必告诉我,谢谢大家。

     

  • 相关阅读:
    60个生僻成语汇总
    人民网 ***讲话
    组合排序
    工具
    网络之网络设备
    《TCP协议到TCP通讯各种异常现象和分析》的学习
    Console
    RTT学习之ulog
    RTT之MQTT学习笔记
    项目管理-禅道
  • 原文地址:https://www.cnblogs.com/warren-wong/p/3976042.html
Copyright © 2020-2023  润新知