辅助汇编学习记录2

2023-10-29

  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,eaxmov eax,0两者的作用没有区别,都是让eax的值为0,但是xor eax,eax 指令为2字节,mov eax,0 指令为5个字节。相比而言,前面指令更能节省空间。

xor eax,eax是让eaxeax进行异或操作。

 

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(使用前将#替换为@)

辅助汇编学习记录2 的相关文章

  • 汇编王爽老师实验12,显示0号除法溢出中断

    整个程序不能脱离dosbox 在dosbox中触发中断 本程序的思路是 先编写0号中断子程序 在主程序中运用传送方法把中断子程序传送至内存段 1设置传送的起点2设置传送的终点3设置传送的代码段长度4设置传送的方向5rep 启动传送6修正中断
  • C关键字volatile

    其实我想看的 想做笔记的就是就是那个汇编例子 看来汇编例子有助于了解啊 以前听人说过 高手都能将每一句C语言对应一句汇编语言 C语言关键字volatile 1 C语言关键字volatile C语言关键字volatile 注意它是用来修饰变量
  • 计算机组成原理课程设计:运算器、微程序控制器、两个数大小比较

    实验一 运算器 实验二 微程序控制器 实验三 两个数比较大小 机器程序如下 P 00 20 IN R0 P 01 00 P 02 21 IN R1 P 03 00 P 04 84 SUB R0 R1 P 05 F0 BZC P 06 0C
  • ARM 64 协程切换上下文的汇编代码解读

    ARM 64协程切换上下文的汇编代码解读 贺志国 2023 8 11 在ARM 64位架构中 有一组通用寄存器 General Purpose Registers 一组浮点寄存器 Floating point Registers 和一组特殊
  • 安天逆向教程——常用汇编语句

    一 汇编基础 二 条件分支 反汇编时更多关注这些条件分支 如果看懂这些条件分支 会对程序的大体逻辑有一个整体的了解 至于程序里面的细节 有时会省略掉 往往关键的跳转理解了甚至进行一点点的改动 就会使得程序发生翻天覆地的变化 三 栈和函数调用
  • 四则表达式的编译过程及生成汇编代码

    1 前序 这是编译原理的实验 自认为是上大学以来做过的最难的一个实验 所以写篇博客记录一下 实验用到的基础知识 C语言 数据结构 汇编 只需简单的了解 开发工具 VC 2 问题描述 编译整数四则运算表达式 将整数四则运算表达式翻译为汇编语言
  • 2.9-2.12段寄存器和cs:ip

    段寄存器有四类 cs ds ss es 其中 cs是代码寄存器 它指向的代码段是一组地址连续 起始地址为16的倍数的内存单元 这个代码段可以存储长度为N N lt 64KB 的一组代码 而与之相关联的是IP 指令指针寄存器 步骤如下 1 c
  • X64处理器架构

    X64处理器架构 翻译的windbg帮助文档 X64处理器架构 X64 架构是一个向后兼容的扩展的 x86 提供了和 x86 相同的 32 位模式和一个新的 64 位模式 术语 x64 包括 AMD 64 和 Intel64 他们的指令集基
  • arm汇编lr pc b bl ret指令函数调用和返回gif动图演示

    文章目录 pc 寄存器 lr寄存器 x30 ret返回指令 bl 跳转指令 带返回 b 跳转 不带返回 pc 寄存器 pc保存着当前指令执行的地址 相当于win32汇编里的eip寄存器 lr寄存器 x30 lr存储函数的返回地址 每次遇到r
  • 汇编中16进制装换成为其他进制(2,8,10)

    16进制装换成为其他进制关键在于得到键盘输入 并将它保存在BINARY的这个变量里面 宏定义直接调用 例子中有 DISP etc 子程序的话要注意对主程序的信息的保护和恢复 我在这里使用的是在子程序里面去保护主程序的方式 你也可以在主程序调
  • xorl %eax, %eax

    这是GNU的汇编 xorl eax eax 这句起什么作用 按位异或 相同的位置为0 不同的位置为1 eax和eax的每一位都相同 所以相当于清零 movl 8 ebp ecx testl ecx ecx 这句起什么作用 jle L3 8
  • ARM 汇编基础知识

    1 为什么学习汇编 我们在进行嵌入式 Linux 开发的时候是绝对要掌握基本的 ARM 汇编 因为 Cortex A 芯片一 上电 SP 指针还没初始化 C 环境还没准备好 所以肯定不能运行 C 代码 必须先用汇编语言设置好 C 环境 比如
  • 汇编小作业(3) 十进制数的平方根

    用子程序结构编程 从键盘输入一个十进制数 对其开平方后分别将其平方根和余数以十进制数的形式显示 DATA SEGMENT SUM DW 2 DUP BUF DB 7 DUP DATA ENDS stack segment 定义栈段 保存di
  • push和pushl的区别

    AT T汇编中 命令中可以指定操作范围 如pushb是将一个byte压栈 而pushw就是将一个word压栈 同样pushl就是压栈long 也就是双字 esp指的是esp寄存器 已知是双字 而0xfffffff8 p 指的是一个内存空间
  • dosbox+masm汇编环境的安装和使用 + dosbox进行debug调试教程

    1 dosbox masm汇编环境的安装和使用 https blog csdn net yuzuruhanyu article details 80287419 2 dosbox进行debug调试教程 https blog csdn net
  • asm:常见指令大全

    常见指令大全 算数指令 INC 指令 DEC 指令 ADD 指令 SUB指令 MUL指令 IMUL指令 DIV指令 IDIV指令 逻辑指令 AND指令 OR指令 XOR 指令 TEST指令 NOT指令 交换指令 xchg 比较指令 CMP指
  • ads+jlink和keil+jlink调试环境配置

    ads1 2 and jlinkv8 1 安装ads1 2和jlink驱动Setup JLinkARM V408i exe 安装ads1 2时 最后在100 时如果持续时间长 耐心等一下吧 没有等待而点了cancel 则之后就不好重装了 解
  • x86寄存器

    通用寄存器 GPR寄存器 AX Accumulator 累加寄存器 也叫累加器 BX Base 基地址寄存器 CX Count 计数器寄存器 DX Data 数据寄存器 指针寄存器 SP Stack Pointer 堆栈指针寄存器 BP B
  • 《深入理解计算机系统》实验四Architecture Lab

    前言 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻请看 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助 如果你的Y86 64环境还没安装好可以看
  • C语言深入学习--checklist4:宏、枚举、switch

    宏 1 宏的本质是什么 函数 语句 类型定义 或者其它 预编译器的文本替换 1 你知道语言设计者为什么设计宏吗 这些原因目前是否成立 在 C程序中 可以用宏代码提高执行效率 宏代码本身不是函数 但使用起来象函数 预处理器用复制宏代码的方式代

随机推荐

  • yolov5_prune剪枝训练记录及遇见的问题

    学习参考链接 转发 深度学习模型压缩与加速理论与实战 一 模型剪枝 AHU WangXiao 博客园 cnblogs com 剪枝顾名思义 就是通过一些算法或规则删去一些不重要的部分 来使模型变得更加紧凑 减小计算或者搜索的复杂度 它包括四
  • elasticsearch初识

    初识elasticsearch 了解ES elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎 具备非常多强大功能 可以帮助我们从海量数据中快速找到需要的内容 例如 在GitHub搜索代码 在电商网站搜索
  • mysql没开启binlog恢复删除表_无全量备份、未开启binlog日志,利用percona工具恢复delete的数据...

    当我们忘记做全量备份时 并且没有开启binlog 并执行了delete from sbtest 数据全部丢失 要想恢复是很有难度的 今天 利用Percona Data Recovery Tool for InnoDB工具 仅支持InnoDB
  • Dubbo(二)详细介绍

    转自 https www cnblogs com juncaoit p 7686510 html 1 背景 随着互联网的发展 网站应用的规模不断扩大 常规的垂直应用架构已无法应对 分布式服务架构以及流动计算架构势在必行 亟需一个治理系统确保
  • Service的两种启动方式之间的比较与区别

    在Android中 有两种主要的方式可以启动Service 启动式启动和绑定式启动 1 启动式启动 Start Service 使用 startService 方法启动Service Service在后台运行 独立于启动它的组件 如Acti
  • spark读取hive

    spark读取hive是最简单的 构造一个sparksession对象 直接执行SQL就得读取 然后直接insert就能写入 因为spark客户端配置了你的hive数据库的信息 所以能够直接读取hive数据库 spark SparkSess
  • AI绘图实战(五):放大并修复老照片、马赛克照片、身份证件照

    S 你安装stable diffusion就是为了看小姐姐么 I 当然不是 当然是为了公司的发展谋出路 预先学习 安装及其问题解决参考 Windows安装Stable Diffusion WebUI及问题解决记录 运行使用时问题 Windo
  • 一根网线两台电脑传输文件

    用两个网线连接两台电脑 确保网线连接没有问题 打开网络共享中心 然后打开更改适配器设置 选择以太网 右键属性 4 双击 Internet协议版本4 TCP IPv4 然后进行如下设置 在另一台电脑上进行上述一样的操作 只是IP地址的设置不同
  • android编程中遇到的关于 java.lang.NullPointerException错误的原因及解决办法

    LogCat中的错误提示如下 04 29 09 43 23 390 E AndroidRuntime 24967 FATAL EXCEPTION main 04 29 09 43 23 390 E AndroidRuntime 24967
  • 创建型模式5之3-Singleton单例模式的八种写法比较

    单例模式的八种写法比较 单例模式是最常用到的设计模式之一 熟悉设计模式的朋友对单例模式都不会陌生 一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式 但是除了这两种方式 本文还会介绍其他几种实现单例的方式 让我们来一起看看吧
  • 打发时光的102个网站

    1 看看自己具有哪个大明星的脸型 http www play analogia com cgi bin index 2 超有意思的Flash网站 虚拟办公 http agencynet com 3 亲自动手给美女画纹身 http www c
  • nginx 详解反向代理负载均衡

    什么是反向代理负载均衡 使用代理服务器可以将请求转发给内部的Web服务器 使用这种加速模式显然可以提升静态网页的访问速度 因此也可以考虑使用这种技术 让代理服务器将请求 均匀转发给多台内部Web服务器之一上 从而达到负载均衡的目的 这种代理
  • 【blender】材质球参数及各种问题

    目录 材质设置 1 共用一种材质 但是不同颜色 2 关联材质 3 无法绘制贴图 4 材质保存为资产 5 材质描边 材质设置 1 玻璃 1 共用一种材质 但是不同颜色 物体信息节点 gt 仅需改变物体颜色即可 2 关联材质 ctrl L 3
  • 网络安全——命令执行漏洞概述

    一 命令执行漏洞概述 1 基本定义 命令执行漏洞是指攻击者可以随意执行系统命令 分为远程命令执行 远程代码执行 和系统命令执行 2 原理 程序应用有时候需要调用一些执行系统命令的函数 如PHP中的system exec shell exex
  • SpringCloud组件之断路器Hystrix(hoxton版本)

    1 Hystrix 简介 在微服务架构中 根据业务来拆分成一个个的服务 服务与服务之间可以相互调用 RPC 在Spring Cloud可以用RestTemplate Ribbon和Feign来调用 为了保证其高可用 单个服务通常会集群部署
  • WinForm中如何实现panel和SplitContainer相结合进行布局呢

    相信大家都会在winform应用程序中进行布局 通常我们也会使用一下这种布局 如图 以上布局分别采用了Panel 黑色区域 和SplitContainer控件 白色区域 这布局相信大家耳熟能详了 比如VS2010不就是典型这样布局吗 但是需
  • 西瓜书之误差逆传播公式推导、源码解读及各种易混淆概念

    关键词 反向传播 BP caffe源码 im2col 卷积 反卷积 上池化 上采样 公式推导 以前看到一长串的推导公式就想直接跳过 今天上午莫名有耐心 把书上的公式每一步推导自己算一遍 感觉豁然开朗 遂为此记 sigmoid函数求导比rel
  • 最小二乘拟合,L1、L2正则化约束

    最小二乘法 又称最小平方法 是一种数学优化技术 它通过最小化误差的平方和寻找数据的最佳函数匹配 利用最小二乘法可以简便地求得未知的数据 并使得这些求得的数据与实际数据之间误差的平方和为最小 从维基百科中摘取的最小二乘的拟合曲线 解法 其中Y
  • TSI系统测量参数之:热膨胀

    一 TSI系统测量参数 1 轴向位移 2 盖振或瓦振 3 偏心 4 键相 5 零转速 6 轴向振动 7 相对热膨胀 胀差 8 绝对热膨胀 缸胀 二 各参数作用 4 绝对热膨胀 汽轮机在开机过程中由于受热使其汽缸膨胀 如果膨胀不均匀就会使汽缸
  • 辅助汇编学习记录2

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