汇编语言第二章:寄存器

news2024/11/23 12:00:40

2. 寄存器

寄存器进行信息的存储,对于汇编程序员来说,CPU 中的主要部件是寄存器。8086CPU14 个寄存器,这些寄存器分别是:

AX BX CX DX SI DI SP BP IP CS SS DS ES PSW

通用寄存器

8086所有的寄存器都是 16 位的,可以存放两个字节。下面所有的描述都是基于 8086,不再赘述。

通用寄存器通常用来存放一般性的数据。下面是四个通用寄存器:

AX、BX、 CX、 DX

16位寄存器的逻辑结构:

在这里插入图片描述

一个 16 位的存储器可以存储一个16位的数据,存储的数据范围为(2^0 ~ 2 ^ 16 - 1 )

在这里插入图片描述

每个寄存器都可以分为两个独立的 8 位寄存器来使用。AX 可以分为 AHAL

ax 的低八位(0-7)构成了al寄存器,高八位(8-15)构成了ah寄存器。
在这里插入图片描述

字的存储

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

字:word 一个字由两个字节组成,可以分为高位字节和低位字节。

一个字可以存在一个 16 位寄存器中。

mov ax, 18   //将18送入寄存器ax
mov ah, 78   //将78送入寄存器ah
add ax,8     //将寄存器ax中的数值加上 8

注意:在写一条汇编指令或者一个寄存器的名称时不区分大小写。

在进行数据传送或者运算的时候,要注意指令的两个操作对象的位数应当是一致的。8 位 和 16 位一定不要混用。

// 以下全是错误指令
mov ax,bl
mov bh,ax
mov al,20000
add al, 100H

物理地址

每一个内存单元在空间中都有一个唯一的地址,这个唯一的地址就是物理地址。

16位结构的描述了一个 CPU 具有如下结构特性:

  • 运算器一次最多可以处理 16 位数据
  • 寄存器的最大宽度是 16 位
  • 寄存器和运算器之间的通路为 16 位。

8086 CPU 可以一次性传送 20 位地址,寻址能力为 1 MB 采用一种在内部用两个16位地址合成的方法来形成一个 20 位的物理地址。

8086 CPU 提供两个 16 位的地址,一个是 段地址,一个是偏移地址。

过程:

段地址+偏移地址 =》地址加法器 =》输入输出控制电路 =》通过地址总线传送到内存

在这里插入图片描述

地址加法器采用 物理地址 = 段地址 * 16 + 偏移地址 的方法合成物理地址。

本质含义:CPU 在访问内存的时候,用一个基础的地址(段地址*16)和一个相对基础地址的偏移地址相加,给出内存单元的物理地址。

更一般的说法 :物理地址 = 基础地址 + 偏移地址

段地址   1230            段地址*16 12300     相加获得物理地址:123C8H
偏移地址 00C8            偏移地址   00C8

小技巧:一个 X 进制的数据左移一位,相当于乘以 X

段寄存器

段并不是把内存单元划分成了一个一个的段。其实内存并没有划分成段,段的划分来自 CPU ,用上述的方式来给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

在这里插入图片描述

注意两单:段地址*16 必然是16的倍数,所以一个段的起始地址一定是16的倍数;偏移地址位16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB。

CPU可以用不同的段地址和偏移地址形成同一个物理地址。

有四个段寄存器: CS、DS、SS、ES 本节我们重点看一下 CS

CSIP 指示了 CPU 当前要 读取指令 的地址。CS 为代码段寄存器 IP 为指令指针寄存器。

CS 的地址为 M , IP 中的地址为 N ,8086 CPU将从内存 M * 16 + N单元开始,读取一条指令并执行。

Q:CPU 根据什么将内存中的信息看作指令?

A:CPU 将 CS : IP 指向的内存单元中的内容看作指令。

修改 CS 、IP 的指令

如果想同时修改 CS IP 的指令,需要用 jmp 段地址:偏移地址

上述指令的功能位:用指令中给出的段地址修改CS 偏移地址修改 IP

如果仅想修改 IP 的内容,可用形如 jmp 某一寄存器 的指令完成.。

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

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

相关文章

Android Rust JNI系列教程(二) 创建第一个Rust JNI项目

前言 提到JNI,大家都会想到C,C.不过如今rust又给我们增加了一个选项,借助rust的jni库(https://github.com/jni-rs/jni-rs),我们可以很方便的使Android与rust交互.从本章起,我们将逐步地了解使用rust实现一些经典的jni方法. 创建Rust项目 创建工程 在命令行输入命令: cargo…

超算/先进计算的发展与应用是什么?

经过近十年的快速发展,我国在超算领域的实力已达到世界先进水平。1993年,我国第一台高性能计算机“曙光一号并行机”研制成功,打破了国外IT巨头对我国超算技术的垄断。 自此,我国不断加快超级计算机研制步伐。从全球超级计算机TO…

精华推荐 | 【MySQL技术专题】「主从同步架构」全面详细透析MySQL的三种主从复制(Replication)机制的原理和实战开发(原理+实战)

前提概要 随着应用业务数据不断的增大,应用的响应速度不断下降,在检测过程中我们不难发现大多数的请求都是查询操作。此时,我们可以将数据库扩展成主从复制模式,将读操作和写操作分离开来,多台数据库分摊请求&#xff…

NEUQACM双周赛(三)

目录7-1 打字(C)题目描述:输入格式:输出格式:输入样例1:输出样例1:输入样例2:输出样例2:解题思路:7-2 分香肠(C,最大公约数)题目描述:输入格式:输出格式:输入样例:输出样例:解题思路…

节能降耗 | AIRIOT智慧电力综合管理解决方案

电力技术的发展推动各行各业的生产力,与此同时,企业中高能耗设备的应用以及输配电过程中的电能损耗,也在一定程度上加剧了电能供应压力。以工业制造业为例,企业的管理水平、能耗结构、生产组织方式都关系到能源的有效利用率&#…

电子招投标系统nodejs+vue+elementui

前端技术:nodejsvueelementui 前端:HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn install产生) 这文件夹就是在创建完项目后,cd到项目目录执行npm install后生成的文件夹,下载了项目需要的依赖项。 2、packag…

