汇编语法

2023-11-11

 

1、 通用寄存器
EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP, 它 们 的低 16 位就是 8086 的
AX,BX,CX,DX,SI,DI,SP,BP,它们的含义如下:
    EAX:累加器 
    EBX:基址寄存器(Base) 
    ECX:计数器 
    EDX:数据寄存器(Data) 
    ESI:源地址指针寄存器(Source) 
    EDI:目的地址指针寄存器(Directy) 
    EBP:基址指针寄存器(Base) 
ESP:堆栈指针寄存器(Stack)
32位系统前面多了‘E’,16位系统没有‘E’。
AX的高8位AH,低8位AL
DX的高8位DH,低8位DL

2.PUSHF及POPF
PUSHF压入标志寄存器,POPF弹出并存入标志寄存器
PUSHA及POPA
PUSHA压入所有一般用途寄存器,POPA弹出并存入所有一般用途寄存器
PUSHAD及POPAD
PUSHAD压入所有扩展寄存器,POPAD弹出并存入所有扩展寄存器

3.MOV AX,[1234h]   表示将0x1234地址处的内容存入AX寄存器
MOV [1234h],WORD 2*33   将2*33存入内存0x1234地址处
MOV AX, IP          错误,不能使用寄存器IP当目的操作数或源操作数,因为IP所存的数据是下一个指令的地址,不能改变它的值。
LEA  AX, total         将total的偏移地址传送到AX

4.PUSH  AX          压入16位的寄存器AX
PUSH  EAX           压入32位的寄存器EAX         
PUSH  WORD [total]    压入16位的内存total内容
PUSH  DWORD [total]   压入32位的内存total内容
PUSH  BYTE  12       压入8位的立即数12
PUSH  WORD 1234H    压入16位的立即数1234H
PUSH  DWORD  12345678H   压入32位的立即数12345678H

5.INT  8位立即数    INT指令执行软件中断
依标志及CX的条件转移指令表:
JZ     当ZF=1时转移
JNZ    当ZF=0时转移
JS     当SF=1时转移
JNS    当SF=0时转移
JO     当OF=1时转移
JNO    当OF=0时转移
JC     当CF=1时转移
JNC     当CF=0时转移
JP(JPE)      当PF=1时转移
JNP(JPO)    当PF=0时转移
JCXZ       当CX=0时转移

6.CMP命令:
CMP  AX, BX      寄存器AX与寄存器BX比较
CMP  AX, [total]    寄存器AX与变量total比较
CMP  AX, 0         寄存器AX与立即数0比较
CMp  [total], DX     变量total与寄存器DX比较
CMP  [total], 0       变量total与立即数0比较
有符号整数比较的条件转移指令表:
JL(JNGE)            小于时转移
JG(JNLE)            大于时转移
JLE(JNG)            小于或等于时转移
JGE(JNL)            大于或等于时转移
JE                  等于时转移
JNE                不等于时转移
无符号整数比较的条件转移指令表:
JB(JNAE)            低于时转移
JA(JNBE) 高于时转移
JBE(JNA) 低于或等于时转移
JAE(JNB) 高于或等于时转移
JE 等于时转移
JNE 不等于时转移

7.无条件转移指令JMP
JMP  label
JMP  SHORT label
跳至指定地址开始执行程序
循环指令loop:
Label:
;需要循环执行的指令
LOOP label

8.
Label:
DEC  CX
JG  label
将CX的值减去1,如果CX的值大于0,则跳转到label执行

9.
加减法:
ADD 第一操作数,第二操作数      加法
SUB  第一操作数, 第二操作数      减法
ADD AL, BYTE[b]    将变量b的内容加入寄存器AL
SUB  AL, BYTE[b]   将寄存器AL减去变量b的值

DEC 操作数         对操作数减一
INC  操作数         对操作数加一

乘法:
MUL 操作数    MUL针对无符号整数的相乘
IMUL操作数    IMUL针对带符号整数的相乘
8位操作数的值与AL相乘后其乘积存入AX中。
16位操作数的值与AX相乘后其乘积存入DX:AX中。
32位操作数的值与EAX相乘后其乘积存入EDX:EAX中。

除法:
DIV 操作数
IDIV操作数
AX的值除以8位操作数的值,其商存在AL上,其余数存于AH中。
DX:AX的值除以16位操作数的值,其商存于AX中,其余数存于DX中。
EDX:EAX的值除以32位操作数的值,其商存于EAX,其余数存于EDX中。

10. 每次cpu执行都要先读取eip寄存器的值,然后定位eip指向的内存地址,并且读取汇编指令,最后执行。执行后 eip的值=后面要跳转的地址。

