汇编与机器指令的相关笔记(1)

本文详细介绍了64位编程中的内存寻址模式,包括基址变址寻址、RIP-Relative寻址等,并解释了不同模式下的地址转换规则。此外,还对比了32位与64位编程中地址寻址的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汇编与机器指令的相关笔记(1)


       64位编程里可以使用64-bit 的地址值。但是X64 体系里只实现了48 位,高16 位要么全0,要么全1,这种形式的地址被称为 canonical 地址。其它地址为非法的。
       32 位内存寻址模式支持的最复杂的寻址模式为基址变址寻址
[base + index * scale + disp8/32]
       比如如下指令:
mov eax,[eax + ecx*4 + 0x1C]

       64位内存寻址模式形式和32位相同,基址和变址默认使用64位的通用寄存器。另外,64 位新增了一个RIP-Relative 寻址形式:
[rip + disp32]
       这种指令的好处是便于建立PIC 代码结构(Position-Independent Code ,不依赖于位置的代码,此类代码便于建立整整的共享DLL)

  • 内存寻址模式的使用
           在16 位编程和32位编程下可以使用16 位地址模式和32 位地址模式。指令的默认地址(16位或32位)依赖于CS.D 标志位,CD.D=1时使用32 位的寻址模式,CS.L=0使用16位的寻址模式。
           当改变默认的地址尺寸时,生成的机器指令会相应插入67H 这个前缀值。64 位模式下,也可以使用67 H 改变默认的64位寻址模式,改变为32 位的寻址模式。

  • 操作数寻址
           寄存器寻址
           内存操作数寻址
                  直接内存寻址
                  间接内存寻址–寄存器参与计算
           立即数寻址
           I/O 端口寻址

  • 内存地址形式
           real 模式的线性地址转换规则是 segment * 16 + offset。而在64位模式下,线性地址为:
           linear_address = offset ;base 强制为0
           64 位模式下,除了FS 和 GS 段可以使用非0 值的base,ES,CS,DS 及SS 段的base 值强制为0.
           物理地址,在分页机制下,经过处理器的分页映射管理转换为最终的物理地址,输出到address bus。

  • 符号扩展与零扩展指令
           符号扩展传送指令有两大类:movsx 系列和 cbw 系列。
           movsx reg,reg/mem ;16/32/64位reg,8/16 位 reg/mem
           movsxd reg,reg/mem ;64位 reg,32 位 reg/mem
           CBW/CWDE/CDQE
           al 符号->ax;ax->eax;eax->rax
           CWD/CDQ/CQO
           ax->dx、ax;eax->edx、eax;rax->rdx、rax
           zero-extend 零扩展 传送指令在规格上和符号扩展movsx 是一样的。
           mov ax,0xb06a
           movsx ebx,ax ;ebx = 0xffffb06a
           movzx ebx,ax ;ebx = 0x0000b06a

  • 位操作指令
           逻辑指令
    and eax,0xFFFFFFF7
    or eax,8
    xor eax,8
    xor eax,eax ;常用清零操作
           位指令
    bt eax,0 ;取Bit0 值到 CF
    bts eax,0 ;取Bit0 值到 CF,将Bit0 置位
    btr eax,0 ;取Bit0 值到 CF,将Bit0 清位
    btc eax,0 ;取Bit0 值到 CF,将Bit0 取反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值