x86架构基础汇编知识
通用寄存器
EAX 32位 函数返回值
AX 低16位 AH 高八位 AL 低八位
EBX 32位
ECX 32位 循环次数,this指针
EDX 32位
EBP 32位 栈底寄存器
ESP 32位 栈顶寄存器
ESI 源索引寄存器
EDI 目标索引寄存器
EIP 无法直接通过汇编操作
例子
mov al,0xff
add al,1
产生截断mov al,0xff
add ax,1
产生进位
状态寄存器
状态寄存器(Status Register),也称为标志寄存器(Flag
Register),是计算机中的一种特殊寄存器。状态寄存器用于保存关于计算机状态和执行结果的信息,通常由一组二进制位组成,每个位都对应一个特定的状态标志。在x86架构中,状态寄存器通常由一些标志位组成,其中包括:
- 零标志位(Zero Flag,ZF):指示最近的运算结果是否为零。如果运算结果为零,则ZF被置为1,否则为0。
- 进位标志位(Carry Flag,CF):用于处理进位和借位操作。如果最近的运算产生了进位(或借位),CF被置为1,否则为0。
- 溢出标志位(Overflow Flag,OF):用于检测运算结果是否溢出。如果最近的运算结果造成了溢出,OF标志被置为1,否则为0。
- 符号标志位(Sign Flag,SF):指示最近的运算结果的符号。如果结果为负数,则SF被置为1,否则为0。
- 奇偶标志位(Parity Flag,PF):指示最近的运算结果中设置了偶数个位的数量。如果结果中偶数个位被设置为1,则PF被置为1,否则为0。
- 调整标志位(Adjust Flag,AF):在二进制代码运算中用于处理BCD码(二进制编码的十进制数)。在一般的计算中不常使用。
除了上述标志位外,不同架构和处理器还可能存在其他特定的标志位。
状态寄存器广泛用于控制和判断程序的执行流程,以及进行条件分支和循环控制。通过检查和设置状态寄存器中的标志位,程序可以根据运算结果和条件进行相应的操作。
JCC指令
指令 | 条件 |
---|---|
JZ | 等于(ZF=1) |
JE | 等于(ZF=1) |
JNZ | 不等于(ZF=0) |
JNE | 不等于(ZF=0) |
JA | 无符号大于(CF=0且ZF=0) |
JNBE | 无符号大于(CF=0且ZF=0) |
JAE | 无符号大于等于(CF=0) |
JNB | 无符号大于等于(CF=0) |
JNC | 无符号大于等于(CF=0) |
JB | 无符号小于(CF=1) |
JNAE | 无符号小于(CF=1) |
JBE | 无符号小于等于(CF=1或ZF=1) |
JNA | 无符号小于等于(CF=1或ZF=1) |
JCXZ | CX/ECX为零 |
JECXZ | ECX为零 |
JG | 有符号大于(ZF=0且SF=OF) |
JNLE | 有符号大于(ZF=0且SF=OF) |
JGE | 有符号大于等于(SF=OF) |
JNL | 有符号大于等于(SF=OF) |
JL | 有符号小于(SF≠OF) |
JNGE | 有符号小于(SF≠OF) |
JLE | 有符号小于等于(ZF=1或SF≠OF) |
JNG | 有符号小于等于(ZF=1或SF≠OF) |
JO | 溢出(OF=1) |
JNO | 未溢出(OF=0) |
JS | 负数(SF=1) |
JNS | 非负数(SF=0) |
汇编指令
分类 | 示例指令 | 功能 |
---|---|---|
数据传输指令 | MOV | 从一个位置复制数据到另一个位置 |
PUSH | 将数据推入堆栈 | |
POP | 将数据从堆栈弹出 | |
XCHG | 交换两个位置的数据 | |
LEA | 加载地址 | |
MOVS | 将一个字符串的数据复制到另一个字符串 | |
LODS | 将数据从一个位置加载到累加器 | |
STOS | 将累加器中的数据存储到一个位置 | |
算术和逻辑指令 | ADD | 将两个数相加 |
SUB | 从一个数中减去另一个数 | |
MUL | 执行无符号乘法 | |
DIV | 执行无符号除法 | |
AND | 执行逻辑与操作 | |
OR | 执行逻辑或操作 | |
XOR | 执行异或操作 | |
NOT | 执行逻辑非操作 | |
控制流指令 | JMP | 无条件跳转到指定地址 |
Jcc | 条件跳转指令,根据标志位执行跳转 | |
CALL | 调用子程序或函数 | |
RET | 返回子程序或函数调用点 | |
INT | 触发中断服务例程 | |
LOOP | 根据计数器值循环执行指令 | |
HLT | 暂停处理器运行 | |
状态标志位指令 | CMP | 比较两个数 |
TEST | 按位进行与操作并更新标志位 | |
CLC | 清除进位标志位 | |
STC | 设置进位标志位 | |
CMC | 取反进位标志位 | |
CLD | 清除方向标志位 | |
STD | 设置方向标志位 | |
字符串和循环指令 | MOVS | 将一个字符串的数据复制到另一个字符串 |
CMPS | 比较两个字符串的数据 | |
SCAS | 在字符串中搜索指定的数据 | |
REP | 重复执行指令块 | |
REPE/REPZ | 如果相等则重复执行指令块 | |
REPNE/REPNZ | 如果不相等则重复执行指令块 | |
堆栈指令 | PUSH | 将数据推入堆栈 |
POP | 将数据从堆栈弹出 | |
PUSHAD | 将所有通用寄存器的值推入堆栈 | |
POPAD | 将所有通用寄存器的值从堆栈弹出 | |
PUSHA | 将通用寄存器的值推入堆栈 | |
POPA | 将通用寄存器的值从堆栈弹出 | |
过程和函数指令 | CALL | 调用子程序或函数 |
RET | 返回子程序或函数调用点 | |
ENTER | 建立堆栈帧 | |
LEAVE | 恢复调用者的堆栈帧 | |
PROC | 定义一个过程 | |
ENDP | 定义过程结束 | |
I/O指令 | IN | 从指定端口读取数据 |
OUT | 将数据写入指定端口 | |
INS | 从数据端口读取数据到字符串 | |
OUTS | 将字符串的数据写入到数据端口 | |
CLI | 关中断 | |
STI | 开中断 |
通用寄存器
EAX 32位 函数返回值
AX 低16位 AH 高八位 AL 低八位
EBX 32位
ECX 32位 循环次数,this指针
EDX 32位
EBP 32位 栈底寄存器
ESP 32位 栈顶寄存器
ESI 源索引寄存器
EDI 目标索引寄存器
EIP 无法直接通过汇编操作
例子
mov al,0xff
add al,1
产生截断mov al,0xff
add ax,1
产生进位
状态寄存器
编辑
2023-08-30T09:03:45.png
状态寄存器(Status Register),也称为标志寄存器(Flag
Register),是计算机中的一种特殊寄存器。状态寄存器用于保存关于计算机状态和执行结果的信息,通常由一组二进制位组成,每个位都对应一个特定的状态标志。在x86架构中,状态寄存器通常由一些标志位组成,其中包括:
- 零标志位(Zero Flag,ZF):指示最近的运算结果是否为零。如果运算结果为零,则ZF被置为1,否则为0。
- 进位标志位(Carry Flag,CF):用于处理进位和借位操作。如果最近的运算产生了进位(或借位),CF被置为1,否则为0。
- 溢出标志位(Overflow Flag,OF):用于检测运算结果是否溢出。如果最近的运算结果造成了溢出,OF标志被置为1,否则为0。
- 符号标志位(Sign Flag,SF):指示最近的运算结果的符号。如果结果为负数,则SF被置为1,否则为0。
- 奇偶标志位(Parity Flag,PF):指示最近的运算结果中设置了偶数个位的数量。如果结果中偶数个位被设置为1,则PF被置为1,否则为0。
- 调整标志位(Adjust Flag,AF):在二进制代码运算中用于处理BCD码(二进制编码的十进制数)。在一般的计算中不常使用。
除了上述标志位外,不同架构和处理器还可能存在其他特定的标志位。
状态寄存器广泛用于控制和判断程序的执行流程,以及进行条件分支和循环控制。通过检查和设置状态寄存器中的标志位,程序可以根据运算结果和条件进行相应的操作。
JCC指令
指令 | 条件 |
---|---|
JZ | 等于(ZF=1) |
JE | 等于(ZF=1) |
JNZ | 不等于(ZF=0) |
JNE | 不等于(ZF=0) |
JA | 无符号大于(CF=0且ZF=0) |
JNBE | 无符号大于(CF=0且ZF=0) |
JAE | 无符号大于等于(CF=0) |
JNB | 无符号大于等于(CF=0) |
JNC | 无符号大于等于(CF=0) |
JB | 无符号小于(CF=1) |
JNAE | 无符号小于(CF=1) |
JBE | 无符号小于等于(CF=1或ZF=1) |
JNA | 无符号小于等于(CF=1或ZF=1) |
JCXZ | CX/ECX为零 |
JECXZ | ECX为零 |
JG | 有符号大于(ZF=0且SF=OF) |
JNLE | 有符号大于(ZF=0且SF=OF) |
JGE | 有符号大于等于(SF=OF) |
JNL | 有符号大于等于(SF=OF) |
JL | 有符号小于(SF≠OF) |
JNGE | 有符号小于(SF≠OF) |
JLE | 有符号小于等于(ZF=1或SF≠OF) |
JNG | 有符号小于等于(ZF=1或SF≠OF) |
JO | 溢出(OF=1) |
JNO | 未溢出(OF=0) |
JS | 负数(SF=1) |
JNS | 非负数(SF=0) |
编辑
2023-08-30T09:14:35.png
汇编指令
分类 | 示例指令 | 功能 |
---|---|---|
数据传输指令 | MOV | 从一个位置复制数据到另一个位置 |
PUSH | 将数据推入堆栈 | |
POP | 将数据从堆栈弹出 | |
XCHG | 交换两个位置的数据 | |
LEA | 加载地址 | |
MOVS | 将一个字符串的数据复制到另一个字符串 | |
LODS | 将数据从一个位置加载到累加器 | |
STOS | 将累加器中的数据存储到一个位置 | |
算术和逻辑指令 | ADD | 将两个数相加 |
SUB | 从一个数中减去另一个数 | |
MUL | 执行无符号乘法 | |
DIV | 执行无符号除法 | |
AND | 执行逻辑与操作 | |
OR | 执行逻辑或操作 | |
XOR | 执行异或操作 | |
NOT | 执行逻辑非操作 | |
控制流指令 | JMP | 无条件跳转到指定地址 |
Jcc | 条件跳转指令,根据标志位执行跳转 | |
CALL | 调用子程序或函数 | |
RET | 返回子程序或函数调用点 | |
INT | 触发中断服务例程 | |
LOOP | 根据计数器值循环执行指令 | |
HLT | 暂停处理器运行 | |
状态标志位指令 | CMP | 比较两个数 |
TEST | 按位进行与操作并更新标志位 | |
CLC | 清除进位标志位 | |
STC | 设置进位标志位 | |
CMC | 取反进位标志位 | |
CLD | 清除方向标志位 | |
STD | 设置方向标志位 | |
字符串和循环指令 | MOVS | 将一个字符串的数据复制到另一个字符串 |
CMPS | 比较两个字符串的数据 | |
SCAS | 在字符串中搜索指定的数据 | |
REP | 重复执行指令块 | |
REPE/REPZ | 如果相等则重复执行指令块 | |
REPNE/REPNZ | 如果不相等则重复执行指令块 | |
堆栈指令 | PUSH | 将数据推入堆栈 |
POP | 将数据从堆栈弹出 | |
PUSHAD | 将所有通用寄存器的值推入堆栈 | |
POPAD | 将所有通用寄存器的值从堆栈弹出 | |
PUSHA | 将通用寄存器的值推入堆栈 | |
POPA | 将通用寄存器的值从堆栈弹出 | |
过程和函数指令 | CALL | 调用子程序或函数 |
RET | 返回子程序或函数调用点 | |
ENTER | 建立堆栈帧 | |
LEAVE | 恢复调用者的堆栈帧 | |
PROC | 定义一个过程 | |
ENDP | 定义过程结束 | |
I/O指令 | IN | 从指定端口读取数据 |
OUT | 将数据写入指定端口 | |
INS | 从数据端口读取数据到字符串 | |
OUTS | 将字符串的数据写入到数据端口 | |
CLI | 关中断 | |
STI | 开中断 |
相关文章:
x86架构基础汇编知识
通用寄存器 EAX 32位 函数返回值 AX 低16位 AH 高八位 AL 低八位 EBX 32位 ECX 32位 循环次数,this指针 EDX 32位 EBP 32位 栈底寄存器 ESP 32位 栈顶寄存器 ESI 源索引寄存器 EDI 目标索引寄存器 EIP 无法直接通过汇编操作 例子 mov al,0xff …...
ThreadLocal的原理
ThreadLocal是Java中的一个类,它提供了线程本地变量的功能。每个线程都可以独立地访问自己的ThreadLocal变量,并且不会受到其他线程的干扰。 public class ThreadLocal<T> { ThreadLocal的原理是通过使用一个ThreadLocalMap来存储每个线程的变量副…...
Chrome 108版(64-bit 108.0.5359.125)网盘下载
还在用Selenium的朋友们注意了,目前Chrome的最新版是116,而官方的Chromedriver只支持到115版。 可惜Google不提供旧版Chrome的下载方式,需要旧版的很难回去了。如果真的想要旧版的Chrome,只能民间自救。 我在2022年12月备份了C盘…...
Mars3d插件参考开发教程并在相关页面引入
问题场景: 1.在使用Mars3d热力图功能时,提示mars3d.layer.HeatLayer is not a constructor 问题原因: 1.mars3d的热力图插件mars3d-heatmap没有安装引用。 解决方案: 1.参考开发教程,找到相关的插件库:Mars3D 三维…...
Windows 性能突然打鸡血,靠 Bug 修复了多年顽疾
要说 的 Bug 集中地,当属资源管理器。 速度缓慢、卡顿、崩溃,不同设备、不同版本的用户都有不同的感受。 严格来说,这其实是 Windows 的传统艺能,要完美修复可不容易。 而作为小老弟的文件资源管理器,时不时来个无响…...
亚马逊封买家账号的原因有哪些
亚马逊可能封锁买家账号的原因有多种,主要是出于保护市场和维护平台秩序的考虑。以下是一些可能导致亚马逊封锁买家账号的常见原因: 1、涉及违规行为:如果买家违反了亚马逊的使用政策,如发表虚假评价、滥用退货政策、欺诈或盗窃等…...
1.0零基础尝试DCM通讯(c-store)
前言 本项目是对医院放疗及相关设备的互通互联。对dcm文件及数据协议是本项目的基础。 今天在项目组成员支持下,对dcm通讯进行了初步的尝试,有人之路,这个过程可以说是非常愉快,于是乎准备将这个愉快的过程记录,方便自己查阅和后来人。 c-store 本次的安装和测试使用的…...
vue之封装tab类组件
vue之封装tab类组件 vue之封装tab类组件CSS样式方面JS方面 vue之封装tab类组件 需求:点击【上一步】、【下一步】按钮,切换tab,且有淡入浅出的动画。 CSS样式方面 <div class"parent"><div class"childDiv" id…...
固定资产管理中净值怎么算
在资产管理的领域中,我们经常听到“净值”这个词。然而,对于许多人来说,净值的概念仍然模糊不清。本文将试图揭示固定资产管理的净值计算方法,并提供一些创新的观点。 我们需要明确什么是净值。在财务术语中,净值是…...
SQlite操作后如何正确退出
在 C 语言中,使用 SQLite 库进行数据库操作后,可以通过以下步骤来正常退出和关闭 SQLite 连接: 关闭数据库连接:在完成数据库操作后,使用 sqlite3_close() 函数来关闭 SQLite 连接。该函数接受一个指向 sqlite3 数据库…...
phpcmsV9.6.0sql注入漏洞分析
目录 前言 环境准备 漏洞点 看一看parse_str函数 看一看sys_auth函数 看一看get_one函数 全局搜索sys_auth($a_k, ENCODE) 查看哪里调用了 set_cookie 查看safe_replace函数 判断登录绕过 index的业务 加载modules/wap/index.php 加载modules/attachment/attachme…...
深入理解正则表达式:高效处理文本数据的利器
💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 正则表达式是一种…...
张雪峰说网络空间安全专业
网络空间安全专业是一个涵盖了计算机科学、信息安全、法律等多个领域的学科,旨在研究保护网络空间的信息系统和数据不被非法侵入、破坏、篡改、泄露的技术和管理手段。 网络安全专业的重要性 随着网络技术的发展,网络安全问题也日益凸显,黑客…...
day11-ArrayList学生管理系统
1.ArrayList 集合和数组的优势对比: 长度可变添加数据的时候不需要考虑索引,默认将数据添加到末尾 1.1 ArrayList类概述 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 长度可以变化…...
java springboot 如何实现小程序支付
今天给大家分享java小程序支付 首先我们学习任何东西要先看官网 下面是支付业务流程 我们具体用代码去实现上面的业务流程 功能截图 代码截图 pay(){//调用后台生成订单var orderNumber "20210101123456";var amount 0.01;WxPay.wxpay(app, amount, orderNumber…...
题目:2839.判断通过操作能否让字符串相等 I
题目来源: leetcode题目,网址:2839. 判断通过操作能否让字符串相等 I - 力扣(LeetCode) 解题思路: 两字符串奇数位字符计数相等并且偶数位字符计数相等是可通过操作让字符串相等。 解题代码ÿ…...
【Prometheus】Prometheus+Grafana部署
Prometheus 概述 官网https://prometheus.io/docs/introduction/overview/ Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的…...
无CDN场景下的传统架构接入阿里云WAF防火墙的配置实践
文章目录 1.配置网站接入WAF防火墙1.1.配置网站接入方式1.2.填写网站的信息1.3.WAF防火墙生成CNAME地址 2.配置WAF防火墙HTTPS证书3.修改域名DNS解析记录到WAF防火墙4.验证网站是否接入WAF防火墙 传统架构接入WAF防火墙非常简单,配置完WAF网站接入后,将得…...
和鲸技术!国家气象信息中心人工智能气象应用基础技术平台上线
8 月 31 日,由和鲸科技支持的人工智能气象应用基础支撑技术平台 V1.0 正式于国家气象信息中心(下简称“信息中心”)上线发布。该平台主要为人工智能技术在气象领域的融合应用提供基础性支撑,目前,已为基于深度学习的短…...
GIT高级使用技巧
GIT高级使用技巧 导出GIT日志到文件 按照 <哈希> - <作者名> <作者邮箱地址> - <作者日期> : <commit描述> 的格式导出日志 git log --prettyformat:"%H - %an <%ae> - %ad : %s" master > log.txt筛选日志并按照从旧到新…...
JavaScript中的垃圾回收机制
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript的垃圾回收机制⭐ 内存管理⭐ 引用计数⭐ 标记-清除算法⭐ 内存泄漏⭐ 性能优化⭐ 使用delete操作符⭐ 注意循环中的变量引用⭐ 使用工具进行内存分析⭐ 使用合适的数据结构⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探…...
Java替换 html 中隐藏的空格字符
前言 有时候前端传过来的 json 字符串,包含了隐藏的空格 &NBSP 字符,在后端 Debug 的时候可以看到是 ,但 system.out.print() 打印出来的是正常的空格,这样看着正常但其实放入 fastjson 中去做解析会失败,所以我…...
微博情绪分类
引自:https://blog.csdn.net/no1xiaoqianqian/article/details/130593783 友好借鉴,总体抄袭。 所需要的文件如下:https://download.csdn.net/download/m0_37567738/88340795 import os import torch import torch.nn as nn import numpy a…...
探索项目追踪平台的多样性及功能特点
项目追踪平台是现代项目管理中不可或缺的工具,它可以帮助团队高效地跟踪和管理项目进度、任务和资源分配。在当今快节奏的商业环境中,有许多热门的项目追踪平台可供选择。 本文总结了当下热门的项目追踪平台,供您参考~ 1、Zoho Projects&am…...
git简单命令
简易的命令行入门教程: Git 全局设置: git config --global user.name “yyyyjinying” git config --global user.email “12343343qq.com” 创建 git 仓库: mkdir wx-project cd wx-project git init touch README.md git add README.md git commit -m “first commit” …...
Fiber 架构的起源和含义
Fiber 架构的起源 Fiber 架构的起源可以追溯到 React 团队在 2017 年提出的一项重大改进计划。在过去的 React 版本中,渲染过程是基于递归的,即组件树的遍历是通过递归函数来完成的。这种方式在大规模复杂应用中可能会引发一些性能问题,例如…...
Vue3高频面试题+八股文
Vue3.0中的Composition Api 开始之前 Compos:1 tion API可以说是ue3的最大特点,那么为什么要推出Compos1t1on Api,解决了什么问趣? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的…...
对数据库三大范式的理解
首先,要明确一个概念,范式的提出到逐步精进,从第一范式到第三范式,甚至于BCNF范式,逐步优化是为了解决插入异常、删除异常以及改善数据冗余的。 第一范式:符合第一范式的要求,即数据表的属性值均…...
(matplotlib)如何不显示x轴或y轴刻度(ticks)
文章目录 背景plt版本ax子图版本 解决办法plt版本ax子图版本 背景 import numpy as np import matplotlib.pyplot as pltplt版本 x[1,2,3] y[4,5,6] plt.plot(x,y)ax子图版本 x[1,2,3] y[4,5,6] axplt.subplot() ax.plot(x,y)可以发现,正常情况下是有刻度的&…...
U8用友ERP本地部署异地远程访问:内网端口映射外网方案
文章目录 前言1. 服务器本机安装U8并调试设置2. 用友U8借助cpolar实现企业远程办公2.1 在被控端电脑上,点击开始菜单栏,打开设置——系统2.2 找到远程桌面2.3 启用远程桌面 3. 安装cpolar内网穿透3.1 注册cpolar账号3.2 下载cpolar客户端 4. 获取远程桌面…...
建设团队网站/疫情放开最新消息今天
http://blog.flexexamples.com/2007/11/13/removing-the-default-drop-shadow-from-a-linechart-chart-in-flex/转载于:https://www.cnblogs.com/myssh/archive/2010/10/12/1849125.html...
即墨网站建设哪里有/简述如何优化网站的方法
课后进行了下面的练习: 1.声明public 不声明参数是public,则main中无法访问。 error: 声明public后即可访问。 2,passing by value or by reference passing by value:method中可以改变数值,method外则不会改变。 结果…...
做国外直播网站/创意营销
StringBuffer和StringBuilder,都是继承了AbstractStringBuilder,它们的底层char数组value默认的初始化容量是16,扩容只需要修改底层的char数组,两者的扩容最终都会调用到AbstractStringBuilder类相同的方法:直入正题,扩…...
美工网站做兼职/如何做好关键词的优化
我们在搭建网络时,通常要继承nn.Module这个模块,并且实现其forward方法,那么这个基类中到底有何属性呢? def __init__(self):self._parameters OrderedDict()self._modules OrderedDict()self._buffers OrderedDict()self._ba…...
通辽网站建设/网络舆情的网站
通过ftp通道将数据传出来。上传1.xml <!DOCTYPE xmlrootname [<!ENTITY % aaa SYSTEM "http://192.168.172.128:1234/ext.dtd"><!ENTITY % bbb SYSTEM "file:///E:///1.txt">%aaa;%ccc;%ddd;]> ext.dtd内容如下 <!ENTITY % ccc "…...
常州便宜的做网站服务/外链工具xg
Python 爬虫模拟登录 Python 爬虫模拟登录是使用脚本实现自动登录,部分站点需要逆向加密逻辑,更多的站点会采用验证码进行鉴权验证。 本文为大家带来最简单的登录,其核心用到的是 requests 模拟 POST 请求。 本次练习使用的站点是 https:/…...