【新书推荐】7.2节 寄存器寻址方式和直接寻址方式

本节内容:寄存器寻址方式的操作数在CPU内部的寄存器中,指令中指定寄存器号。

寄存器寻址方式:16位的寄存器操作数可以是AX、BX、CX、DX、SI、DI、SP、BP共计8个16位通用寄存器;8位寄存器操作数可以是AH、AL、BH、BL、CH、CL、DH、DL共计8个8位寄存器;

7.2.1 寄存器寻址方式

16位的寄存器操作数可以是AX、BX、CX、DX、SI、DI、SP、BP共计8个16位通用寄存器;

8位寄存器操作数可以是AH、AL、BH、BL、CH、CL、DH、DL共计8个8位寄存器。

举例

MOV SI,AX        ;将AX寄存器内存储的值赋给SI寄存器。

MOV AL,DH      ;将DH寄存器内存储的值赋给AL寄存器。

由于操作数在寄存器中,不需要通过访问存储器来取得操作数,所以采用这种寻址方式

的指令执行速度较快。如图7-3所示,AX寄存器包含两个字节存储单元,其中高字节存储单元AH中存储12H,低字节存储单元AL中存储34H。

图7-3 AX寄存器

动手实验18:演示寄存器寻址方式

如图7-4所示,在debug调试器中输入mov ah,12h;mov al,34h;mov si,ax;三条汇编指令,观察寄存器AH、AL、AX和SI的值。

图7-4 演示寄存器寻址方式

思考

         为何MOV AX,1234h、MOV SI,AX这样的寄存器赋值语句称为寻址方式呢?

         我们可以理解为CPU内AX、BX、CX等14个寄存器看作是以字母符号命名的寄存器存储单元,内存中的存储单元同样也是由寄存器构成,只是由于内存中的存储单元太多,所以使用地址编号的方式命名。

7.3节 直接寻址方式

         本节内容:在指令中直接包含操作数的有效地址称为直接寻址方式。

直接寻址方式:直接寻址有两种形式,一是直接给出二进制数表示的地址;二是直接给出地址标号。

7.3.1 直接寻址方式

直接寻址方式的操作数在存储器中,指令直接包含有操作数的有效地址。操作数一般存放在数据段,所以操作数的地址由DS加上指令直接给出的16位偏移得到。

如果采用段超越前缀,则操作数也可包含在数据段外的其他段中,如ES、SS段。

                                                       

图7-5 直接寻址方式

如图7-5所示,设DS=5000H,地址51234H字存储单元的内容是5678H,那么执行MOV AX,[1234H]后AX=5678H。

动手实验19:演示直接寻址方式

如图7-6所示,在debug调试器内输入:

mov ax,5000H;

mov ds,ax;将段值5000H赋给DS段寄存器。

接着输入mov word ptr [1234H],6789H;将6789H存入数据段偏移地址1234H处。

最后输入mov ax,[1234H];将数据段偏移地址1234H处的值6789H送入AX寄存器。

                                               图7-6 演示直接寻址方式

如果在ES段,并使用段超越前缀:MOV ES:[5678H],BL,表示将BL寄存器中的值存储在ES附加段内的偏移地址5678H处。

         使用直接寻址方式时,我们很少会直接使用数值表示偏移地址,而是在数据段中,采用数据定义的形式定义一个变量,这个变量称为数据段内的地址标号。

         例如下面的数据段定义:

         data segment

         var dw 6789H 

         data ends

var dw 6789H  的意思为在数据段地址标号“var”处,以dw字为单位分配2个字节内存空间,并且初始化将其为6789H。

在代码段中,读取数据段内var地址标号对应存储单元内的值:mov ax,ds:[var],这条语句就是典型的直接寻址方式。直接寻址方式常用于处理单个存储器变量的情况,可以在64KB的段内寻找操作数。

谨慎

立即寻址和直接寻址书写的方法不同,直接寻址的地址要放在方括号中,往往用变量名表示。

mov ax,1234h  ;立即寻址方式

mov ax,ds:[var];直接寻址方式

本文摘自编程达人系列教材《X86汇编语言基础教程》。

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

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

相关文章

排序算法---归并排序

原创不易,转载请注明出处。欢迎点赞收藏~ 归并排序是一种常见的排序算法,它采用了分治的思想。它将一个待排序的数组递归地分成两个子数组,分别对两个子数组进行排序,然后将排好序的子数组合并成一个有序数组。 具体的归并排序过…

上位机图像处理和嵌入式模块部署(上位机和下位机通信)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 一般情况下,如果是纯上位机开发的话,这个时候是不需要上位机和下位机进行通信的。只有上位机做好demo有必要移植到嵌入式模…

Modern C++ 内存篇1 - std::allocator VS pmr

