x86汇编

news2025/1/23 22:28:00

寄存器

在这里插入图片描述

常规

AX累加,算术运算或函数返回值存储
基址寄存器(BX),指向数据的指针
计数寄存器CX,移位,循环,一些量
数据寄存器DX,运算超过16位,高16位放在DX
堆栈指针寄存器SP,用于指向栈顶
栈基址指针寄存器BP,指向堆栈底部
源变址寄存器SI,指向流操作的源的一个指针
目标索引寄存器DI,流操作指向目标的指针
在这里插入图片描述

段寄存器

CS指向代码段
DS数据段
FS GS结构体

标志位寄存器

DF 表示运算时的进位
PF 奇偶标志,含偶数个1为1
AF 进位
ZF 零标志寄存器,若结果为0则为1
SF 设置为最高位的有效位
OF 大数相加会溢出时为1

内存和寻址模式

立即数寻址方式

操作数直接放在指令中,紧跟在操作码后,作为指令的一部分,存放在代码段
mov al,5
mov eax,32986

寄存器寻址

操作数在寄存器中
mov ax,bx

直接寻址方式

操作数在储存器中,指令给出存储器的偏移地址
mov ax,[2000h].一般访问全局变量用到

间接寻址

操作数的地址在基址寄存器或者变址寄存器中,而操作数在存储器中
mov ax,[bx]

基变址寻址

mov ax,[bx+si]
mov bx,[bp+si]
数组寻址会用到

寄存器相对寻址

mov ax,[di+100h]位移量是一个数字

常见指令

数据传送指令

mov:省略
push:操作数压入栈中,用于函数调用过程,ESP是栈顶,压栈前,先把ESP减4,再压入
push eax
pop:与push相反,先esp+4
lea:算地址的指令,把中括号的地址算出来,放到寄存器中
lea edi,[ebx+4*esi]

控制指令

jz
ja
jae
jb
jbe
je

调用约定

stdcall

参数从右向左压入堆栈
函数自身修改堆栈

push 2;第二个参数入栈
push 1;第一个参数入栈
call function;调用函数,把cs:eip入栈
push ebp;压入一个保存栈顶寄存器,指向栈顶,函数退出恢复
mov ebp,esp;把指向栈顶的寄存器esp存入ebp
mov eax,[ebp+8H];堆栈中依次存有ebp,cs:eip,12.ebp+8H指向1
add eax,[ebp+0CH];ebp+0CH处保存了2,把1+2赋值给eax
mov esp,ebp;恢复esp
pop ebp;
ret 8;入了两个参数各占4个字节,ret进行堆栈平衡

cdel

首先右向左入栈
函数本身不清理堆栈,调用者负责清理

push 2;第二个参数入栈
push 1;第一个参数入栈
call function;调用函数
add esp,8;首先把栈顶移8字节
push ebp;压入一个保存栈顶寄存器,指向栈顶,函数退出恢复
mov ebp,esp;把指向栈顶的寄存器esp存入ebp
mov eax,[ebp+8H];堆栈中依次存有ebp,cs:eip,12.ebp+8H指向1
add eax,[ebp+0CH];ebp+0CH处保存了2,把1+2赋值给eax
mov esp,ebp;恢复esp
pop ebp;
ret;

fastcall

函数第一个和第二个DWORD参数通过ECX EDX传递
其他参数右向左入栈
被调用函数清理堆栈

mov edx,DWORD PTR [ebx-0xcC];
mov eax,DWORD PTR [ebp-0x10];
push DWORD PTR [ebp-0x4];
push DWORD PTR [ebp-0x8];
mov ecx,eax;
call 50e  <<a2>a2>;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统设计访谈-业内人事指南 《System Design Interview-An insider‘s guide》中文版

前言&#xff1a; We are delighted that you have decided to join us in learning the system design interviews. System design interview questions are the most difficult to tackle among all the technical interviews. The questions require the interviewees to de…

(Qt) 重定向内置日志

文章目录 前言代码.pri 独立的包log.priLOG_Config.hppLOG.hLOG.cpp examplelog_test.promain.cpp 使用效果debug模式release模式 分析Qt内部结构核心函数核心配置 END 前言 在软件开发过程中&#xff0c;避免不了日志的使用。 在Qt中&#xff0c;我们平常用的#include <Q…

Django | 解决admin增加新用户只有用户名密码和确认密码的问题

文章目录 如图所示&#xff0c;下面给出解决方案&#xff1a; 如果您使用 使用 Django 默认的后台管理界面添加用户时&#xff0c;只看到了三个字段&#xff08;通常是 username、password和 repassword&#xff09;&#xff0c;那么可以通过定义 add_fieldsets 属性来增加更多…

Jenkins关联GitLab

1、Jenkins、GitLab服务器上面生成公钥、私钥 ssh-keygen -t ecdsa # 回车 指到没有交互式2、GitLab WEB端添加 刚刚生成的公钥 cat ~/.ssh/id_ecdsa.pub # 查看密钥登入gitlab > 右上角头像 > 偏好设置 > SSH秘钥 使用相同方法 添加Jenkins秘钥 3、Jenkins创建一…

Graph push pull

图数据的存储结构 键值对存储因具有可扩展强、结构简单、查找迅速等特点被广泛应用于图查询系统中&#xff0c;如Wukong、Trinity.RDF。在Wukong系统中&#xff0c;图上的边会转换成键值对进行存储&#xff0c;将顶点编号、边的类型、边的方向、值的地址和大小等信息组合成键&…

