【计算机系统原理】Intel 与 AT&T 汇编指令格式转换

目录

核心转换规则

常见寄存器名对应的AT&T指令后缀

练习1:逐条指令转换与含义说明

[1. push ebp](#1. push ebp)

[2. mov edx, DWORD PTR esp + 8](#2. mov edx, DWORD PTR [esp + 8])

[3. mov al, 255](#3. mov al, 255)

[4. mov WORD PTR ebp + 20, cx](#4. mov WORD PTR [ebp + 20], cx)

[5. lea eax, ecx + edx \* 2 + 4](#5. lea eax, [ecx + edx * 2 + 4])

[练习2: 更精简版本](#练习2: 更精简版本)


核心转换规则

特性 Intel 格式 AT&T 格式
操作数顺序 目标, 源 (dst, src) 源, 目标 (src, dst)
寄存器命名 直接写寄存器名(如 ebp) 寄存器名前加 % 前缀(如 %ebp)
立即数 直接写数值(如 255) 立即数前加 $ 前缀(如 $255)
操作数大小 用 BYTE/WORD/DWORD PTR 显式指定 用指令后缀 b(8 位)/w(16 位)/l(32 位) 指定
内存寻址 [基址 + 索引*比例 + 偏移] 偏移(基址, 索引, 比例)

常见寄存器名对应的AT&T指令后缀

练习1:逐条指令转换与含义说明

1. push ebp
  • AT&T 格式 :pushl %ebp
  • 指令含义 :将 32 位基址指针寄存器 ebp 的值压入栈中,常用于函数栈帧初始化,保存旧栈帧基地址。

2. mov edx, DWORD PTR [esp + 8]
  • AT&T 格式 :movl 8(%esp), %edx
  • 指令含义 :从栈指针 esp 偏移 8 字节的内存地址处,读取一个 32 位双字(DWORD)数据,存入寄存器 edx,通常用于获取函数参数。

3. mov al, 255
  • AT&T 格式 :movb $255, %al
  • 指令含义 :将立即数 255(8 位)存入 8 位累加器寄存器 al,后缀 b 明确操作数为字节(8 位)。

4. mov WORD PTR [ebp + 20], cx
  • AT&T 格式 :movw %cx, 20(%ebp)
  • 指令含义 :将 16 位寄存器 cx 的值,写入到基址指针 ebp 偏移 20 字节的内存地址处,后缀 w 明确操作数为字(16 位)。

5. lea eax, [ecx + edx * 2 + 4]
  • AT&T 格式 :leal 4(%ecx, %edx, 2), %eax
  • 指令含义 :计算有效地址 ecx + edx×2 + 4,并将该地址值存入 32 位寄存器 eax(lea 指令本质是地址计算,不访问内存)。

练习2: 更精简版本

相关推荐
David猪大卫2 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger2 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
Alluxio3 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
fengci.4 小时前
CTF2MISC中等部分
开发语言·前端·学习
YueTann5 小时前
mgtv5th-baseline学习
学习
蒸蒸yyyyzwd7 小时前
从后端面经学到的 3 个知识
笔记·学习
17岁的勇气7 小时前
Unity Shader unity文档学习笔记(二十二):shader变体
笔记·学习·unity
青瓦梦滋8 小时前
Redis主从复制
服务器·数据库·redis·缓存·bootstrap
路灯上の马陈9 小时前
Java 内部类 学习笔记
笔记·学习
前进的李工10 小时前
Agent 学习笔记 12:Agent 的工具应该怎么设计
人工智能·笔记·学习·agent·工具调用·skill·工具设计