zoukankan      html  css  js  c++  java
  • 底层机器指令学习

    intel指令系统为了缩减指令长度,采取的策略是这样的:只有在必要的时候,使用某些字节域,但是有一个域必须存在主操作码。
    指令前缀有4种,而且一条指令可以前有多种前缀,每一个前缀占一个字节,在32位指令里,前缀种类的排列顺序不作规定

    1] 操作数长度前缀(66H)
    对于32位指令系统而言,默认寄存器都是32位的,但是我们不可避免的会使用其他长度地寄存器。如果要使用16位长度的寄存器,只需在指令前加66H,即用操作数长度前缀标记。然而对于8位长度的寄存器,不是通过操作数前缀标记的。后文将说明它和32位操作数长度如何区分的
    举例:
    mov eax,1 = B8 01000000
    mov ax,1 =66 B8 0100
    mov al,1 = B0 01
    [2] 地址长度前缀(67H)
    这个前缀和上一个前缀用法差不多,只不过这个前缀是标记内存地址长度的。学过汇编的人,还应该知道操作数和被操作数中,至多一个是内存操作数。在32位指令系统下,如果内存操作数的长度为16位,则需在指令前加“地址长度前缀”,即67H
    [3] 段超越前缀(2eH、3eH、26H、64H、65H、36H)
    当使用内存操作数时,无论那种内存操作数寻址都有默认的段寄存器,然而至多一个的内存操作数不使用默认段寄存器时,我们就需要使用段超越前缀
    4] 锁定前缀和重复前缀
    和协处理器有关,在指令前加F0,表示访问独享

  • 相关阅读:
    python之模块与包
    python之模块4
    python之模块3
    python之模块2
    Day10:Linux基础:搭建samba服务
    Day9:Linux基础:程序管理
    Day8: Linux基础片:网络配置
    番外篇:硬盘分区、创建文件系统
    Day7: Linux基础片:系统监控
    Day6: Linux基础片:文件压缩、Vim用法
  • 原文地址:https://www.cnblogs.com/HuaiNianCiSheng/p/3420277.html
Copyright © 2011-2022 走看看