X86架构基本汇编指令详解

本文详细介绍了汇编语言中的指令和伪指令,包括数据传送、算术运算、逻辑运算、流程控制等。重点讲解了MOV、MOVZX、MOVSX、XCHG、INC/DEC、ADD/SUB、NEG、ALIGN、JMP、LOOP、PUSH/POP、CALL/RET等常用指令,以及如何利用它们进行程序设计和控制流程。此外,还讨论了无符号和有符号乘除法、位移和循环位移操作。

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

汇编指令

伪指令

1. .MODEL
.model flat,stdcall

model伪指令告诉汇编程序使用哪一种存储模式:32 位程序总是使用平面(flat)存储模式,它与处理器的保护模式相关联。关键字 stdcall 在调用程序时告诉汇编器,怎样管理运行时堆栈。
然后是 .STACK 伪指令,它告诉汇编器应该为程序运行时堆栈保留多少内存字节。

2. .STACK
.stack 4096

数值 4096 可能比将要用的字节数多,但是对处理器的内存管理而言,它正好对应了一个内存页的大小。所有的现代程序在调用子程序时都会用到堆栈。首先,用来保存传递的参数;
其次,用来保存调用函数的代码的地址。

3. ENDP
main ENDP

ENDP 伪指令标记一个过程的结束。如果程序有名为 main 的过程,则 endp 就必须使用同样的名称;

4. END
END main

最后,END 伪指令标记一个程序的结束,并要引用程序入口;

汇编指令

1. MOV:将源操作数复制到目的操作数

MOV 指令将源操作数复制到目的操作数。作为数据传送(data transfer)指令,它几乎用在所有程序中。在它的基本格式中,第一个操作数是目的操作数,第二个操作数是源操作数:

MOV destination, sourece

两个操作数必须是同样的大小。
两个操作数不能同时为内存操作数。
指令指针寄存器(IP、EIP 或 RIP)不能作为目标操作数。

MOV指令不能直接将较小的操作数复制到较大的操作数中

2. MOVZX 和 MOVSX

MOVZX 指令(进行全零扩展并传送)将源操作数复制到目的操作数,并把目的操作数 0 扩展到 16 位或 32 位。这条指令只用于无符号整数,有三种不同的形式;

MOVZX reg32,reg/mem8
MOVZX reg32,reg/mem16
MOVZX reg16,reg/mem8

MOVSX 指令(进行符号扩展并传送)将源操作数内容复制到目的操作数,并把目的操作数符号扩展到 16 位或 32 位。这条指令只用于有符号整数,有三种不同的形式;

MOVSX reg32, reg/mem8
MOVSX reg32, reg/mem16
MOVSX reg16, reg/mem8
3. XCHG:交换两个操作数内容

三种格式:

XCHG reg, reg
XCHG reg, mem
XCHG mem, reg

不能直接交换两个内存操作数

4. INC 和 DEC

INC(增加)和DEC(减少)指令分别表示寄存器加 1 和减 1:

INC reg/mem
DEC reg/mem

不支持直接对内存进行操作

5. ADD 和 SUB:操作数相加减;
6. NEG: NEG(非)指令通过把操作数转换为其二进制补码,将操作数的符号取反;
NEG reg
NEG mem

将目标操作数按位取反再加 1,就可以得到这个数的二进制补码。

7. ALIGN伪指令:对齐一个变量

ALIGN 伪指令将一个变量对齐到字节边界、字边界、双字边界或段落边界。

ALIGN bound

ALIGN 4     ;偏移量按4对齐
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值