• 计算机中的寄存器


    原文参见http://www.brokenthorn.com/Resources/OSDev7.html

    General Purpose Registers

    These are 32 bit registers that can be used for almost any purpose. Each of these registers have a special purpose as well, however.

    • EAX - Accumlator Register. Primary purpose: Math calculations
    • EBX - Base Address Register. Primary purpose: Indirectly access memory through a base address.
    • ECX - Counter Register. Primary purpose: Use in counting and looping.
    • EDX - Data Register. Primary purpose: um... store data. Yep, thats about it :)

    Segment Registers

    The segment registers modify the current segment addresses in real mode. They are all 16 bit.

    • CS - Segment address of code segment
    • DS - Segment address of data segment
    • ES - Segment address of extra segment
    • SS - Segment address of stack segment
    • FS - Far Segment address
    • GS - General Purpose Register

    Remember: Real Mode uses the segment:offset memory addressing model. The segment address is stored within a segment register. Another register, such as BP, SP, or BX can store the offset address.

    It is useually refrenced like: DS:SI, where DS contains the segment address, and SI contains the offset address.

    Segment registers can be used within any program, from Ring 0 to Ring 4. Because they are basic assembly language, I will assume you already know how they work.

    Index Registers

    The x86 uses several registers that help when access memory.

    • SI - Source Index
    • DI - Destination Index
    • BP - Base Pointer
    • SP - Stack Pointer

    Each of these registers store a 16 bit base address (that may be used as an offset address as well.)

    On 32 bit processors, these registers are 32 bits and have the names ESI, EDI, EBP, and ESP.

    On 64 bit processors, each register is 64 bits in size, and have the names RSI, RDI, RBP, and RSP.

    The 16 bit registers are a subset of the 32 bit registers, which is a subset of the 64 bit registers; the same way with RAX.

    The Stack Pointer is automatically incremented and decremented a certain amount of bytes whenever certain instructions are encountered. Such instructions include push*, pop* instructions, ret/iret, call, syscall etc.

    The C Programming Language, in fact most languages, use the stack regularly. We will need to insure we set the stack up at a good address to insure C works properly. Also, remember: The stack grows *downward*!

    Instruction Pointer / Program Counter

    The Instruction Pointer (IP) register stores the current offset address of the currently exectuting instruction. Remember: This is an offset address, *Not* an absolute address!

    The Instruction Pointer (IP) is sometimes also called the Program Counter (PC).

    On 32 bit machines, IP is 32 bits in size and uses the name EIP.

    On 64 bit machines, IP is 64 bits in size, and uses the name RIP.

  • 相关阅读:
    leetcode-383-Ransom Note(以空间换时间)
    AtCoder
    AtCoder
    Hadoop序列化案例实操
    Java实现MapReduce Wordcount案例
    HDFS常用API操作 和 HDFS的I/O流操作
    HBase常用的JAVA API操作
    ZooKeeper之服务器动态上下线案例
    机器学习(6)——逻辑回归
    机器学习(5)——多项式回归与模型泛化
  • 原文地址:https://www.cnblogs.com/wangshuo/p/2247367.html
Copyright © 2020-2023  润新知