汇编基础-----常见命令基本使用

汇编基础-----常见命令基本使用

MOV:将数据从一个位置复制到另一个位置。

复制代码
MOV destination, source

例如:

复制代码
MOV RAX, RBX  ; 将RBX寄存器中的值复制到RAX寄存器中

ADD/SUB:将两个操作数相加或相减。

复制代码
ADD destination, source
SUB destination, source

例如:

复制代码
ADD RAX, RBX  ; 将RAX寄存器中的值加上RBX寄存器中的值,并将结果存储回RAX

INC/DEC:递增或递减操作数的值。

bash 复制代码
INC operand
DEC operand

例如:

bash 复制代码
INC RCX  ; 将RCX寄存器中的值加1

CMP:比较两个操作数的值。

复制代码
CMP operand1, operand2

例如:

bash 复制代码
CMP RAX, RBX  ; 比较RAX和RBX寄存器中的值

JMP:无条件跳转到指定位置执行。

bash 复制代码
JMP destination

例如:

bash 复制代码
JMP label1  ; 跳转到标签为label1的位置执行

JE/JNE:条件跳转,当相等或不相等时跳转。

bash 复制代码
JE destination
JNE destination

例如:

bash 复制代码
JE label1  ; 如果上一次比较结果为相等,则跳转到标签为label1的位置执行

CALL/RET:调用和返回子程序。

bash 复制代码
CALL subroutine
RET

例如:

bash 复制代码
CALL some_function  ; 调用名为some_function的子程序

PUSH/POP:将数据推入堆栈或从堆栈中弹出数据。

bash 复制代码
PUSH operand
POP operand

例如:

bash 复制代码
PUSH RAX  ; 将RAX寄存器中的值推入堆栈

LEA (Load Effective Address):加载有效地址,将一个内存地址加载到一个寄存器中,而不是加载内存中的值。

复制代码
LEA RDI, [RAX + 8]  ; 将RAX寄存器中的值加上8的偏移量的地址加载到RDI中

AND/OR/XOR/NOT:按位逻辑运算。

复制代码
AND RAX, RBX  ; RAX寄存器和RBX寄存器的值进行按位与运算
OR RDX, RCX  ; RDX寄存器和RCX寄存器的值进行按位或运算
XOR RSI, RDI  ; RSI寄存器和RDI寄存器的值进行按位异或运算
NOT RAX  ; 对RAX寄存器的值进行按位取反

SHL/SHR/SAR:逻辑左移、逻辑右移、算术右移。

复制代码
SHL RAX, 3  ; 将RAX寄存器中的值向左逻辑移位3位
SHR RCX, 1  ; 将RCX寄存器中的值向右逻辑移位1位
SAR RDX, 2  ; 将RDX寄存器中的值向右算术移位2位

LOOP:循环指令,根据CX/ECX/RCX寄存器中的计数值执行循环。

复制代码
LOOP label1  ; 循环执行,直到CX/ECX/RCX寄存器中的值减为0

NOP:空操作,不执行任何操作,通常用于填充代码或调试。

复制代码
NOP  ; 空操作

HLT:停机指令,停止CPU执行。

复制代码
HLT  ; 停止CPU执行

CDQ/CQO:将双字扩展为四字或将四字扩展为八字。

复制代码
rubyCDQ  ; 将EAX中的有符号数扩展到EDX:EAX中
CQO  ; 将RAX中的有符号数扩展到RDX:RAX中

REP:重复指令前缀,用于重复执行字符串操作等。

复制代码
ruby
REP MOVSB  ; 重复执行将字节从DS:SI移动到ES:DI的操作

CMOV:条件移动指令,根据条件码执行条件移动。

复制代码
CMOVZ RAX, RBX  ; 如果ZF标志位为1(表示相等),则将RBX的值移动到RAX

BSWAP:字节顺序交换指令,用于交换32位或64位寄存器中的字节顺序。

