文章目录
-
- 1.通用寄存器
- 2.字在寄存器中存储
- 3.确定物理地址的方法
- 4.内存分段表示法
- 5.CS、IP寄存器及代码段
- 6.jmp指令
1.通用寄存器
8086中的所有寄存器都是16位的,可以存放两个字节,AX、BX、CX、DX这四个寄存器用来存放一般性的数据,统称为通用寄存器。
由于8086的上一代cpu其寄存器是8位的,因此也可以将寄存器分为两个独立的8位寄存器来使用,如下所示。
2.字在寄存器中存储
cpu可以对两种尺寸的数据进行一次性处理:
3.确定物理地址的方法
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,这个地址称为物理地址。cpu通过地址总线送入存储器的必须是一个内存单元的物理地址,因此首先在cpu内部形成物理地址。
8086被称为16位机,那是因为在8086内部,一次性处理、传输、暂存的信息的最大长度为16位,因此,能一次性处理、传输、暂存16位的地址。但是8086有20位地址总线,其寻址能力达到了1MB,因此需要采用两个16位地址合成的方法来形成一个20的物理地址。
如上图所示,cpu想要读写内存的步骤如下:
- cpu中部件提供两个地址:段地址和偏移地址;
- 段地址和偏移地址通过内部总线送入地址加法器;
- 地址加法器将两个16位地址合成一个20位地址;
- 地址加法器通过内部总线将20位地址送入输入输出控制电路;
- 输入输出控制电路将物理地址送到地址总线;
- 物理地址被地址总线送到存储器中。
4.内存分段表示法
如下图所示,cpu将内存进行段的划分,即将若干地址连续的内存单元看作一个段,将段地址左移4位就是定位段的起始地址,用偏移地址确定具体的内存单元。
如上图左边所示,段的起始地址为10000,而结束地址为100FF,其大小为100;右边将该段分为更小的两端,大小都为80。段地址一定是16的倍数,这是因为物理地址是由段地址*16+偏移地址得到的,而偏移地址是16位的,因此一个段的最大长度为16KB。
5.CS、IP寄存器及代码段
CS和IP寄存器是8086CPU中最关键的两个寄存器:CS为代码段寄存器,IP为指针指令寄存器。在任意时刻,CPU将地址为CS:IP指向的内容当做指令执行。如下图所示,即为CPU读取、执行指令的工作原理。
初始状态,CPU中CS寄存器为2000,IP寄存器为0。
CS、IP中的内容送入地址加法器。
地址加法器将物理地址送入输入输出电路。
控制电路将物理地址送上地址总线。
内存20000单元处的内容被从数据总线传送到CPU中。
控制电脑将指令B8 23 01传送到指令缓冲器。
读取一条指令后,IP的值自动增加。
指令B8 23 01被执行。
指令执行后AX寄存器中内容被改变。
6.jmp指令
在CPU中,程序员能够用指令读写的部件只有寄存器,通过改变寄存器中的内容来控制CPU,CPU执行的指令位置是由CS、IP寄存器中的内容决定的,通过改变这两个寄存器的内容就可以控制CPU执行目标指令。可以通过jmp指令来修改CS:IP的内容。
如果想同时修改CS:IP的内容,可用“jmp段地址:偏移地址”的指令完成:
jmp 2AE:3,执行后CS的值为2A3E,IP的值为0003,CPU会从2AE33处读取指令。
如果仅仅修改IP中的内容,可以用“jmp 一个合法寄存器”的指令完成:
jmp ax,如果ax=1000,那么IP中的内容也会变为1000。
(本文中的内容改编与王爽老师《汇编语言》)
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2041762.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
汇编语言(1)——寄存器
文章目录1.通用寄存器2.字在寄存器中存储3.确定物理地址的方法4.内存分段表示法5.CS、IP寄存器及代码段6.jmp指令1.通用寄存器 8086中的所有寄存器都是16位的,可以存放两个字节,AX、BX、CX、DX这四个寄存器用来存放一般性的数据,统称为通用寄……
Wine运行器帮助——容器自动配置脚本语法(Bash引擎)
语法
基于 Bash 制作,需要 Wine 运行器 2.3.0 及以上版本才可使用该引擎
查看命令帮助
这个文档可能更新不会太及时,可以通过如下命令在交互模式下获取命令帮助:
命令 –help在此引擎下新增的环境变量列表
目前的环境变量
环境变量名变……
如何使用docker搭建redis cluster集群?
要搭建的集群情况说明
在一台Linux服务器上使用docker搭建一个cluster模式的redis集群。三个master节点,三个slave节点,六个节点因为在同一台服务器上,所以每个节点使用不同的端口,端口范围是6380到6385。
redis cluster集群具有……
OsChina上博客索引
OsChina上博客索引 0065-ffmpeg命令行参数 0064-nRF51822之BootLoader 0063-FM收音机芯片TEA5767 0062-存储器器件选型 0061-信号处理器件选型 0060-常用APDU指令响应码 0059-Java8新特性 0058-CRC32源码 0057-单片机常用数据接口和总线和协议 0056-CC254x/CC2540/CC2541库函数……
NRF51822之定时器
NRF51822之定时器 一、了解 NRF51822的定时器是运行在系统的高频率下面的, HFCLK 16 MHz ,包括一个四位的分频器,用来对HFCLK 进行分频。也就是说,最大16分频。 由于其丰富的定时器任务、时间和中断特点,所以可编程外设互连系……
Android用include复用/重用布局
Android用用<include>复用/重用布局 用<include>嵌入其他布局文件 <LinearLayout xmlns:android "http://schemas.android.com/apk/res/android" xmlns:tools "http://schemas.android.com/tools" android:layout_width "match_par……
Android高低API版本兼容之@TargetApi
Android高低API版本兼容之TargetApi Android 使用TargetApi annotaion,使高版本API的代码在低版本SDK不报错 例如: AsyncTask.THREAD_POOL_EXECUTOR, 这个静态变量是API11才有的,设置project build target为2.1. 这个时候eclipse会提示找不到这个变量。 只要在方法前……
BLE开发之手机搜索iBeacon基站
BLE开发之手机搜索iBeacon基站 Android,BLE,iBeacon基站 上次讲了Android手机与BLE终端之间的通信,而最常见的BLE终端应该是苹果公司倡导的iBeacon基站。iBeacon技术基于BLE,它的特点是通过广播对外发送消息,手机不需要连上iBeacon基站也能获……
Android4.3蓝牙BLE初步
Android4.3蓝牙BLE初步 一、关键概念: Generic Attribute Profile (GATT)通过BLE连接,读写属性类小数据的Profile通用规范。现在所有的BLE应用Profile都是基于GATT的。Attribute Protocol (ATT)GATT是基于ATT Protocol的。ATT针对BLE设备做了专门的优化&……
android:inputType参数
android:inputType参数 android:inputType"none"–输入普通字符
android:inputType"text"–输入普通字符
android:inputType"textCapCharacters"–输入普通字符
android:inputType"textCapWords"–单词首字母大小
android:inputType&q……
杭州旭航集团,申请纳斯达克IPO上市,募资9800万美元
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,为中国企业提供数字内容营销服务的杭州旭航网络科技有限公司的控股公司Xuhang Holdings Ltd(以下简称:旭航集团),近期已向美国证券交易委员会(SEC)提……
深度学习快速参考:11~13
原文:Deep Learning Quick Reference 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如何实现目……
基于copula的风光联合场景生成与缩减
目录
1 主要内容
风光出力场景生成方法
2 部分程序
3 程序结果
4 程序链接
点击直达! 1 主要内容
该程序方法复现《融合风光出力场景生成的多能互补微网系统优化配置》风光出力场景生成部分,目前大多数研究的是不计风光出力之间的相关性影响&……
TS 使用自动提示生成对象中的键
TS 使用自动提示生成对象中的键
使用 plain object 而不是 class 的原因主要是在于 redux 中保存的对象需要为可序列化的对象。当然,具体操实现的时候肯定是可以无视这个需求的,不过 Redux 团队强烈建议使用可序列化对象,具体的官方文档说明……
Spring Boot概述(一)
1. SpringBoot 概述
1.1 SpringBoot 概念
SpringBoot提供了一种快速使用Spring的方式,基于约定优于配置的思想,可以让开发人员不必在配置与逻辑业务之间进行思维的切换,全身心的投入到逻辑业务的代码编写中,从而大大提高了开发的……
计算机笔试/面试常见逻辑题/智力题汇总
说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充,……
OpenAI文档翻译——搭建第一个自己的ChatGPT应用
这篇主要是讲了重头到位创建一个基于OpenAI API的应用程序的过程,同时给出了Node.js、Python版本的实例代码。应用程序的构建总体来说是很简单的就是一个接口调用,前提是我们需要提供密匙。
如果想要获取更好的结果返回一个是可以给模型提供一些列子从而……
python以及PyCharm工具的环境安装与配置
这里以Windows为例
Python的安装
当然是到Python官网下载咯,https://www.python.org/downloads/点我直达,如图: 可以下载最新版本,可以下拉找到之前特定的版本安装,如图: 这里先择的是最新版的进行安装……
JavaScript【六】JavaScript中的字符串(String)
文章目录🌟前言🌟字符串(String)🌟单引号和双引号的区别🌟属性🌟 length :字符串的长度🌟 方法🌟 str.charAt(index);🌟 str.charCodeAt(index);🌟 String.fromCharCode(……
获取文件MD5小案例(未拆分文件)
文章目录前端获取MD5后端获取MD5前端获取MD5
1、引入js
<script src"js/spark-md5.min.js" type"text/javascript"></script>注:spark-md5库GitHub链接 2、这里是一个按钮和被隐藏调的<input/>标签 <body><button……
编程日记2023/4/16 14:57:19