《intel开发手册卷1》学习笔记3

1、数据传输指令

MOV 指令在内存和处理器寄存器之间执行基本的加载数据和存储数据操作,并在寄存器之间执行数据移动操作。MOV 指令不能将数据从一个内存位置移动到另一个内存位置,也不能将数据从一个段寄存器移动到另一个段寄存器。内存到内存的移动使用 MOVS(字符串移动)指令执行。

2、跳转指令

        JMP指令——JMP(跳转)指令无条件地将程序控制转移到目标指令。转移是单向的;也就是说,不会保存返回地址。目标操作数指定目标指令的地址(指令指针)。地址可以是相对地址也可以是绝对地址。相对地址是相对于EIP寄存器中的地址的位移(偏移量)。目的地址(一个近指针)是通过在EIP寄存器的地址上加上位移而形成的。位移用有符号整数指定,允许在指令流中向前或向后跳转。在保护模式下,JMP指令还允许跳转到调用门、任务门和任务状态段。

        CALL和RET——Call(调用过程)和RET(从过程返回)指令允许从一个过程(或子例程)跳转到另一个过程(或子例程),并随后跳转回(返回)到调用过程。CALL指令将程序控制从当前(或调用)过程转移到另一个过程(被调用过程)。为了允许随后返回到调用过程,CALL指令在跳转到被调用过程之前将EIP寄存器的当前内容保存在堆栈上。EIP寄存器(在转移程序控制之前)包含CALL指令之后的指令的地址。当这个地址被压入堆栈时,它被称为返回指令指针或返回地址。RET指令将程序控制从当前正在执行的过程(被调用过程)转移回调用它的过程(调用过程)。控制的转移是通过将返回指令指针从堆栈复制到EIP寄存器来完成的。然后程序继续执行EIP寄存器所指向的指令。RET指令有一个可选操作数,它的值作为返回操作的一部分被添加到ESP寄存器的内容中。此操作数允许对堆栈指针进行递增,以从调用过程在堆栈上压入的堆栈中删除参数

INT n(软件中断)、INTO(溢出时中断)和 BOUND(检测值超出范围)指令允许程序明确引发指定的中断或异常,进而导致中断或异常的处理程序被调用。INT n 指令通过在指令中编码中断或异常的向量,可以引发处理器的任何中断或异常。该指令可用于支持软件生成的中断,或测试中断和异常处理程序的运行。IRET(从中断返回)指令将程序控制从中断处理程序返回到被中断的程序。

        IRET指令——当处理器处理中断时,它执行对中断处理过程的隐式调用。 IRET(从中断返回)指令将程序控制从中断处理程序返回到被中断的过程(即,中断发生时正在执行的过程)。IRET 指令执行与 RET 指令类似的操作,不同之处在于它还从堆栈中恢复 EFLAGS 寄存器。当处理器处理中断时,EFLAGS 寄存器的内容与返回指令指针一起自动存储在堆栈中

3、字符串操作隐含规则

默认情况下,ESI 寄存器的地址段由 DS 段寄存器确定。段覆盖前缀允许 ESI 寄存器与 CS、SS、ES、FS 或 GS 段寄存器相关联。EDI 寄存器的地址段由 ES 段寄存器确定;EDI 寄存器不允许段覆盖。在字符串指令中使用两个不同的段寄存器,可以对位于不同段的字符串执行操作。或者,通过将 ESI 寄存器与 ES 段寄存器关联,源字符串和目标字符串可以位于同一段中。

        CMPS 指令从源字符串元素中减去目标字符串元素,并根据结果更新 EFLAGS 寄存器中的状态标志(CF、ZF、OF、SF、PF 和 AF)。两个字符串元素都不会写回内存。

        LODS 指令将 ESI 寄存器标识的源字符串元素装入 EAX 寄存器(双字字符串)、AX 寄存器(字字符串)或 AL 寄存器(字节字符串)。

        STOS 指令将 EAX(双字串)、AX(字串)或 AL(字节串)寄存器中的源字符串元素存储到 EDI 寄存器标识的内存位置。

在字符串指令中使用时,ESI 和 EDI 寄存器会在指令每次迭代后自动递增或递减,以指向字符串中的下一个元素(字节、字或双字)。因此,字符串操作可以从较高的地址开始,然后向较低的地址移动,也可以从较低的地址开始,然后向较高的地址移动。EFLAGS 寄存器中的 DF 标志控制寄存器是递增(DF = 0)还是递减(DF = 1)。STD 和 CLD 指令分别设置和清除该标志