复制代码
BSWAP EAX  ; 交换EAX寄存器中的字节顺序

BSF/BSR:查找最低/高位设置位的指令。

复制代码
BSF RCX, RAX  ; 将RAX寄存器中的值的最低设置位的索引加载到RCX中
BSR RDX, RBX  ; 将RBX寄存器中的值的最高设置位的索引加载到RDX中

CPUID:CPU信息指令,用于获取CPU相关信息。

复制代码
CPUID  ; 执行CPUID指令,返回CPU相关信息

RDTSC/RDTSCP:时间戳计数器指令,用于获取时间戳计数器的当前值。

复制代码
RDTSC  ; 将时间戳计数器的当前值加载到EDX:EAX中
RDTSCP ; 类似于RDTSC,但返回值包括了CPU核心编号

XCHG:交换指令,用于交换寄存器或内存中的值。

复制代码
XCHG RAX, RBX  ; 交换RAX和RBX寄存器中的值
XCHG [RDI], RSI  ; 交换RDI寄存器指向的内存地址和RSI寄存器中的值

MUL/IMUL/DIV/IDIV:无符号乘法、有符号乘法、无符号除法、有符号除法指令。

复制代码
MUL RBX  ; 无符号乘法,将RAX和RBX中的值相乘,结果存放在RDX:RAX中
IMUL RCX, RDX, 5  ; 有符号乘法,将RDX和5相乘,结果存放在RCX中
DIV RBX  ; 无符号除法,将RDX:RAX中的值除以RBX,商存放在RAX中,余数存放在RDX中
IDIV RBX  ; 有符号除法,将RDX:RAX中的值除以RBX,商存放在RAX中,余数存放在RDX中

FPU指令:用于浮点数运算的指令集,如加载浮点数、加减乘除等。

复制代码
FLD real_value  ; 将实数值加载到FPU栈顶
FADD ST(0), ST(1)  ; 将栈顶和次栈顶的浮点数相加,并将结果存放在栈顶

SIMD指令:用于向量化操作的指令集,如SSE、AVX等。

复制代码
MOVAPS XMM1, XMM2  ; 将XMM2中的值复制到XMM1中
ADDPS XMM1, XMM2  ; 将XMM1和XMM2中的浮点数向量相加

控制指令:用于程序流程控制的指令,如条件跳转、循环等。

复制代码
JCXZ label  ; 如果CX寄存器为0,则跳转到指定标签
LOOP label  ; 循环执行,直到CX寄存器为0

内存访问指令:用于访问内存的指令,如加载、存储等。

复制代码
MOV [address], EAX  ; 将EAX中的值存储到指定内存地址
MOV EAX, [address]  ; 将指定内存地址中的值加载到EAX中

系统调用指令:用于与操作系统进行交互的指令,如Linux中的int 0x80、syscall等。

复制代码
INT 0x80  ; 发起系统调用
SYSCALL  ; 发起系统调用(在x86-64 Linux中)

辅助指令:用于辅助调试和优化的指令,如NOP、HLT、PAUSE等。

复制代码
NOP  ; 空操作,不执行任何操作
HLT  ; 停止CPU执行
PAUSE  ; 暂停CPU执行,用于优化
相关推荐
我在人间贩卖青春8 天前
汇编之伪指令
汇编·伪指令
我在人间贩卖青春8 天前
汇编之伪操作
汇编·伪操作
济6178 天前
FreeRTOS基础--堆栈概念与汇编指令实战解析
汇编·嵌入式·freertos
myloveasuka8 天前
汇编TEST指令
汇编
我在人间贩卖青春8 天前
汇编编程驱动LED
汇编·点亮led
我在人间贩卖青春8 天前
汇编和C编程相互调用
汇编·混合编程
myloveasuka9 天前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子9 天前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka9 天前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春10 天前
汇编之分支跳转指令
汇编·arm·分支跳转