初学汇编

news/2025/9/24 20:04:56/文章来源:https://www.cnblogs.com/xwxx/p/19109870

寄存器

存储数据速度:

 cpu > 内存 > 硬盘

通用寄存器

寄存器是在cpu中的
8位 16位 32位
EAX AX AL
EBX BX BL
ECX CX CL
EDX DX DL
ESP SP AH
EBP BP CH
ESI SI DH
EDI DI BH

内存地址的五种形式

1.立即数:如0x13FFC4
2.[reg] reg代表寄存器,可以是8个通用寄存器中的任意一个
3.[reg+立即数]
4.[reg+reg*{1,2,4,8}]
5.[reg+reg*{1,2,4,8}+立即数]

什么是堆栈

堆栈就是一块内存,操作系统在程序启动的时候就已经分配好了,供程序执行时使用
栈指针寄存器 ESP:在当中存储了当前的栈堆用到哪了

存储模式

![[屏幕截图 2025-09-21 120600.png]]
在下面数据低位存储在低位,这个低位指的是内存地址,如0x00000000与0x00000001在这当中前者就是低位
1.小端存储模式(电脑使用多):数据低位在低位,数据高位在高位(其中数据的低位高位是按照从左到右的顺序,如0x1A2C,其中1A是高位,2C是低位)
2.大端存储模式(手机使用多):数据高位在低位,数据低位在高位

汇编指令

1.mov指令:**粗略介绍:**r代表通用寄存器,m代表内存,imm代表立即数,r8代表8位通用寄存器,m8代表8             位内存,imm8代表8位立即数1.mov r/m8,r82.mov r/m16,r163.mov r/m32,r324.mov r8,r/m5.mov r16,r/m166.mov r32,r/m327.mov r8,imm88.mov r16,imm169.mov r32,imm32**详细介绍一下:**1.立即数到寄存器     mov EAX,12.寄存器到寄存器     mov EAX,EDI (注意使用时的数据宽度是否一致,mov              cl,bx会因为数据宽度不符合而不被允许)3.立即数到内存 mov byte(这个是代表一个字节,如果需要更大的空间就写                dword等其他存储单位) ptr ds:[内存地址],1 4.寄存器到内存 mov dword ptr ds:[内存地址],EAX(注意:宽度必须是一致              的)5.内存到寄存器 mov EAX,dword ptr ds:[内存地址]2.movs指令1.moves byte ptr es:[EDI],byte ptr ds:[ESI] 简写为:movesb2.moves word ptr es:[EDI],byte ptr ds:[ESI] 简写为:movesw1.moves dword ptr es:[EDI],byte ptr ds:[ESI] 简写为:movesd3.以add指令(加运算)为例,SUB指令(减运算),and指令(与运算),or指令(或运算),xor(异或运算)都是将下面的add改为对应的指令名称1.ADD r/m8,imm82.ADD r/m16,imm163.ADD r/m32,imm324.ADD r/m16,imm85.ADD r/m16,imm86.ADD r/m8,r87.ADD r/m16,r168.ADD r/m32,r329.ADD r8,r/m810.ADD r16,r/m1611.ADD r32,r/m324.NOT指令(取反z)1.NOT r/m82.NOT r/m163.NOT r/m325.stos指令:将AI/AX/EAX的值存储到[EDI]指定的内存单元1.STOS BYTE PTR ES:[EDI]  简写为:STOSB2.STOS word PTR ES:[EDI]  简写为:STOSW3.STOS dword PTR ES:[EDI]  简写为:STOSD6.REP指令:按计数寄存器(ECX)中指定的次数重复执行字符串指令例如REP STOSD,他的执行次数取决于ECX中的数字(是十六进制的)7,push指令:
作用:1.向堆栈中压入数据2.修改栈顶指针esp寄存器
用法:1.push r322.push r163.push m164.push m325.push imm8/imm16/imm328.pop指令:
作用:1.将栈顶数据存储到寄存器/内存2.修改栈顶指针esp寄存器
用法:1.pop r322.pop r163.pop m164.pop m329.JMP指令:MOV EIP,寄存器/立即数/内存    简写为JMP 寄存器/立即数/内存10.CALL指令:push下一行地址,并且eip值为call后面的值mov eip,寄存器/立即数/内存   简写为CALL 寄存器/立即数/内存与jmp的唯一区别:在堆栈中存储call指令的下一行地址11.ret指令:add esp,4mov eip,[esp-4] 简写为ret12.jcc指令1.JE,JZ 结果为零时跳转(相等时跳转)    ZF=12.JNE,JNZ 结果不为零时跳转(不相等时跳转) ZF=03.JS 结果为负则跳转 SF=14.JNS 结果为非负则跳转 SF=05.JP,JPE 结果中1的个数为偶数跳转 PF=16.JNP,JPO 结果中1的个数为奇数跳转 PF=07.JO 结果溢出了则跳转 OF=18.JNO 结果没有溢出则跳转 OF=09.JB,JNAE 小于则跳转(无符号数) CF=110.JNB,JAE 大于等于则跳转(无符号数) CF=011.JBE,JNA 小于等于则跳转(无符号数) CF=1 or ZF=112.JNBE,JA 大于则跳转(无符号数) CF=0 or ZF=013.JL,JNGE 小于则跳转(有符号数)SF不等于OF14.JNL,JGE 大于等于则跳转(有符号数)SF=OF15.JLE,JNG 小于等于则跳转(有符号数)ZF=1 or SF不等于OF16.JNLE,JG 大于则跳转(有符号数)ZF=0 or SF=OF