电商新模式——链动2+1模式为你带来社交电商新思路

随着流量入口价值的降低,电商 IP 时代的来临,移动社交电商获得了飞速的发展,在运营与营销的过程中,商家们往往为了降低营销成本,主动制造消费理由,通过各类促销、折扣来刺激消费,然而在回归商业…

Web3中文|NFT如何促进教育的发展?

自问世以来,NFT已经被应用于教育、艺术等多个领域。不过,相较于艺术行业,大多数人对NFT在教育界的作用知之甚少。 那么,就让我们来看看它们在课堂内外的影响都有哪些。 得益于区块链技术,NFT可以提高教育质量&#x…

【蓝桥杯选拔赛真题52】Scratch正话反说 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch正话反说 一、题目要求 编程实现 二、案例分析 1、角色分析

Android Rust JNI系列教程(三) Rust与Android互相调用

前言 Rust的JNI流程以及方法实际上和我们常见的C JNI是十分相似的.我们本章将使用Rust实现常见的JNI调用功能.关于更多的用法,可参考官方示例,github地址为https://github.com/jni-rs/jni-rs/blob/master/example/mylib/src/lib.rs. 基本交互功能实现 1. Java传String,返回b…

Java集合复习

文章目录集合概述、collection集合体系特点Collection集合的遍历增强for循环集合概述、collection集合体系特点 集合都是支持泛型的&#xff0c;但是集合只能存储对象&#xff0c;因此集合也叫做对象集合。 public static void main(String[] args) {Collection<String>l…

分布式 | 令人头疼的堆外内存泄露怎么排查?

作者&#xff1a;鲍凤其 爱可生 dble 团队开发成员&#xff0c;主要负责 dble 需求开发&#xff0c;故障排查和社区问题解答。少说废话&#xff0c;放码过来。 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联…

OpenFace Win10 运行和抽离部分代码

需求&#xff1a;提取出OpenFace中的GazeAnaLyser 中的部分代码往一个写好的接口里面放&#xff0c;主要实现提取面部的所有关键点&#xff0c;估计出视线的功能&#xff1b; 一&#xff0c;openface的安装与使用 在win10上把openface跑起来这个链接够用了&#xff0c;这里主要…

非零基础自学Golang 第5章 流程控制 5.2 循环控制

非零基础自学Golang 文章目录非零基础自学Golang第5章 流程控制5.2 循环控制5.2.1 for循环5.2.2 break 跳出循环5.2.3 continue 继续循环第5章 流程控制 5.2 循环控制 5.2.1 for循环 Go语言中的循环逻辑通过for关键字实现。不同于其他编程语言&#xff0c;Go语言没有while关…

NeurIPS2022 | OmniVL: 用于Image-Language和Video-Language任务的通用模型

原文标题&#xff1a;OmniVL: One Foundation Model for Image-Language and Video-Language Tasks 论文链接&#xff1a;OmniVL: One Foundation Model for Image-Language and Video-Language Tasks | OpenReview 三模态统一的工作。 一、问题提出 旨在设计一个全视觉语言…

正点原子基于库和寄存器建立keil的工程文件简单理解(不是具体步骤)

下载mdk 个人上传免费的pdf:https://download.csdn.net/download/weixin_43794311/87232741&#xff0c;或直接到正点原子官网下载 https://www.keil.com/download/ 两种建立方式的本质理解 库函数是有人基于寄存器已经完成对寄存器的设置&#xff0c;只要根据函数参数意义&…

【Uni-App】vscode 开发uni-app 配置eslint、prettier 实现代码检查和代码自动格式化

目录一&#xff1a;前言二、利用HBuilderX创建uni-app项目三、配置代码检查和代码自动格式化1. 在vscode中打开项目2. 创建package.json3. 添加eslint、prettier相关依赖4. 配置.eslintrc.js5. 配置.prettierrc.json6. 配置.editorconfig7. 配置.eslintignore如果以上还不生效&…

USB——域,包,事务及传输

USB 域&#xff0c;包&#xff0c;事务及传输 域组成包包组成事务事务组成传输 字节序 LSB 概览 域通常来说有八个 SYNCPIDADDRENDP&#xff1a;FRAMEDATACRCEOP 多个域组成包&#xff0c;USB 的包分为四大类 token&#xff1a;令牌包data&#xff1a;数据包handshake&…

centos7安装samba

关闭防火墙 [rootlocalhost ~]# systemctl stop firewalld.service [rootlocalhost ~]# systemctl disable firewalld.service Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. Removed symlink /etc/systemd/system/basic.target.wants/f…

单目测距(yolo目标检测+标定+测距代码)

单目测距&#xff08;目标检测标定测距&#xff09;** 实时感知本车周围物体的距离对高级驾驶辅助系统具有重要意义&#xff0c;当判定物体与本车距离小于安全距离时便采取主动刹车等安全辅助功能&#xff0c;这将进一步提升汽车的安全性能并减少碰撞的发生。上一章本文完成了目…