8086 汇编笔记(一):寄存器

前言

8086 CPU 有 14 个寄存器,每个寄存器有一个名称。这些寄存器是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

一、通用寄存器

8086 CPU 的所有寄存器都是 16 位的,可以存放两个字节。AX、BX、CX、DX 这 4个寄存器通常用来存放一般性的数据,被称为通用寄存器。

8086 CPU 的上一代 CPU 中的寄存器都是 8 位的。

为了保证兼容,使原来基于上代 CPU 编写的程序稍加修改就可以运行在 8086 之上,8086 CPU 的 AX、BX、CX、DX 这 4个寄存器都可分为两个可独立使用的8位寄存器来用:

        1. AX 可分为 AH 和 AL;

        2. BX 可分为 BH 和 BL;.

        3. CX 可分为 CH 和 CL;

        4. DX 可分为 DH 和 DL。 

AX 的低 8 位(0 位~7 位) 构成了 AL 寄存器,高 8位(8 位~15 位) 构成了 AH 寄存器。AH 和 AL 寄存器是可以独立使用的 8 位寄存器。 

二、字在寄存器中的存储 

出于对兼容性的考虑,8086 CPU 可以一次性处理以下两种尺寸的数据。

字节:记为 byte,一个字节由8个bit组成,可以存在8位寄存器中。

字:记为 word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。

三、汇编指令

书中案例分析,请计算最后 ax 寄存器的值 

程序段中的最后一条指令 add ax,bx,在执行前 ax 和 bx 中的数据都为 8226H,相加后所得的值为:1044CH,但是 ax为16 位寄存器,只能存放4位十六进制的数据,所以最高位的1不能在 ax 中保存,ax 中的数据为:044CH。 

请计算 al 寄存器的值

程序段中的最后一条指令 add al,93H,在执行前,al 中的数据为 C5H,相加后所得的值为:158H,但是 al 为8位寄存器,只能存放两位十六进制的数据,所以最高位的1丢失,ax 中的数据为:0058H

这里如果将 al 换成 ax 则结果为 0158 H(注意区分八位和十六位寄存器)

在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的,例如: 

mov ax,bx
mov bx,cx
mov ax,18H
mov al,18H
add ax,bx
add ax,20000

答案解析:

四、物理地址

每一个内存单元都有唯一的地址,我们将这个唯一的地址称为物理地址。 

五、8086 CPU 给出物理地址的方法

8086CPU 采用一种在内部用两个 16 位地址合成的方法来形成一个 20 位的物理地址

1. CPU 中的相关部件提供两个 16 位的地址,一个称为段地址,另一个称为偏移地址;

2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件:

3. 地址加法器将两个16 位地址合成为一个20位的物理地址;

4. 地址加法器通过内部总线将20位物理地址送入输入输出控制电路;

5. 输入输出控制电路将20位物理地址送上地址总线;

6. 20位物理地址被地址总线传送到存储器。 

地址加法器采用物理地址=段地址x16+偏移地址的方法用段地址和偏移地址合成物理地址 

六、段

如图 2.9 所示,我们可以认为:地址10000H~100FFH 的内存单元组成一个段,该段的起始地址(基础地址)为 10000H,段地址为 1000H,大小为 100H

我们也可以认为地址 10000H~1007FH、10080H~100FFH 的内存单元组成两个段,它们的起始地址(基础地址)为:10000H和10080H,段地址为:1000H和1008H,大小都为 80H。

答案解析:从最小为 0H,最大 FFFFH 计算

七、段寄存器

8086 CPU 有4个段寄存器:CS、DS、SS、ES

八、CS 和 IP

CS 和 IP 是 8086 CPU 中两个最关键的寄存器,它们指示了 CPU 当前要读取指令的地址。CS 为代码段寄存器,IP 为指令指针寄存器 

8086 机中,任意时刻,CPU 将 CS:IP 指向的内容当作指令执行 