大年三十所写,看到就点个赞吧!祝读者们龙年大吉!当然有问题欢迎评论指正。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 前言 从今天起我们开始内存相关的话题,内存是个很大的话题,一时不…

containerd中文翻译系列(十九)cri插件

cri插件包含的内容比较多,阅读之前请深呼吸三次、三次、三次。 CRI 插件的架构 本小节介绍了 containerd 的 cri 插件的架构。 该插件是 Kubernetes 容器运行时接口(CRI) 的实现。Containerd与Kubelet在同一个节点上运行。containerd内部的…

2024年10 个好用的AI简历工具盘点推荐

在职场竞争激烈的今天,一份出色的简历就像是你的秘密武器,能帮你在众多候选人中脱颖而出,赢得面试宝座。随着 ChatGPT 引领的 AI 浪潮席卷而来,各式各样的 AI 简历工具如雨后春笋般涌现。面对这样的背景,神器集今天为大…

【GAMES101】Lecture 19 透镜

目录 理想的薄透镜 模糊 利用透镜模型做光线追踪 景深(Depth of Field) 理想的薄透镜 在实际的相机中都是用的一组透镜来作为这个镜头 这个因为真实的棱镜无法将光线真正聚焦到一个点上,它只能聚在一堆上 所以方便研究提出了一种理想化的…

Lombok 高级说明

优质博文:IT-BLOG-CN 一、痛点 【1】代码臃肿:POJO中的getter/setter/equals/hashcode/toString等; 【2】样板式代码:I/O流的关闭操作等; Lombok是一个可以通过注解简化Java代码开发的工具,能够在我们编…

《Python 网络爬虫简易速速上手小册》第2章:网络爬虫准备工作(2024 最新版)

文章目录 2.1 选择合适的爬虫工具和库2.1.1 重点基础知识讲解2.1.2 重点案例:使用 Scrapy 抓取电商网站2.1.3 拓展案例 1:使用 Requests 和 BeautifulSoup 抓取博客文章2.1.4 拓展案例 2:使用 Selenium 抓取动态内容 2.2 设置开发环境2.2.1 重…

Python爬虫requests库详解#3

使用 requests 上一节中,我们了解了 urllib 的基本用法,但是其中确实有不方便的地方,比如处理网页验证和 Cookies 时,需要写 Opener 和 Handler 来处理。为了更加方便地实现这些操作,就有了更为强大的库 requests&…

Go语言每日一练——链表篇(四)

传送门 牛客面试笔试必刷101题 ----------------合并两个排序的链表 题目以及解析 题目 解题代码及解析 package main import _"fmt" import . "nc_tools" /** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参…

flink反压及解决思路和实操

1. 反压原因 反压其实就是 task 处理不过来,算子的 sub-task 需要处理的数据量 > 能够处理的数据量,比如: 当前某个 sub-task 只能处理 1w qps 的数据,但实际上到来 2w qps 的数据,但是实际只能处理 1w 条&#…

基于OpenCV灰度图像转GCode的斜向扫描实现

基于OpenCV灰度图像转GCode的斜向扫描实现基于OpenCV灰度图像转GCode的斜向扫描实现 引言激光雕刻简介OpenCV简介实现步骤 1.导入必要的库2. 读取灰度图像3. 图像预处理4. 生成GCode5. 保存生成的GCode6. 灰度图像斜向扫描代码示例 总结 系列文章 ⭐深入理解G0和G1指令&…

害怕跟别人进行社交,怎么办?

前几天,跟一位朋友,小聚了一下。 这位朋友,在一家大型 IT 公司里当技术主管。收入不低,烟酒不沾,常常健身,外型不错,为人也踏实可靠。除了有一点技术宅的死板之外,可以说是非常理想的…

【 buuctf--刷新过的图片】

前言:这题主要运用到了新的工具F5-steganography由于 java 环境不合适的原因,我不得不重新配java11.0.18。 具体思路:非常帅气的一张图片。。。用 binwalk,stegsolve,zsteg,exiftool 等工具无果后&#xf…

基于 Java 的小说阅读器小程序,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

如何在 Mac 上恢复永久删除的文件:有效方法

您是否错误地从 Mac 中删除了某个文件,并且确信它已经永远消失了?好吧,你可能错了。即使您认为已永久删除计算机上的数据,仍有可能将其恢复。 在本文中,您将了解如何在 Mac 上恢复永久删除的文件,并了解增…

【机器学习】数据清洗之处理缺失点

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步…

代码随想录 Leetcode376. 摆动序列

题目&#xff1a; 代码&#xff08;首刷看解析 2024年2月9日&#xff09;&#xff1a; class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int direction 0;//1上升&#xff0c;0下降int res 0;//res…

LeetCode Python - 5.最长回文子串

文章目录 题目答案运行结果 题目 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同…

那些 C语言指针 你不知道的小秘密 (4)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能…