当前位置: 首页 > news >正文

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

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

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:递增或递减操作数的值。

INC operand
DEC operand

例如:

INC RCX  ; 将RCX寄存器中的值加1

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

CMP operand1, operand2

例如:

CMP RAX, RBX  ; 比较RAX和RBX寄存器中的值

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

JMP destination

例如:

JMP label1  ; 跳转到标签为label1的位置执行

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

JE destination
JNE destination

例如:

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

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

CALL subroutine
RET

例如:

CALL some_function  ; 调用名为some_function的子程序

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

PUSH operand
POP operand

例如:

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执行,用于优化
http://www.lryc.cn/news/336560.html

相关文章:

  • 科研学习|可视化——相关性结果的可视化
  • MapReduce过程解析
  • 速看!这8道嵌入式面试题你都会吗?
  • 基于SSM的电影网站(有报告)。Javaee项目。ssm项目。
  • SOCKS代理是如何提高网络性能和兼容性的?
  • 好菜每回味道不同--建造者模式
  • RuoYi-Cloud下载与运行
  • Vue2.x计算属性
  • Vue中使用require.context()自动引入组件和自动生成路由的方法介绍
  • 【炒股Zero To Hero】MACD金叉死叉到底是否有效,加上这个指标回报率增加197倍
  • Linux网络名称空间和虚拟机有何区别
  • 【UE Niagara】蓝图获取粒子数据
  • 更改el-cascade默认的value和label的键值
  • 2024邮件工单系统排行揭晓:出海必备新宠
  • java题目17:以m行n列二维数组为参数进行方法调用,分别计算二维数组各列元素之和,返回并输出计算结果(MethodCalls17)
  • Python中Python-docx 包的run介绍
  • vue2升级到vue3的一些使用注意事项记录(三)
  • SwiftUI Swift 显示隐藏系统顶部状态栏
  • PowerJob 分布式任务调度简介
  • Java——数组练习
  • 波士顿房价预测案例(python scikit-learn)---多元线性回归(多角度实验分析)
  • 在 Queue 中 poll()和 remove()有什么区别?
  • 实现鼠标在页面点击出现焦点及大十字星
  • 如何在 7 天内掌握C++?
  • FineBI概述
  • 百度Create AI开发者大会剧透丨用好三大AI神器 ,人人都是开发者
  • 外包干了17天,技术倒退明显
  • Unity类银河恶魔城学习记录12-8 p130 Skill Tree UI源代码
  • priority_queue的使用以及模拟实现
  • 主机有被植入挖矿病毒篡改系统库文件