汇编语言第2章—寄存器

news2024/11/27 8:48:21

8086CPU有14个寄存器,分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
2.1  通用寄存器
        8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器
8086CPU的
AX、BX、CX、DX这4个寄存器可以分为两个独立使用的8位寄存器:
(1)AX可以分为AH和AL;
(2)BX可以分为BH何BL;

(3)CX可以分为CH何CL;
(4)DX可以分为DH何DL;


2.2  物理地址
        所有的内存单元构成的内存空间是一个一维的线性空间,每一个内存单元在这个空间中有唯一的地址,成这个唯一的地址为
物理地址


2.3  8086CPU给出物理地址的方法
        8086CPU是16位结构,这就是说在8086内部,能够一次性处理、传输、暂时存储的最大长度为16位。8086CPU有20位地址总线,可以传送20位地址。8086CPU又是16位结构,只能送出16位地址。8086CPU采用一种在内部使用两个16位地址合成的方法形成20位物理地址。相关部件的逻辑结构如下图所示:


                                               图1  8086CPU相关部件的结构
如图1所示,当8086CPU读写内存时:
(1)CPU中的相关部件提供两个16位的地址,一个称为
段地址,一个称为偏移地址
(2)段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
(3)地址加法器将两个16位地址合成一个20位的物理地址(
物理地址=段地址*16+偏移地址):
(4)地址加法器通过内部总线将20位物理地址送入输入输出控制电路;
(5)输入输出控制电路将20位物理地址送上地址总线:
(6)20位物理地址被地址总线传送到寄存器。


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

2.4.1  CS段寄存器
        CS和IP指示CPU当前要读取指令的地址。
CS:IP指向的内容当做指令执行。CS为代码段寄存器,IP为指令指针寄存器
       
同时修改CS、IP的内容,可使用形如 “jmp 段地址:偏移地址”,jmp 2AE3:3执行后,CS=2AE3,IP=3,CPU从2AE33H处读取指令。“jmp 段地址:偏移地址”指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。
        若仅修改IP的内容,可用“
jmp 某一合法寄存器”的指令来完成,用寄存器中的值修改IP,如jmp ax。

2.4.2  DS段寄存器和[address]
        DS寄存器用于存放要访问
数据的段地址。[address]表示一个偏移地址为address的内存单元,CPU使用DS*16+address做为数据的地址来访问相应地址单元中的数据。

mov ax ,123BH     //将数据123BH传递给ax
mov ds ,ax        //将ax中的数据传递给段寄存器ds
mov ax ,0        //将ax寄存器赋值为0
add ax,[0]        //将数据段第一个字(偏移地址为0)加到ax中

2.4.3栈段寄存器
        8086CPU中,段寄存器SS和寄存器SP,
栈顶放在SS中,偏移地址放在SP中。任意时刻,SS:SP指向栈顶元素。push指令和pop指令执行时,CPU从SS和SP中得到栈顶的地址。
       
push为入栈指令形式为,push   寄存器,表示将一个寄存器中的数据入栈。如push ax,由以下两步完成:
        (1)SP=SP-2,SS:SP指向当前栈顶前面的单元,以当前栈顶前面的单元为新的栈顶
        (2)将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新的栈顶
        push指令 格式包含如下:
                push 寄存器
                push 段寄存器
                push 内存单元
     
  pop指令为出栈指令,形式为 pop  寄存器表示将一个寄存器中的数据出栈。如pop ax,由以下两步完成:
        (1)将SS:SP指向的内存单元处的数据送入ax中;
        (2)SP=SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。
        pop指令 格式包含如下:
                pop  寄存器
                pop  段寄存器
                pop  内存单元

 

段的综述
        可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元。可以用一个段存放数据,将它定义为“数据段”;对于一个数据段,将它的段地址放在DS中,用mov、add、sub等访问内存单元的指令时,CPU将我们定义的数据段中的内容当做数据来访问;

        可以用一个段存放代码,将它定义为“代码段”;将它的段地址放在CS中,将段中第一条指令的偏移地址放在IP中,这样CPU将执行我们定义的代码段中的指令;

        可以用一个段当做栈,将它定义为“栈段”;对于栈段,将它的段地址放在SS中,将栈顶的偏移地址放在SP中,这样CPU执行栈操作时,比如执行pop、push等指令,就将我们定义的栈段当做栈空间使用。

        一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关键在于CPU中寄存器的设置,即CS、IP,SS、SP,DS的指向。



 

 

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

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

相关文章

【Spring】AOP记录日志

我的aop记录日志,可以记录:【 操作类型、操作描述、参数、登录项目的用户ip】 当然记录什么靠你自己决定。 一.自定义一个注解 Target({ElementType.METHOD,ElementType.PARAMETER}) Retention(RetentionPolicy.RUNTIME) Documented public interface A…

两位前阿里 P10 的成长经历的启发

目录 汤峥嵘的成长经历 关键节点一:到美国留学 关键节点二:美国工作十年 关键节点三:八年阿里时光 关键节点四:加入途牛和 VIPABC 毕玄的成长经历 关键节点一:小公司里脱颖而出 关键节点二:加入淘宝…

FineReport数据分析教程- 图表刷新接口

1. 概述 1.1 预期效果 点击按钮可以刷新普通报表或决策报表中的图表,以普通报表为例,效果如下图所示: 1.2 实现思路 通过FR.Chart.WebUtils.getChart("chartID").dataRefresh()获取要刷新的图表对象,其中chartID为图表…

程序员如何写一份更好的简历

简历中的常见错误 1. 信息过多,缺乏重点 信息过多的常见表现是十几行的技能列表, 我举一个血淋淋的例子: 20 行的技能列表,这位求职者开始就把自己了解的所有工具都列出来,希望能够突显自己的经验和学习能力&#xf…