函数

函数就是一系列指令的集合,为了完成某个会重复使用的特定功能。例如:向寄存器中赋值,参数较多的时候会使用堆栈
如何执行一个函数(即函数调用):1.用jmp来执行函数2.用call来执行函数

堆栈平衡

简单来说就是堆栈esp原本指在什么位置现在就回到什么位置
1.如果返回父程序,则当我们在堆栈中进行堆栈操作的时候,一定要保证在ret指令之前,esp指的是我们压入栈中的地址
2.如果通过堆栈传递数据了,那么在函数执行完毕之后,要平衡参数导致的堆栈变化

标志寄存器(EFLAGS)

1.CF(bit 0)[Carry flag]若算数操作产生的结果在最高有效位发生进位或借位则将其置1,反之清零。这个标志通常用来指示无符号整型运算的溢出状态2.PF(bit 2)[Parity flag]如果结果的最低有效字节包含偶数个1位则该位置为1,否则清零3.AF(bit 4)[Auxiliary Carry flag]如果算术操作在结果的第三位发生进位或借位则将该标志置1,否则清零。这个表示在bcd算术运算中使用4.ZF(bit 6)[Zero flag]若结果为0则将其置为1,反之清零,经常与cmp或者test等指令一起使用(cmp指令相当于sub指令,但是相减的结果并不保存到第一个操作数中,test指令相当于add,但是相加的结果也不保存到第一个操作数中)5.SF(bit 7) [Sign flag]该标志被设置为有符号整型的最高有效位。(0指示结果为正,反之为负)6.OF(bit 11)[Overflow flag]溢出标志OF用于反映有符号加减运算所得出结果是否溢出7.DF(bit 10)[Direction Flag]这个方向标志控制字符串指令(movs,cmps,scas,lods以及stos)。设置DF标志使得串指令自动递减(从高地址向低地址方向处理字符串),清楚该标志则使得串指令自动递增。STD以及CLD指令分别用于设置以及清除DF标志。

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

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

相关文章

架构图设计还得是华为 - 智慧园区

在数字化时代,架构图就像建筑工程的设计蓝图,是技术系统从抽象想法落地为实际产品的关键桥梁。无论是手机芯片的内部逻辑布局,还是全球通信网络的节点连接,清晰、科学的架构图都能让复杂的技术体系变得“可视化”,…

解决zsh: corrupt history file /home/sgud4h5gh/.zsh_history的办法

问题 在一次重装Ubuntu随后进行了一些修改的情况下,输入命令会出现报错zsh: corrupt history file /home/sgud4h5gh/.zsh_history 并且好像不能执行,实际上是因为文件.zsh_history出现损坏或者乱码的情况。 首先要知…

StarRocks GitHub 工作流程

StarRocks项目遵循GitHub工作流规范,其中包含若干实用建议(例如保持本地环境与上游仓库同步并及时提交)。本文档详细说明在GitHub平台完成StarRocks开发的完整工作流程。 第一步:云端分叉项目访问:https://github…

【Selenium】消除Selenium报错:ChromeDriver与Chrome浏览器版本不匹配

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

伍佰亿搜索引擎网站系统企业科技网站建设

如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更,出现了一个 crash问题,底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题,在这篇文章中以实际工作中resize导致crash为例,引出如何…

2013网站建设方案沃尔玛商城

本人使用谷歌搜索了简中互联网,完全没有找到任何有关 ANAME 的文章……本文该不会是头一份吧 相信大家对于 DNS 的解析方式都不陌生,常见的有 A、CNAME、MX、TXT 记录等等。其中,网站常用的是 A 记录和 CNAME 记录:A 记录用于将域…

