Fullstar

Archives

  • December 2025
  • August 2024
  • July 2024
  • February 2024
  • November 2023
  • August 2023
  • July 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • February 2022
  • January 2022
  • September 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020

Categories

  • Code
  • Lens
  • Life
0
Fullstar
  • Code

汇编基础:常用指令(X86)

  • August 28, 2020
  • Brandon

Looking for a Shorter Overview?

AI Summary

掌握EAX至EDI的常见分工,能更快读懂32位X86代码。文章还说明CF、OF等标志位如何判断进位和溢出,并梳理带进位运算、字符串移动、存储与重复执行指令的行为。

Key Moments

AI-generated
1

32位通用寄存器的分工

EAX、ECX、EDX、EBX、ESP、EBP、ESI和EDI分别承担运算、计数、指针、栈和字符串地址等常见用途。
2

CF与OF的溢出判断

CF判断无符号运算是否超出范围,OF判断有符号加减运算是否溢出,正数相加得负数或负数相加得正数表示有符号溢出。
3

带进位与借位的算术指令

ADC在加法中加入CF,SBB在减法中加入CF,可用于处理多字节或多字长数值运算。
4

字符串移动与重复执行

MOVS和STOS通过ESI、EDI操作字符串数据,DF决定地址增减方向,REP按ECX指定次数重复执行字符串指令。
Total
0
Shares
0
0
0

一.32位通用寄存器

EAX 累加和结果寄存器
ECX 循环计数器
EDX i/o指针
EBX 数据指针寄存器
ESP 栈顶指针寄存器
EBP 栈底指针寄存器
ESI 源地址寄存器
EDI 目标地址寄存器

通用寄存器

二.标志寄存器

标志寄存器

1.CF(Carry Flag):进位标志,若运算结果的最高位产生一个进位或借位那么其值为1,否则为0

2.PF(Parity Flag):奇偶标志,用于反映运算结果中1的个数,若个数为偶数则其值为1,否则为0

3.AF(Auxiliary Carry Flag):辅助进位标志,在发生下列情况时其值为1,否则为0
(1)字操作时,发生低字节向高字节进位或借位时
(2)字节操作时,发生低四位向高四位进位或借位时

4.ZF(Zero Flag):零标志,用于反映运算结果是否为0

5.SF(Sign Flag):符号标志,用于反映运算结果的符号位(有符号数运算),其与运算结果的最高位相同

6.OF(Overflow Flag):溢出标志,用于反映有符号数加减运算结果是否溢出,溢出置1,反之置0

7.CF与OF的区别:CF用于表示无符号数运算结果是否超出范围,OF用于表示有符号数运算结果是否超出范围

8.有符号数与无符号数运算结果是否超出范围判断方法

有符号数中结果溢出仅发生于:
正 + 正 与 负 + 负,
当正 + 正 = 负 或 负 + 负 = 正时说明发生溢出
在判断有符号数是否溢出时可利用上图以查数的形式进行判断,其值由大到小为:7F…40 3F…0 FF…C0 BF… 80,在位数大于8bit时在数后加上F与0即可;在无符号数判断中值大小为0…FF,因此当结果超过FF时说明溢出

三.常用汇编指令

1.ADC:(carry)带进位加法
例:ADC BYTE PTR DS:[12FFC4],2
解释:[12FFC4] += 2+CF

2.SBB:(borrow)带借位减法
例:SBB BYTE PIR DS:[12FFC4],2
解释:[12FFC4] -= 2+CF

3.XCHG:交换数据(不存在立即数)
例:XCHG DWORD PTR DS:[12FFC4],EAX
解释:交换[12FFC4]与EAX的值

4.MOVS:移动数据,
例1:MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
简写:MOVSB
解释:从[ESI]中获取一个字节的数据放入[EDI]中
例2:MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]
简写:MOVSW
运行后ESI与EDI的值都将发生改变,如例二中若DF(方向标志)值为0则EDI与ESI各加2,若DF值为1则各减2

5.STOS:将AL/AX/EAX的值存储到[EDI]指定的内存单元
例:STOS BYTE PTR ES:[EDI]
简写:STOSB
其中EDI的值也将在执行后发生改变,改变方式同上

6.REP:按计数寄存器(ECX)中指定的次数重复执行字符串指令
例:REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
解释:上述代码中REP后的部分将执行ECX次,且EDI,ESI的值在每一次执行时都会随DF的值进行改变,因此不会循环覆盖

四.JCC-条件跳转指令

https://blog.csdn.net/fengshh2301/article/details/53327195

Related Posts

AI-generated

嵌入式程序设计基础(ARM9)

从DCB、AREA到ADR、LDR,快速掌握ARM9汇编伪指令的存储分配、段定义与地址加载,并借助子程序、条件判断、循环和内嵌汇编示例建立程序设计基础。
61.5% match November 28, 2020

ARM9指令系统常用指令

从条件执行和CPSR标志位开始,快速梳理ARM9的数据运算、64位乘除法链、分支跳转、寄存器与内存传送,以及批量入栈出栈等常用指令格式。
59.9% match November 28, 2020

Questions Answered

AI-generated

32位通用寄存器各自负责什么?

它们分别用于累加、计数、输入输出、栈和源目标地址。

哪些标志位能反映运算结果?

进位、奇偶、辅助进位、零、符号和溢出均有对应标志。

如何区分CF与OF表示的溢出?

CF针对无符号越界,OF针对有符号加减溢出。

MOVS与REP怎样完成批量内存操作?

MOVS按方向更新地址,REP按ECX计数重复执行。

Next Up

掌握ARM9汇编
掌握ARM9指令
拆解 ELF 链接
ARM9 调试排错
Total
0
Shares
Share 0
Tweet 0
Pin it 0
Brandon

Previous Article
  • Code

算法伪代码

  • August 7, 2020
  • Brandon
View Post
Next Article
  • Code

设计模式-工厂模式

  • September 9, 2020
  • Brandon
View Post
You May Also Like
View Post
  • Code

Letta部署记录

  • Brandon
  • December 26, 2025
View Post
  • Code

WordPress 后台任务利器:使用 BGRunner 构建可靠的异步处理

  • Brandon
  • December 14, 2025
View Post
  • Code

WordPress image offload

  • Brandon
  • December 14, 2025
View Post
  • Code

ComfyUI应用手册

  • Brandon
  • December 6, 2025
View Post
  • Code

Leetcode Java常用代码

  • Brandon
  • February 17, 2024
View Post
  • Code

Golang入门

  • Brandon
  • February 4, 2024
View Post
  • Code

Setting Up and Maintaining a Ubuntu Environment for My Home Server

  • Brandon
  • November 24, 2023
View Post
  • Code

Swift Learning Log

  • Brandon
  • August 31, 2023

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Fullstar

Input your search keywords and press Enter.

嵌入式程序设计基础(ARM9)

ARM9指令系统常用指令

链接原理浅析(基于Unix ELF文件格式)

Windows下ARM编程实验

Linux运行程序与shell编程

Linux shell常用指令

UP NEXT

嵌入式程序设计基础(ARM9)

61.5% match November 28, 2020 0