11. 汇编过程参数传递的方式:寄存器,变量,堆栈,利用call后续区四种方式传参。
test   eax,   eax
 je   00401083  
test指令操作是目的操作数和源操作数按位逻辑“与“
运算结果不送回目的操作数
然后根据结果设置SF、ZF、和PF标志位,并将CF和OF
标志位清零。
而JE是当ZF=1时跳转。
即,当eax的值等于0时跳转。
因此说,这里的test就是检测eax的值是不是0

12. xor eax,eax和mov eax,0两者的作用没有区别,都是让eax的值为0,但是xor eax,eax 指令为2字节,mov eax,0 指令为5个字节。相比而言,前面指令更能节省空间。
xor eax,eax是让eax与eax进行异或操作。

13.汇编过程末尾ret 4*n的含义:先执行ret,将堆栈顶函数返回地址取出存入eip,执行函数返回操作,然后将过程的n个参数弹出堆栈,esp=esp+4*n,堆栈指针恢复到调用call之前的状态。

14.位运算:
AND 第一操作数,第二操作数
OR  第一操作数,第二操作数
XOR 第一操作数,第二操作数
NOT 操作数

TEST第一操作数,第二操作数
TEST指令检查第一操作数,看看某个指定的位是否被打开。Test的结果不会改变任何操作数的值,与and的操作结果相同,只是没有将结果存回第一操作数而已。

15.改变位位置:
SHL  左移
SHR  右移
SAL  算术左移
SAR  算术右移
ROL  循环左移
ROR  循环右移
RCL  带进位循环左移
RCR  带进位循环右移

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编语法 的相关文章

  • 汇编语言 第3版 王爽 检测点答案及详细解析

    第一章 基础知识 检测点1 1 1 1个CPU的寻址能力为8KB 那么它的地址总线的宽度为 13位 2 1KB的存储器有 1024 个存储单元 存储单元的编号从 0 到 1023 3 1KB的存储器可以存储 8192 2 13 个bit 1
  • x86-64 汇编基础 ---- 记读 《CS: APP》

    x86 64 汇编基础 记读 CS APP 通常情况下 使用现代的优化编译器产生的代码至少与一个熟练的汇编语言程序员手工编写的代码一样有效 1 看懂汇编码 1 汇编码的格式 ATT格式 这是GCC OBJDUMP和其它一些工具的常用格式 由
  • push和pushl的区别

    AT T汇编中 命令中可以指定操作范围 如pushb是将一个byte压栈 而pushw就是将一个word压栈 同样pushl就是压栈long 也就是双字 esp指的是esp寄存器 已知是双字 而0xfffffff8 p 指的是一个内存空间
  • 通过栈实现算术表达式的计算

    最近在看数据结构的栈 其中有一节为栈应用到算术表达式的计算 接下来我讲举例说明如何用栈去计算 如有不对的地方 请各位大神指教 1 定义操作符的优先级 作为栈顶操作符时优先级仅高于 作为栈顶操作符时优先级是最高的 和 优先级一样 但是一个作为
  • [荐]硕博经验——科研论文阅读与写作实战技巧

    又转自西电好网 http bbs xdnice com b99t378538 htm硕博经验 转来的 早知道就好了 少走很多弯路啊 该文从 举止优雅的猪 那里看见的 感觉很不错 不过我感觉到了博士才知道这些似乎有点晚了 或者是有不少人也不会
  • Leetcode题解——30. 包含min函数的栈(辅助栈思想)

    题目地址 剑指 Offer 30 包含min函数的栈 力扣 LeetCode 目录 一 算法思想 二 代码实现 三 拓展思考 首先说结论 这道题虽然难度不大 但是算法思想很重要 是辅助栈应用的生动实例 所以 这里小编不再重点将代码 而是讲思
  • 华为OD机试真题 Python,简单的解压缩算法,入栈出栈,队列

    def decoder s str gt str n len s A3B1 C 3 3 bracket pos stack 不是数字都入栈 def repeat stack pos num 弹栈次数 m len stack pos repe
  • 【数据结构】链栈的定义和基本操作

    链栈定义及各类操作 include
  • dosbox+masm汇编环境的安装和使用 + dosbox进行debug调试教程

    1 dosbox masm汇编环境的安装和使用 https blog csdn net yuzuruhanyu article details 80287419 2 dosbox进行debug调试教程 https blog csdn net
  • Base64编码(汇编版,未做过多优化,性能自认为还可以)

    感谢 DelphiGuy 于 2010 10 08 17 27 37 给出的提醒 function GetSizeCoder3To4 InputCount Integer Integer inline begin Result InputC
  • 反汇编笔记

    1 OD中ctrl f9 运行到返回 就是运行到当前断点所在的函数末尾 retn xxx 处 若xxx 10 那么 10等于10进制的16 就是说这个函数有4个参数 一个参数默认是占4字节 所以就是retn 10 2 调试程序时 在OD内部
  • 汇编语言(王爽第三版) 实验5编写、调试具体多个段的程序

    参考 http blog sina com cn s blog 171daf8e00102xclx html 汇编语言实验答案 王爽 https wenku baidu com view a1cd7c6c1fb91a37f111f18583
  • ARM汇编快速入门

    本文主要分享如何快速上手ARM汇编开发的经验 汇编开发中常见的Bug以及Debug方法 用的Convolution Dephtwise算子的汇编实现相对于C 版本的加速效果三方面内容 前言 神经网络模型能够在移动端实现快速推理离不开高性能算
  • 汇编——单字符输入输出+字符串输入输出(换行实现)

    单字符输入输出 默认采用ML6 11汇编程序 DATAS SEGMENT CHAR DB CHAR存储输入的字符 CHANGELINE DB 13 10 用来表示换行符 DATAS ENDS STACKS SEGMENT DB 128 DU
  • MCS-51 汇编指令集(J开头的指令)

    MCS 51系列单片机指令以J开头的指令有8条 分别为 JB bit rel JBC bit rel JC rel JMP A DPTR JNB bit rel JNC rel JNZ rel JZ rel 1 JB bit rel 指令名
  • 数据结构----链式栈

    目录 前言 链式栈 操作方式 1 存储结构 2 初始化 3 创建节点 4 判断是否满栈 5 判断是否空栈 6 入栈 7 出栈 8 获取栈顶元素 9 遍历栈 10 清空栈 完整代码 前言 前面我们学习过了数组栈的相关方法 链接 线性表 栈 栈
  • 【数据结构】详解栈的应用之表达式求值

    首先明白 前缀表达式 符号在前 如 3456 中缀表达式 符号在中间 如 3 4 5 6 后缀表达式 符号在最后 如34 5 6 后缀表达式不出现括号 中缀表达式转后缀表达式的方法 1 遇到数字 直接输出 添加到后缀表达式中 2 栈为空时
  • 9.用python写网络爬虫,完结

    前言 这是python网络爬虫的最后一篇给大家做个总结 且看且珍惜把 截止到目前 前几章本书介绍的爬虫技术都应用于一个定制网站 这样可以帮助我们更加专注于学习特定技巧 而在本章中 我们将分析几个真实网站 来看看这些技巧是如何应用的 首先我们
  • 《深入理解计算机系统》实验四Architecture Lab

    前言 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻请看 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助 如果你的Y86 64环境还没安装好可以看
  • 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档

    背景 为了能识别出代码中抛出错误码的地址和具体的错误码值 再根据错误码文件获取到错误码的具体值和注释 方便后续的排错 这里使用AST进行语法分析获取到代码中的目标对象 一 编译过程 在开始解析代码之前先补充了解一下编译过程 编译过程是将高级