对象初始化器的使用方法

1. 什么是对象初始化器? 对象初始化器就是一种在创建对象的同时,直接给属性赋值的写法。不用先 new 一个对象,再一行一行地赋值。 它的作用是用来给对象初始化的 一定存在:必然要执行构造方法 2. 构造方法与对象初…

C++、Java 和 Python 在输入输出差别

C++、Java 和 Python 在输入输出(I/O)格式上有显著差异,主要体现在语法风格、处理方式和灵活性上。以下从标准输入输出、文件操作两个维度对比三者的差异,并结合示例说明核心特点。 一、标准输入输出(控制台 I/O)…

我的学习记录之自我介绍、思维导图和监督措施

一、关于我: 目前就读于中南林业科技大学涉外学院数据科学与大数据技术专业大三,介绍一下自己,在我之前的学习生活中我一般是班级里小透明的存在,成绩一直处于中等偏上,但是又不调皮捣蛋,所以老师一般不会有特别…

用 Java 和 Tesseract 进行验证码识别:基础实现与优化

验证码(CAPTCHA)是防止自动化攻击的常见手段。然而,在某些场景下,如自动化测试或者爬虫平台,可能需要识别和处理验证码图像。本文将指导你如何使用 Java 和 Tesseract OCR(光学字符识别)库来实现验证码识别,并…

新网站应该怎么做料神wordpress建站教程

A12435 思路:只有4中情况:A1,A2翻转,其他正常,A2A3翻转其他正常.....为了下标与数字对应我开了6个空间,然后从1开始循环,到4截止,因为循环中有i1害怕数组越界,如果索引出的数与下标不相等了&…

教育类网站开发文档上海工程项目查询

仓库建设 luogu 2120 题目大意 有一个斜坡,上面有n个工厂(山顶是1,山脚是nnn,工厂都是漏填),上面有pip_ipi​个货物,和工厂1的距离为x1x_1x1​ 现在有一场大雨,你可以在某些工厂处…

网站开发项目工期流程手机版网页

BERT:深度学习领域中的语言理解利器 摘要 BERT(双向编码器表示法自转换器)是一种领先的深度学习模型,它在许多语言理解任务中都显示出卓越的性能。BERT模型基于转换器编码器架构,并通过自监督学习在大量未标记文本数…

Java第二次实验

1. 本章学习总结 本章学习了Java多方面知识:控制台输入推荐用Scanner.nextLine()避免问题,还涉及 IDE 操作与 String.split;身份证排序用Arrays.sort和String.subString,结构化编程且注意输入方法;需了解 StringB…

详细介绍:【2025PolarCTF秋季个人赛】WEB方向wp

详细介绍:【2025PolarCTF秋季个人赛】WEB方向wppre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

英语_阅读

当然可以,以下是英文与中文交替的逐句翻译:Six-year-old Brooke Neitzel wanted a dollhouse. 六岁的布鲁克奈策尔想要一个娃娃屋。 So she ordered one just by telling the familys smart speaker what she wanted…

Nuget安装以及西门子PLC通信

安装S7NetPlus库 ​添加命名空间 ,using S7.Net​创建一个西门子PLC通信对象——成员变量实例化 ,this:表示的是当前对象建立简介 ,对象名.方法名 , this.siemens.Open()​读取变量 , 装箱的一个过程 ,解析变量 ,…

wordpress捐赠按钮如何做网站导航栏的seo优化

2.1.9 调度算法 知识总览 学习各种调度算法的思路 算法思想算法规则这种调度算法是用于作业调度还是进程调度?抢占式或是非抢占式优点和缺点是否会导致饥饿(某进程/作业长期得不到服务) 2.1.9.1 先来先服务 知识点说明英文名FCFS&#xff0…

网站怎么做成二维码做网站找顺的

二叉树垂直遍历题目描述输入输出示例输入实例输出DFSBFS更简单的方法二叉树垂直遍历题目描述对于一个二叉树,输出它的垂直遍历结果;对于同一列的节点,按照从左向右,从上向下的顺序排列。例如,对于以下二叉树&#xff1…

与狗狗做网站互联网广告价格

创建工程: 2.1.程序的耦合 耦合:耦合指的就是对象之间的依赖关系。对象之间的耦合越高,维护成本越高。 案例:没有引入IOC容器时系统的Web层、业务层、持久层存在耦合 /*** 持久层实现类*/ public class UserDaoImpl implements U…