X86汇编语言:从实模式到保护模式--命令篇

X86汇编语言:从实模式到保护模式–命令篇

补充汇编命令

注:不能直接将内存赋值给内存,也不能将立即数直接赋值给段寄存器(CS DS ES SS),但是可以将内存直接赋值给段寄存器

  1. div:使用操作数作为除数,除以被除数(无符号除法)。
    • 如果除数的长度为8位,则只使用AX作为被除数,执行除法后商存储在AL中,余数存储在AH中。
    • 如果除数的长度为16位,则使用DX:AX作为被除数,执行除法后商存储在AX中,余数存储在DX中。
  2. idiv:有符号除法
mov ax, 0x0400
mov bl, 0xf0
idiv bl
  1. sub:
sub ah, al;可以等价为如下neg  al
add ah, al
  1. neg:用0减去指令中指定的操作数

  2. cmp:比较两个数,如果相等则将ZF置1,否则置0。

  3. cbw(Convert Byte to Word):将字节扩展至字

  4. cwd(Convert Word to Double-word):将字扩展至双字

  5. jns:条件转移指令,执行时要参考标志寄存器的符号位SF,如果SF不为1则跳转,否则不跳转

  6. jmp指令

    • jcxz:当CX寄存器内容为0时进行转移。
    • jmp short xxx:相对短转移,操作码位0xEB,该指令属于段内转移指令,长度为2字节,只允许-128–127字节的地方。
    • jmp near xxxx:16位相对近转移,操作码0xE9,是段内转移,长度位3字节,转移范围为-32768–32767。
    • jmp (near) xxxx:16位简介绝对近转移,由16位通用寄存器博保存。jmp near bx, jmp near cx,jmp [bx+si]
    • jmp 0x0000:0x7c00:16位直接绝对远转移(字节码EA 00 7C 00 00),直接给出段地址和偏移地址。
    • jmp far [0x04]:该指令执行时,会访问段寄存器DS所指向的数据段,并从0X04偏移地址处取出两个字保存至IP和CS中(低地址[0x04–0x05]保存了IP,高地址[0x06-0x07]保存了CS)
  7. call:

    • call near (标号或者立即数):16位相对近调用,当前代码段内的call,near不是必须的
      call 0x5000							-> E8 xxxx
      call proc_1
      
    • call (寄存器或者内存地址):16位简介绝对调用,也是一种近调用,只能调用当前代码段内的过程,指令中的操作数不是偏移量,二十被调用过程的真实地址,故称为绝对调用。需要用16位通用寄存器或者16位内存单元给出。(可以调用当前代码段内的任意一个过程,不像相对近调用只能调用-32768到32767字节范围的数据)
      	call cx 								-> FF D1call [0x3000]					-> FF 16 00 30call [bx]							call [bx + si + 0x02]
      
    • call :直接绝对远调用,段间调用。
      	call 0x2000:0x0030			->9A 30 00 00 20
      
    • call :16位简介绝对远调用,也属于段间调用,被第哦啊用过程位于另一个代码段中
      call far [0x2000]
      call far [proc_1]		;执行这句的时候处理器会从段寄存器DS指向的数据段,结合指令中的偏移地址,取出两个字。以此取代CS个IP内的值。
      call far [bx]
      call far [bx + si]	
      
  8. ret和retf:与call和call far配对。

    • ret是近返回指令,处理器从堆栈中弹出一个字到IP中。
    • retf是远返回指令,处理器分别弹出两个字到IP和CS中。
  9. shr:逻辑右移指令

  10. shl:逻辑左移指令

伪指令

    • resb:从当前位置开始,保留指定数量的字节,但不初始化。
    • resw:声明未初始化的字
    • resd:声明未初始化的双字

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

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

相关文章

面试必备的Linux常用命令

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 Linux常用命令 1、文件及内容2、网络3、进程服务4、…

PostgreSql 设置自增字段

一、概述 序列类型是 PostgreSQL 特有的创建一个自增列的方法。包含 smallserial、serial和 bigserial 类型,它们不是真正的类型,只是为了创建唯一标识符列而存在的方便符号。其本质也是调用的序列,序列详情可参考:《PostgreSql 序…

【FPGA】综合设计练习题目

前言 这是作者这学期上的数电实验期末大作业的题目,综合性还是十分强的,根据组号作者是需要做“4、篮球比赛计分器”,相关代码会在之后一篇发出来,这篇文章用于记录练习题目,说不定以后有兴趣或者有时间了回来做做。 …

慢SQL的治理经验

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、慢SQL导致的后果 二、可能导致慢SQL的原因 三、如何发现慢SQL 3.1 JVM Sandbox 四、识别高危SQL 4.1 阿里的重点强制SQL规…

python 拆分视频为图像序列

import cv2 import os#此删除文件夹内容的函数来源于网上 def del_file(filepath):"""删除某一目录下的所有文件或文件夹:param filepath: 路径:return:"""del_list os.listdir(filepath)for f in del_list:file_path os.path.join(filepath, …

微信小程序ios中非cover组件点击重复触发地图tap事件

现象&#xff1a; map中使用view组件的click事件会重复触发地图的tap组件&#xff0c;只在ios上出现 <map id"maps" style"width: 100vw;height: 100vh;" :latitude"latitude" :longitude"longitude":markers"markers"…

element-ui以服务方式调用loading,自定义修改icon