随机推荐

  • Echarts中国地图的china.js下载

    今天用到了Echarts的中国地图map 但Echarts官网的地图js已经停止提供下载了 找了下其他的链接放到这里 一些其他会用到的js文件也在里面可以找到 省的下次用现找 https github com apache incubato
  • Linux 搭建Redis 哨兵集群

    目录 1 安装环境 2 下载安装包 3 安装依赖环境和编译 4 启动 5 集群搭建 6 启动哨兵 7 设置开机自启动 8 redis卸载 1 安装环境 阿里云centos7 9版本 2 下载安装包 地址 Index of releases
  • 代码覆盖生态系统的库和软件包

    如果您已经编写了测试驱动的代码已有一段时间了 那么您将了解代码覆盖率 也称为测试覆盖率 如果您不熟悉该术语 则有两个简短定义 维基百科将其定义为 一种度量 用于描述特定测试套件运行时程序源代码的执行程度 根据Martin Fowler的说法
  • 深入学习jquery源码之append()和prepend()

    深入学习jquery源码之append 和prepend append content fn 概述 向每个匹配的元素内部追加内容 这个操作与对指定的元素执行appendChild方法 将它们添加到文档中的情况类似 参数 content St
  • 《算法图解》总结第 2 章:数组和链表,选择排序

    仅用于记录学习 欢迎批评指正 大神勿喷 系列文章目录 算法图解 总结第 1 章 二分查找 大O表示法 算法图解 总结第 2 章 数组和链表 选择排序 算法图解 总结第 3 章 while循环 递归 栈 算法图解 总结第 4 章 分而治之 快
  • VSCode LSP 语言服务器协议总结

    为什么使用语言服务器协议 LSP Language Server Protocol 语言服务器是一种特殊的 Visual Studio Code 扩展 可为许多编程语言提供编辑体验 使用语言服务器 您可以实现自动完成 错误检查 诊断 跳转到
  • android的fragment用法,Android Fragment用法知识点的讲解

    Android Fragment用法的讲解 碎片 它的出现是为了更好展示UI的设计 让程序更加得到充分的展示 Fragment的出现 如微信的额主界面包含多个Fragment 使得微信功能更加简洁明了 Fragment组件 Fragment
  • Nim游戏(C++)

    题目 给定 n 堆石子 两位玩家轮流操作 每次操作可以从任意一堆石子中拿走任意数量的石子 可以拿完 但不能不拿 最后无法进行操作的人视为失败 问如果两人都采用最优策略 先手是否必胜 输入格式 第一行包含整数 n 第二行包含 n 个数字 其中
  • 微信小程序开发笔记—设置页面密码

    文章目录 一 功能概述 二 实现效果 三 实现方法 1 新建个人登陆页面 2 设计密码获取判别函数和响应函数 1 定义变量 2 设计密码获取判别函数 3 设计响应函数 3 设计页面内容 1 input组件设计 2 button组件设计 四
  • 如何显示远程桌面_库卡机器人之远程桌面RDP

    前面已经介绍过使用VNC和RSV来实现库卡机器人的远程连接 其实还有一些方法 比如Teamviewer或Virture Remote Pendant 简称VRP 这里就不再介绍如何来实现 今天主要介绍通过windows自带的RDP来实现这种
  • Verilog 学习笔记(4)——语句块,多路分支语句、循环语句、连续赋值语句

    本章主要讲解Verilog语言中的语句部分 Verilog 语句块主要包括顺序块和并行块 语句类型有多路分支语句 case语句 casex casez 语句 循环语句 while 循环 for 循环 repeat 循环 forever 循环
  • 前端18K面试题总览,往这方面准备就对了

    Vue面试题 生命周期函数面试题 1 什么是 vue 生命周期 2 vue生命周期的作用是什么 3 第一次页面加载会触发哪几个钩子 4 简述每个周期具体适合哪些场景 5 created和mounted的区别 6 vue获取数据在哪个周期函数
  • AI数字人应该怎么制作?详细教程

    现在市面上有很多可以制作AI数字人的平台工具 本文主要针对使用腾讯智影来制作数字人 附免费教程 1 腾讯智影介绍 腾讯推出的在线智能视频创作平台 智影是一款云端智能视频创作工具 无需下载即可通过PC浏览器访问 支持视频剪辑 素材库 文本配音
  • C语言之 printf() 和 scanf() 函数详解

    文章目录 前言 一 printf 函数详解 1 函数原型 2 参数说明符详解 3 代码示例及易错点示例 二 scanf 函数详解 1 函数原型 2 参数说明符详解 3 代码示例及易错点示例 前言 printf scanf 两个函数相信大家并
  • 产品经理需要向上思考

    上一篇文章说了产品经理如何锻炼自己看透事物本质的能力 王诗沐老师在其 幕后产品 一书中还提到向上思考能力 读完后对我有一定的启发 我加一些自己的思考 和大家聊聊这个话题 很多人在产品经理面试的时候 可能会被问到这样一个题目 就是你如何看待X
  • 数据库第五周实验——单表查询——例题实现

    文章目录 一 选择表中的若干列 1 查询指定列 2 查询全部列 3 查询经过计算的值 二 选择表中的若干元组 1 消除取值重复的行 DISTINCT 2 查询满足条件的元组 WHERE 1 比较大小 2 确定范围 3 确定集合 4 字符匹配
  • typescript第三天—接口和类

    接口 作一个简历的自动筛选程序 很简单 年龄小于 25 岁 胸围大于 90 公分的 可以进入面试环节 我们最开始的写法是这样的 新建一个文件 Demo8 ts 然后编写如下代码 const screenResume name string
  • 1.Docker学习之基础知识

    0x00 Docker 快速入门 1 基础介绍 2 Docker 架构 3 Docker 资源隔离 4 Docker 容器文件系统 0x01 Docker 安装 1 Linux 2 Windows 3 MAC 4 加速器配置 0x02 Do
  • win10 .yml .yaml 格式默认使用notepad++打开

    起因 发现win10 双击打开 yml yaml文件不能默认选择notepad 每次都得右击文件使用notepad 编辑 而且在设置 gt 应用 gt 默认应用 gt 按文件类型指定默认应用也没有 yml yaml 发现可以在notepad
  • 汇编语法

    1 通用寄存器 EAX EBX ECX EDX ESI EDI ESP EBP 它 们 的低 16 位就是 8086 的 AX BX CX DX SI DI SP BP 它们的含义如下 EAX 累加器 EBX 基址寄存器 Base ECX