首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

GNU汇编总结 01

GNU汇编总结 01

# 一, IA-32 硬件特性
   
    ################################################################################################
   
    寄存器:
   
    1, 通用寄存器, 用于存放正在处理的数据
   
    EAX    用于操作数和结果数的累加器
   
    EBX    指向数据内存断中的数据的指针
   
    ECX    字符串和循环操作的计数器
   
    EDX    IO指针
   
    EDI    用于字符串操作的目标的数据指针
   
    ESI    用于字符串操作的源的数据指针
   
    ESP    堆栈指针
   
    EBP    堆栈数据指针
   
    其中寄存器EAX, EBX, ECX, EDX又可以通过16位和8位寄存器名称引用
   
    如EAX, AX 引用EAX低16位, AL 引用EAX低8位, AH 引用AL之后的高8位
   
    2, 段寄存器:
   
    IA-32平台允许使用3中内存模型: 平坦内存模式    分段内存模式    实地址模式
   
    平坦内存: 把全部的系统内存表示为连续的地址空间, 通过线性地址的特定地址
   
    访问内存位置。
   
    分段内存: 把系统内存划分为独立的段组, 通过位于寄存器中的指针进行引用。 每
   
    个段用于包含特定类型的数据。 一个段用于包含指令码, 另一个段包
   
    含数据元素, 第三个段包含数据堆栈。
   
    段中的内存位置是通过逻辑地址引用的, 逻辑地址是由段地址加上偏移
   
    量构成, 处理器把逻辑地址转换为相应的线性地址以便访问。
   
    段寄存器:
   
    CS    代码段
   
    DS    数据段
   
    SS    堆栈段
   
    ES    附加段指针
   
    FS    附加段指针
   
    GS    附加段指针
   
    每个段寄存器都是16位的, 包含指向内存特定段起始位置的指针,程序不能
   
    显示加载或改变CS寄存器, DS, ES, FS, GS都用于指向数据段, 通过4个独立
   
    的段, 程序可以分隔数据元素, 确保他们不会重叠, 程序必须加载带有段的
   
    正确指针值的数据段寄存器, 并且使用偏移值引用各个内存的位置。
   
    SS段寄存器用于指向堆栈段, 堆栈包含传递给函数和过程的数据值。
   
    实地址:     如果实地址模式, 所有段寄存器都指向线性0地址, 并且都不会被程序改动,
   
    所有的指令码 数据元素 堆栈元素 都是通过他们的线性地址直接访问的。
   
    3, 指令指针寄存器
   
    是EIP寄存器, 它跟踪要执行程序的下一条指令代码, 应用程序不能修改指令指针本身,不
   
    能指定内存地址把它拖放EIP寄存器中,相反必须通过一般的跳转指令来改变预存取缓存的
   
    下一条指令。
   
    在平坦内存模型中, 指令指针包含下一条指令码的线性地址, 在分段模型中指令指针包含
   
    逻辑地址指针, 通过CS寄存器的内存引用。
   
    4,    控制寄存器
   
    CRO    控制操作模式 和 处理器当前状态的系统标志
   
    CR1    当前没有使用
   
    CR2    内存页面错误信息
   
    CR3    内存页面目录信息
   
    CR4    支持处理器特性和说明处理器特性能力的标志
   
    不能直接访问控制寄存器, 但是能把控制寄存器中的值传递给通用寄存器,如果必须改动控制
   
    寄存器的标志, 可以改动通用寄存器的值, 然后把内容传递给控制寄存器。
   
    标志:
   
    IA-32使用单一的寄存器来包含一组状态控制和系统标志, EFLAGS寄存器包含32位标志信息
   
    1, 状态标志
   
    标志                  位                          说明
   
    CF                    0                           进位标志, 如果无符号数的数学操作产生最高有效位的进位或者借位, 此时值为1
   
    PF                    2                           奇偶校验标志, 用于表明数学操作的结果寄存器中的是否包含错误数据
   
    AF                    4                           辅助进位标志, 用于二进制编码的10进制(BCD)的数学操作中, 如果用于运算的
   
    寄存器的第三位发生进位或借位, 该值为1
   
    ZF                    6                           0标志, 如果操作为0, 则该值为1
   
    SF                    7                           符号标志, 设置为结果的最高有效位, 这一位是符号位表明结果是正值还是负值
   
    OF                    11                          溢出标志
   
    2, 控制标志
   
    当前只定义了一个控制标志DF即方向标志, 用于控制处理器处理字符串的方式
   
    如果设置为1, 字符串指令自动递减内存地址以便到达字符串中的下一字节。
   
    反之。
   
    3, 系统标志
   
    标志                  位                          说明
   
    TF                    8                           陷阱标志, 设置为1时启用单步模式, 在单步模式下处理器每次只执行一条命令。
   
    IF                    9                           中断使能标志, 控制处理器如响应从外部源接收到的信号。
   
    IOPL                  12和13                      IO特权级别标志, 表明当前正在运行任务的IO特权级别, 它定义IO地址空间的
   
    特权访问级别, 该值必须小于或者等于访问I/O地址空间的级别; 否则任何访问
   
    IO空间的请求都会被拒绝!
   
    NT                    14                          嵌套任务标志控制当前运行的任务是否连接到前一个任务, 它用于连接被中断
   
    和被调用的任务。
   
    RF                    16                          恢复标志用于控制在调试模式中如何响应异常。
   
    VM                    17                          虚拟8086模式, 表明处理器在虚拟8086模式中而不是保护模式或者实模式。
   
    AC                    18                          对准检查标志, 用于启用内存引用的对准检查
   
    VIF                   19                          虚拟中断标志, 当处理器在虚拟模式中操作时, 该标志起IF标志的作用。
   
    VIP                   20                          虚拟中断挂起标志, 在虚拟模式操作时用于表示一个中断正在被挂起。
   
    ID                    21                          表示CPU是否支持cpuid指令, 如果处理器能够设置或者清零这个标志, 表示
   
    处理器支持该指令。
返回列表