一、以服务的方式调用Loading 除了常用的v-loading、this.$loading我们还可以以服务的方式调用。主要有以下步骤 引入Loading服务 import { Loading } from element-ui;在需要时调用 Loading.service(options);其中 options 参数为 Loading 的配置项&#xff0c;具体见下表…

(第8天)保姆级 PL/SQL Developer 安装与配置

PL/SQL Developer 安装与配置(第8天) 咱们前面分享了很多 Oracle 数据库的安装,但是还没有正式使用过 Oracle 数据库,怎么连接 Oracle 数据库?今天就来讲讲我学习中比较常用的 Oracle 数据库连接工具:PL/SQL DEVELOPER。 PL/SQL Developer 的安装和配置对于新手来说还是…

Unity 射线检测(Raycast)检测图层(LayerMask)的设置

目录 主要内容 拓展&#xff1a; 主要内容 Raycast函数有很多重载(函数的重载根据函数的参数来决定) 这里只涉及这个重载,其余重载可以很方便得在Visual Studio中看源码获取&#xff1b; public static bool Raycast(Vector3 origin, Vector3 direction, out RaycastHit hit…

链游成为蓝海,潮游世界开创未来新时代

区块链、元宇宙浪潮来袭&#xff0c;为数字世界开启崭新的大门&#xff0c;一场链游模式的范式革命正在发生&#xff01; 未来&#xff0c;元宇宙中&#xff0c;链游将成为中坚力量。 潮游世界抢占时代先机&#xff0c;利用区块链技术的去中心化和数字资产的不可替代性&#x…

设计原则 | 接口隔离原则

一、接口隔离原则 1、原理 客户端不应该依赖它不需要的接口&#xff0c;即一个类对另一个类的依赖应该建立在最小的接口上。如果强迫客户端依赖于那些它们不使用的接口&#xff0c;那么客户端就面临着这个未使用的接口的改变所带来的变更&#xff0c;这无意间导致了客户程序之…

【MySQL】MySQL库的操作

MySQL库的操作 一、创建数据库创建数据库案例字符集和校验规则校验规则对数据库的影响 二、操纵数据库1、查看数据库2、查看当前正在使用的数据库3、使用数据库4、显示创建语句5、数据库删除6、数据库的修改7、备份和恢复8、查看连接情况 一、创建数据库 创建数据库的语法如下…

计网 - TCP扫盲

文章目录 知识点TCP头格式TCP有限状态机&#xff08;FSM&#xff09;为何需要TCP协议TCP的定义TCP连接的概念如何唯一确定一个TCP连接TCP vs UDPTCP拥塞控制TCP流量控制 导图 知识点 TCP头格式 TCP头部包含多个字段&#xff0c;其中一些是必需的&#xff0c;而另一些是可选的…

MySQL笔记-第18章_MySQL8其它新特性

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第18章_MySQL8其它新特性1. MySQL8新特性概述1.1 MySQL8.0 新增特性1.2 MySQL8.0移除的旧特性 2. 新特性1&#xff1a;窗口函数2.1 使用窗口…

机器人说明书---名词解释017课_C++语言_多态

目录 多态基类被派生为两个类编译器看的是指针的内容 视频讲解 多态 多态按字面的意思就是多种形态。当类之间存在层次结构&#xff0c;并且类之间是通过继承关联时&#xff0c;就会用到多态。 C 多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的…

数据结构实验任务八:排序算法的实现与分析

问题描述 统计成绩&#xff1a;给出 n 个学生的考试成绩表&#xff0c;每条信息由姓名和分数组成&#xff0c;试设 计一个算法&#xff1a; 1.按分数高低次序&#xff0c;打印出每个学生在考试中获得的名次&#xff0c;分数相同的为同 一名次&#xff1b; 2.按名次列出每个学生…

性能优化 vue2/vue3 通过CDN 减少项目启动时间

其实更多可以通过压缩图片等文件大小 也会让项目运行快一些 以及尽量使用异步或者懒加载 使用CDN可以避免在项目中使用npm导入Vue的依赖项&#xff0c;从而减少项目启动时的加载时间 使用方法如下 <!-- Vue 2 --> <script src"https://cdn.jsdelivr.net/npm/vue…

前端:兼容 cookie 和 localStorage 类,且可设置过期时限

前言 兼容 Cookie 和 localStorage 两种方式&#xff0c;且都可设置过期时限&#xff1b; 初始化 init(type, timeOut) 参数 名称类型描述typeString存储方式。支持 2 种类型&#xff1a;cookie&#xff08;存储值最大为 4KB&#xff09;、localStorage(存储值最大为 5M)t…

解码大语言模型奥秘:《大规模语言模型:从理论到实践》震撼上市!

2022年11月&#xff0c;ChatGPT的问世展示了大模型的强大潜能&#xff0c;对人工智能领域有重大意义&#xff0c;并对自然语言处理研究产生了深远影响&#xff0c;引发了大模型研究的热潮。 距ChatGPT问世不到一年&#xff0c;截至2023年10月&#xff0c;国产大模型玩家就有近2…

(1)(1.7) HOTT telemetry

文章目录 前言 1 布线和设置 2 参数说明 前言 Plane-4.0.0&#xff08;及更高版本&#xff09;、Copter-4.0.4&#xff08;及更高版本&#xff09;和 Rover-4.1.0&#xff08;及更高版本&#xff09;支持 Graupner HOTT 遥测技术。 1 布线和设置 与自动驾驶仪的连接可通过…