Bitmap 实现当前在线用户数量

Bitmap是什么&#xff1f; Bitmap是Redis中的一种数据结构&#xff0c;它是一个类似于位数组的数据结构&#xff0c;用于处理位数据。在Redis中&#xff0c;Bitmap是使用字符串来存储的&#xff0c;一个Byte可以存储8个二进制位&#xff0c;一个字符串可以存储232个二进制位&a…

成功解决:NLTK包的安装错误

成功解决NLTK包的安装错误 创建环境NLP_Pre_train l环境 conda create -n NLP_Pre_train python3.8激活 conda activate NLP_Pre_train安装NLTK&#xff0c;套用以下命令 pip install NLTK之后是验证NLTK是否安装成功&#xff0c;采用的步骤如下所示&#xff1a; import n…

认识Java文件操作和IO流

文件操作&#xff08;一&#xff09; 文章目录 文件操作&#xff08;一&#xff09;文件的特性路径文件分类File类的使用文件的创建文件的删除文件创建加目录创建列出当前文件夹包含的文件文件重命名函数 文件的特性 我们所说的文件一般指的是硬盘文件&#xff0c;其实文件不止…

Minio对象存储服务介绍、单机和集群部署及其使用

Minio对象存储服务介绍、单机和集群部署及其使用 前言Minio简介Minio版本选择AGPL协议说明Minio优缺点优点缺点 Minio分server 和clientminio-client下载二进制文件查看 mc 版本 Minio分布式集群详细搭建基础环境操作系统Minio下载 准备工作1、机器资源2、创建相关目录3、创建启…

IOC容器与DI依赖注入示例

IOC容器与DI依赖注入示例 IOC深入理解IOC示例&#xff1a; DI深入理解DI示例 IOC深入理解 我们先通过几个问题来加深一下对IOC的理解 (1)Spring是使用IOC容器来管理bean对象的&#xff0c;我们主要管理什么? 主要管理项目中所使用到的类对象&#xff0c;比如(Service层对像和…

哈希表|STL使用

哈希表 时间复杂度为O(1) 拉链法 把X代表的数字映射到N所在区间&#xff0c;有可能会发生冲突俩个或多个数字映射到1个数 拉链法&#xff1a;把冲突的数字挂起来&#xff0c;用单链表挂起来 一般取模的数要取成质数&#xff0c;而且这个质数离二的n次幂要比较远&#xff0c;这样…

什么是深度学习?

目录 简介 深度学习的由来 深度学习未来的趋势 总结 简介 深度学习是在20世纪80年代被提出来的&#xff0c;主要是由加拿大的计算机科学家Geoffrey Hinton、Yoshua Bengio、Yann LeCun等人发起的。Geoffrey Hinton等人在经过多年的研究和实践之后&#xff0c;…

C语言的指针(进阶)

目录 数组指针 数组指针的使用 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 数组指针 数组指针是指针&#xff1f;还是数组&#xff1f; 答案是&#xff1a;指针 数组指针也就是指向一个数组的指针 看下面两条代码&#xff1a; int *p1[10]; int (*p2)[10]; …

Manjaro安装clash-for-windows-bin

安装 安装Clash for Windows yay -S clash-for-windows-bin 配置 命令行进入~/.config/clash/ &#xff0c;配置文件 config.yaml 和 Country.mmdb wget -O config.yaml [订阅链接]wget -O Country.mmdb https://gitee.com/mirrors/Pingtunnel/raw/master/GeoLite2-Country.…

领导给了一千多个需求,这个排序法救了我的命……

什么是MoSCoW排序法&#xff1f; 莫斯科排序法是一种优先级排序法&#xff0c;用于管理需求、任务或功能列表。该方法可以帮助团队确定哪些需求、任务或功能是最重要的&#xff0c;并决定在特定时间段内是否需要完成它们。 所以在对需求进行排序时&#xff0c;可以从以下维度…

优思学院|六西格玛常见问题有哪些?

要实现高质量、高效率和高客户满意度的目标&#xff0c;许多企业采用了六西格玛方法。然而&#xff0c;在实施过程中&#xff0c;往往会遇到各种各样的问题。优思学院会在这里探讨一下几个六西格玛常见问题&#xff0c;并提供解决方案&#xff0c;以帮助企业成功实施六西格玛方…

JSONP数据劫持漏洞

​介绍 JSONP&#xff08;JSON with Padding&#xff09;是 json 的一种"使用模式"&#xff0c;可以让网页从别的域名&#xff08;网站&#xff09;那获取资料&#xff0c;即跨域读取数据&#xff1b;它利用的是script标签的 src 属性不受同源策略影响的特性&#x…

GoNote第二章 Moudles

Go Modules 1. 介绍 Go modules是官方提供的go包管理工具&#xff0c;用于解决go包管理和依赖问题&#xff1b;从1.11开始引入&#xff0c;到现在1.14已经比较完善&#xff0c;1.16已经全面推荐使用&#xff0c;并且默认为开启&#xff1b;Go Modules类似于JS的NPM&#xff0…

校园小助手【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a; 更多系统资源库地址&#xff1a;骚戴的博客_CSDN_更多系统资源 更多系统…

Apple iWork(Pages、Numbers、Keynote)13.0 - 文档、电子表格、演示文稿

请访问原文链接&#xff1a;https://sysin.org/blog/apple-iwork-13/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 苹果今天将其专为 iOS 和 macOS 设备设计的 iWork 应用套件更新为版本 12 (sysin)&#xff0c;引入了许多新…