4、段寄存器操作指令

MOV 指令以及 PUSH 和 POP 指令可以将 16 位段选择器传输到段寄存器(DS、ES、FS、GS 和 SS)或从中传输。传输始终在段寄存器和通用寄存器或内存之间进行,但不支持段寄存器之间的传输。 POP 和 MOV 指令无法将值放入 CS 寄存器中。只有 JMP、CALL 和 RET 指令的远控制传输版本会直接影响 CS 寄存器。

        JMP 和 CALL 指令均接受远指针作为目标,以将程序控制转移到 CS 寄存器当前指向的段以外的段。当使用CALL指令进行远调用时,EIP和CS寄存器的当前值都被压入堆栈

        RET 指令可用于执行远距离返回。在这里,程序控制从包含被调用存储过程的代码段转移回包含调用存储过程的代码段。RET 指令从堆栈中恢复调用存储过程的 CS 和 EIP 寄存器的值。

        加载远指针指令 LDS(使用 DS 加载远指针)、LES(使用 ES 加载远指针)、LFS(使用 FS 加载远指针)、LGS(使用 GS 加载远指针)和 LSS(使用 SS 加载远指针)将远指针从内存加载到段寄存器和通用通用寄存器中。远指针的段选择器部分被加载到所选的段寄存器中,并且偏移量被加载到所选的通用寄存器中。

        LEA(加载有效地址)指令计算源操作数在内存中的有效地址(段内的偏移量)并将其放入通用寄存器中。该指令可以解释处理器的任何寻址模式,并且可以执行可能需要的任何索引或缩放。它对于在执行字符串指令之前初始化 ESI 或 EDI 寄存器或在 XLAT 指令之前初始化 EBX 寄存器特别有用。

        NOP(无操作)指令递增 EIP 寄存器以指向下一条指令,但不影响其他任何操作。

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

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

相关文章

通过wget下载ftp文件

通过wget下载ftp文件 基础用法带密码的http文件带密码的ftp文件补充 基础用法 在下载的过程中会显示进度条,包含百分比,已下载字节,下载速度,剩余时间。 # 下载单个文件 wget [url_file]# 下载目录全部文件 wget [url_dir/*] wg…

Linux开发--Bootloader应用分析

Bootloader应用分析 一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 引导加载程序。包括固化在固件( firmware )中的 boot 代码(可选),和 Boot Loader 两大部分。 Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。 文件系统…

H264 SP帧等知识笔记

H.264是一种广泛使用的视频编码标准,它使用多种类型的帧来实现高效的视频压缩。在H.264中,参考帧和重建帧是两个重要的概念,它们之间既有区别又有联系。 参考帧: 参考帧是用于预测其他帧的帧。在H.264中,编码器会利用…

大华智能物联综合管理平台 fastjson远程代码执行漏洞复现

0x01 产品简介 大华ICC智能物联综合管理平台对技术组件进行模块化和松耦合,将解决方案分层分级,提高面向智慧物联的数据接入与生态合作能力。 0x02 漏洞概述 由于大华智能物联综合管理平台使用了存在漏洞的FastJson组件,未经身份验证的攻击者可利用 /evo-runs/v1.0/auths/…

解释Java中的注解(Annotations)及其用途

Java 注解(Annotations)是从 Java 5 开始引入的一种元数据形式,它提供了一种将额外信息(metadata)与代码(类、方法、变量等)相关联的方法。注解不直接影响代码的操作,但可被编译器、…

【Qt】界面定制艺术:光标(cursor)、字体(font)、提示(toolTip)、焦点(focusPolicy)与样式表(styleSheet)的深度探索

文章目录 前言:1. cursor: 设置按钮的光标2. front:设置字体3. toolTip: 鼠标悬停提示4. focusPolicy:设置控件获取到焦点的策略5. styleSheet : 样式表总结: 前言: 在现代软件开发中,用户界面(UI)的设计和…

【MySQL 数据宝典】【事务锁】- 002 事务控制的演进

一、事务处理思路 1.1 排队 排队处理是事务管理最简单的方法,就是完全顺序执行所有事务的数据库操作,不需要加锁,简单的说就是全局排队。序列化执行所有的事务单元,数据库某个时刻只处理一个事务操作,特点是强一致性…