图 2.10 说明如下: 

        1. 8086CPU 当前状态:CS 中的内容为2000H,IP中的内容为0000H;

        2. 内存 20000H~20009H 单元存放着可执行的机器码: 

九、修改 CS、IP 指令

mov 指令不能用于设置 CS、IP 的值!!!

若想同时修改 CS、IP 的内容,可用形如“jmp 段地址:偏移地址”的指令完成,例如

jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU 将从 2AE33H 处读取指令。

jmp 3:0B16,执行后:CS0003H,IP=0B16H,CPU 将从 00B46H 处读取指令。  

若想仅修改 IP 的内容,可用形如 “jmp 某一合法寄存器” 的指令完成 

“jmp 某一合法寄存器” 指令的功能为:用寄存器中的值修改 IP 

答案解析:四次,jmp 前后各一次 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在操作系统中合并 PDF 文件?不同系统有不同的方法

Windows 系统 在 Windows 系统中想要合并 PDF 文件我们可能需要借助一些第三方的软件或者浏览器的插件。 我们可以在 Google 浏览器中的 Chrome 应用商店中输入“Merge pdf”这样就可以搜索到在线合并 PDF 文件的插件,只需要下载到浏览器中就可以直接使用。当然 Ed…

量化交易:如何在QMT中运行Python策略并在VSCode中高效调试?

哈喽,大家好,我是木头左! 为何选择QMT和VSCode进行量化策略开发? 在量化交易的世界里,选择正确的工具与拥有优秀的策略同等重要。调用用Visual Studio Code(简称VSCode)或pycharm,方…

【SQLServer】Merge语法

概述 MERGE语句,也被称为“upsert”,根据与源表联接的结果,对目标表进行插入、更新或删除操作。 例如,根据与另一个表的区别,在一个表中插入、更新或删除行,从而同步两个表。 MERGE 语句允许将数据源与目标…

【Vue】插值表达式 {{ }}

一、引入 插值表达式是一种Vue的模板语法 我们可以用插值表达式渲染出Vue提供的数据 作用:利用表达式进行插值,渲染到页面中 表达式:是可以被求值的代码,JS引擎会将其计算出一个结果 以下的情况都是表达式: money…

网络安全-钓鱼篇-利用cs进行钓鱼

一、环境 自行搭建,kill,Windows10,cs 二、原理 如图所示 三、钓鱼演示 首先第一步:打开System Profiler-分析器功能 选择克隆www.baidu.com页面做钓鱼 之后我们通过包装域名,各种手段让攻击对象访问:h…

硬盘有EFI分区格式化不了,也删不了怎么办,不能读取磁盘

问题:EFI为系统引导分区表明这是一块系统盘,常规操作无法格式化也无法删除,也不能读取 解决: 1.管理员运行cmd 2.输入diskpart 3.输入list disk 查看系统磁盘,并找到你格式化不了的那块磁盘 4.select disk 编号 选择…

动手学操作系统(一、搭建实验环境)

动手学操作系统(一、搭建实验环境) 文章目录 动手学操作系统(一、搭建实验环境)1. 在VMware虚拟机中安装ubuntu20.042. 安装Bochs3. 启动计算机Reference 🚀 环境配置 🚀 笔者的环境使用的是 ubuntu 20.04…

学习sam的过程

一、抓包 我平时都是用花瓶去抓包的,配置也很简单。就是下载软件,然后一步步安装。下载地址:Download a Free Trial of Charles • Charles Web Debugging Proxy 。然后配置手机代理 对于那些走http协议的app是可以的,https的还是…

Linux 系统编程笔记--基本概念(一)

操作系统: 管理计算机硬件和软件资源的计算机程序。 内核: 操作系统的核心,是应用程序连接硬件设备的桥梁。 CPU 可以在两种状态下运行:用户态和内核态,在用户态下运行时,CPU 只能访问用户空间的内存;在内核态运行时&…