pytorch基础操作(五)多层感知机的实现

1、多层感知机 1、激活函数的引入 这个多层感知机有4个输⼊,3个输出,其隐藏层包含5个隐藏单元。输⼊层不涉及任何计算,因此使⽤此⽹络产⽣输出只需要实现隐藏层和输出层的计算。因此,这个多层感知机中的层数为2。注意&#xff0…

小米盒子为什么搜不到电视家?电视安装包解析错误解决方案

不少的朋友在小米电视盒子上安装了美家市场软件商店后,却发现在市场里面没法安装想要的电视盒子直播软件,这是怎么回事呢?其实大部分原因是电视盒子机制的问题限制了安装,导致部分品牌电视盒子装软件时会弹出“无法安装”的提示。…

Mysql双主整理

目录 1. Mysql binlog参数配置 2. Mysql binlog查看详细内容 3. Mysql双主搭建 4. Mysql双主解决数据回环 4.1 双主同步测试一 4.1.1 测试总结 4.2 双主同步测试二 4.2.1 测试总结 4.3 双主同步测试三 4.3.1 测试总结 1. Mysql binlog参数配置 log-binmysql-bin 打…

水果FLStudio21.0.0软件最新版有哪些新增功能变化?

FL Studio(水果软件)21 引入更快、更精确的音频编辑、改进的内容发现、对 DAW 情绪的控制以及更多鼓舞人心的创意工具。FL Studio是一款功能非常强大的音乐创作编辑软件它就是FL Studio(水果软件)。使用FL Studio中文版可以轻松帮我们制作自己的音乐唱片,拥有强大且…

【ROS】HelloWord简单实现

C实现 1. 创建工作空间并初始化 创建工作目录demo01_ws,并在该文件夹下创建src文件夹 mkdir -p demo01_ws/src进入到该目录下 cd demo01_ws/初始化 catkin_make这时在demo01_ws目录下除了src文件夹外,多处了两个文件夹。 ![在这里插入图片描述](htt…

数字化门店转型| 水疗会所管理系统| 小程序搭建

水疗会所与沐足采耳、洗浴按摩等都属于休息享受型服务,是不少中年人的选择,一天的压力可以得到缓解,同时客单价一般在几百元左右,在水疗会所里可以洗澡蒸桑拿、桌游、乒乓球等,同时随着近些年来生活压力逐渐加大&#…

【C语言学习】详解二级指针

在学习数据结构时,通常会遇到调用函数无法对主函数中的全局变量进行有效的更改操作,这时我们就需要指针,但二级指针对于初学者而言有着一定的学习难度,本文通过代码结合实验调试来详细说明二级指针。 如果一个指针指向另一个指针&…

[附源码]Node.js计算机毕业设计高校图书服务系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

Atcoder 前缀和优化DP Candies

Candies - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 思路: 考虑DP 状态设计: 首先,因为是线性DP,dp[i]是必不可少的 然后去考虑一下决策,看看是什么东西影响了决策 对于第 i 个位置&#xf…

stm32f767自举

仅作笔记 一,自举。 在M0,M3,M4内核中,是通过boot0和boot1两个引脚的电平组合来确定启动地址的,启动的介质可以是系统存储器,SRAM,主Flash等。 在M7内核中,是通过boot0的电平加 Fla…

Linux内核调试技术之动态调试

前言 使用printk的打印方式只能通过设置输出等级来进行控制,具备一定的局限性。在实际系统运行过程中,我们更希望能选择性地打开某些子系统或者模块的输出,为此内核提供了动态调试技术。内核中包括pr_debug、dev_dbg接口都使用了动态调试技术…

javax.crypto.BadPaddingException: Decryption error

问题描述 使用Postman调用Java api解密token时 token值为iRdLmVEYUUvoH1oDF2QhSVhJxXYMRCxzbtJsL01Iun2OLHY/FxNQOrAwF4Bj2cdp1vhsXt9BQtcxmiyuCvyi2Itl2qlvlCT6VwRM6UgQ5SBIiInGlLYCrzDfOoQ74zhxwW7M43vIuLs6W0y7Rt86uZgmAR8gYwMLfvGnRg 执行时报错如下: 原因分析…

Redis框架(十二):大众点评项目 阻塞队列+异步处理 实现秒杀优化

大众点评项目 阻塞队列异步处理 实现秒杀优化需求:阻塞队列异步处理 实现秒杀优化为什么使用异步处理?为什么使用阻塞队列?为什么使用Lua?业务逻辑及其实现原有逻辑代码 / 优化后逻辑代码完整优化业务代码原有优化业务代码总结Spr…

Traefik整理

entryPoints配置 defaultEntryPoints ["oneway"][entryPoints]# 代表traefik的监听端口为90[entryPoints.oneway]address ":90"#90端口接收到的请求先进行鉴权,traefik会先访问跳转到http://127.0.0.1:51001/t/test1进行权限验证[entryPoint…

如何使用加密sqlite数据库

如何使用加密sqlite数据库,起始有开源的sqlcipher 可以去开源网站搜索一下,如码云,github等,那么如何编译呢, 这是我的虚拟机版本和 config参数 然后就会生成Makefile 直接make即可生成 sqlcipher可执行程序&#xff…

有关Monaco的使用疑惑

前言 学习monaco editor已经有三个多月了。阅读了大部分的的文档,也看了很多相关文章,也调研了一些使用它做的大型开源项目。 一开始的疑惑已经逐渐解开,但随着学习的深入,也遇到了比较奇怪的问题。这篇文件就来聊一聊&#xff0…