Java刷题-基础篇

目录 题目1:打印1~100内奇数和、偶数和 题目2:计算5的阶乘 题目3:计算 1!2!3!4!5! 的和 题目4:找1~100之间即能被3整除,又能被5整除的数字,要求必须使用break/continue 题目5:实现猜数字小…

LeetCode 112. 路径总和 || LeetCode 113. 路径总和ii

LeetCode 112. 路径总和 1、题目 题目链接:112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true…

Linux:进程概念(三.详解进程:进程状态、优先级、进程切换与调度)

上次讲了进程这些内容:Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解) 文章目录 1.Linux中的进程状态1.1前台进程和后台进程运行状态睡眠状态磁盘休眠状态停止状态kill指令—向进程发送信号 死亡状态 2.僵尸进程2.1僵…

第 8 章 机器人平台设计之底盘实现(自学二刷笔记)

重要参考: 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 8.4.1 底盘实现_概述 1.ros_arduino_bridge 简介 该功能包包含Arduino库和用来控制Arduino的ROS驱动包&…

iOS--runloop的初步认识

runloop的初步认识 简单认识runloopEvent looprunloop其实就是个对象NSRunloop和CFRunLoopRef的依赖关系runloop与线程runloop moderunloop sourceCFRunLoopSourceCFRunLoopObserverCFRunLoopTimer runloop的实现runloop的获取添加ModeCFRunLoopAddCommonMode 添加Run Loop Sou…

双重循环 for-for九九乘法表

# 双重循环 for-for # 使用 for 循环遍历 1 到 9 中的每个数字 for i in range(1, 10): # 使用嵌套的 for 循环遍历 1 到 i1 中的每个数字 for j in range(1, i1): # 打印一个形如 j i i*j 的字符串,并以制表符结尾,不换行 print(f{j}x{i}{i*j}\t, e…

C语言 | Leetcode C语言题解之第79题单词搜索

题目: 题解: int directions[4][2] {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};bool check(char** board, int boardSize, int boardColSize, int** visited, int i, int j, char* s, int sSize, int k) {if (board[i][j] ! s[k]) {return false;} else if (…

NSSCTF中的web学习(md5())

目录 MD5的学习 [BJDCTF 2020]easy_md5 [LitCTF 2023]Follow me and hack me [LitCTF 2023]Ping [SWPUCTF 2021 新生赛]easyupload3.0 [NSSCTF 2022 Spring Recruit]babyphp MD5的学习 md5()函数: md5($a):返回a字符串的散列值 md5($a,TRUE)&…

AWS云优化:实现性能和成本的最佳平衡

随着企业数字化转型的加速,对云计算平台的需求也不断增长。AWS作为云计算行业的领导者之一,提供了广泛的云服务和解决方案,帮助企业实现业务的创新和发展。在AWS云上部署应用程序和服务后,对其进行优化是至关重要的,以…

flutter报错

组件相关 type ‘List’ is not a subtype of type ‘List’ children: CardList.map((item) > Container( 加上 *** < Widget>*** 正常 type ‘(dynamic, dynamic) > Container’ is not a subtype of type ‘(CardType) > Widget’ of ‘f’ children: CardL…

代码随想录:移除元素相关题目推荐(26、283、844)

26.删除有序数组中的重复项 题目 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的…

YOLO系列笔记(十四)——Compute Canada计算平台及其常见命令介绍

Compute Canada平台及其常见命令介绍 前言优势使用方法1. 检查模块不带版本号带版本号 2. 加载模块3. 检查模块是否加载成功4. 创建虚拟环境5. 编写作业脚本6. 提交作业7. 监控作业状态8. 查看作业开始预计时间9. 查看作业的详细输出10. 取消作业 注意结语 前言 大家好&#x…

【吃透Java手写】4-Tomcat-简易版

【吃透Java手写】Tomcat-简易版-源码解析 1 准备工作1.1 引入依赖1.2 创建一个Tomcat的启动类 2 线程池技术回顾2.1 线程池的使用流程2.2 线程池的参数2.2.1 任务队列&#xff08;workQueue&#xff09;2.2.2 线程工厂&#xff08;threadFactory&#xff09;2.2.3 拒绝策略&…