kafka-守护启动

文章目录 1、kafka守护启动1.1、先启动zookeeper1.1.1、查看 zookeeper-server-start.sh 的地址1.1.2、查看 zookeeper.properties 的地址 1.2、查看 jps -l1.3、再启动kafka1.3.1、查看 kafka-server-start.sh 地址1.3.2、查看 server.properties 地址 1.4、再次查看 jps -l 1…

【数据分享】2017-2023年全球范围10米精度土地覆盖数据

土地覆盖数据是我们在各项研究中都非常常用的数据,土地覆盖数据的来源也有很多。之前我们分享过欧空局发布的2020年和2021年的10米分辨率的土地覆盖数据,也分享过我国首套1米分辨率的土地覆盖数据(均可查看之前的文章获悉详情)! …

Kunpeng Pro测评使用报告

1. 概述 前段时间,收到两条CSDN的短信,邀请我参加Kunpeng Pro的测评活动。说起来,自己玩过的开发板已经不在少数,而自己作为半导体行业的从业者,手上开发过的芯片也有十几款,小到Arm Cortex-A53&#xff0…

老年人健康管理系统项目部署【linux】

老年人健康管理系统项目部署【linux】 前言版权推荐老年人健康管理系统项目部署购买阿里云服务器开发票连接开放端口 安装软件查看状态1更新yum源2安装jdk83安装mysql4上传Mysql数据5安装redis6安装kakfa7安装nginx8运行命令 命令汇总1更新yum源2Jdk8安装3Mysql安装4Mysql数据5…

SpringBoot——集成Spring Data JPA保存数据

目录 JPA 项目总结 新建一个SpringBoot项目 pom.xml application.properties配置文件 User实体类 UserRepository接口 SpringbootJpaApplicationTests测试类 测试 JPA 项目在运行过程中会产生很多业务数据,一般我们把数据保存起来的这个过程称为数据持久化。…

【C++】牛客——JZ38 字符串的排列

✨题目链接: JZ38 字符串的排列 ✨题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数…

灯下黑”挖出国内知名安全平台某BUF的CSRF漏洞

漏洞复现: 漏洞点在删除文章的地方,首先为了测试先发布一篇文章 发布之后我们可以查看文章,注意url中的一串数字,就是这篇文章的id,如下如: 这里的文章id是“271825”,首先抓一下删除文章的数据…

转行嵌入式,需要自学多久?

那要看你的预期目标是什么。如果你只是为了找到一份工作,那么学习半年左右,掌握基本的开发技能,就可以找到一个初级岗位的工作,工资在 5K 到 10K 左右。不过,运气好的话可能时间更短,运气差的话可能需要一年…

基于PHP+MySQL组合开发的微信小程序分销商城源码系统 分销商城+积分商城+多商户 功能强大 带完整的安装代码包以及搭建教程

系统概述 在当今数字化商业时代,拥有一个强大而多功能的分销商城系统对于企业的发展至关重要。本文将重点介绍基于 PHPMySQL 组合开发的微信小程序分销商城源码系统,它融合了分销商城、积分商城和多商户等功能,不仅功能强大,还提…

小苯的排列构造,小苯的01背包(easy),小苯的01背包(hard)

小苯的排列构造 题目描述 运行代码 #include<bits/stdc.h> using namespace std; typedef long long ll; #define N 1000050 int i,j,k,n,m,t,a[N],b[N],f[N],l[N]; bool v[N]; int main(){cin>>n;for(i1;i<n;i)cin>>a[i];v[0]1;for(i1;i<n;i){if(a[…

Windows下PostgreSQL数据库的备份与恢复

文章目录 一、备份1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;使用pg_dump进行备份1.打开命令窗口2.使用pg_dump将数据库备份下来 二、恢复1.找到PostgreSQL的安装目录下的"bin"目录2.在windows的命令窗口里&#xff0c;…