【汇编语言】直接定址表

news2024/11/24 17:37:56

【汇编语言】直接定址表


文章目录

  • 【汇编语言】直接定址表
  • 前言
  • 一、移位指令
    • 移位指令过程
    • 逻辑移位指令shl 和 shr
  • 二、操作显存数据
    • 显示的原理
    • 显示缓冲区的结构
    • 显示信息的一种“直接”方式
  • 三、描述内存单元的标号
    • 关于标号
    • 去了冒号的数据标号
    • 数据标号同时描述内存地址和单元长度
    • 更常见的方式:数据段中的数据标号
  • 四、数据的直接定址表
    • 直接定址表:用查表的方法解决问题
    • 最简解决方案
    • 直接定址表
    • 应用示例:为加快运算速度而采用查表方法
  • 五、代码的直接定址表
    • 使用代码的直接定址表解决问题
    • 各种功能的实现
    • 直接定址表的优势
  • 总结


前言

在本篇文章中我们将讲到,移位指令,操作显存数据,操作内存单元的称号,数据的直接定址表,代码的直接定址表。


一、移位指令

移位指令过程

在这里插入图片描述
在这里插入图片描述

逻辑移位指令shl 和 shr

SHL OPR, CNT,将OPR逻辑左移CNT位
1)将寄存器或内存单元中的数据向左移位
2)将最后移出的一位写入CF中
3)最低位用0补充
shl指令操作示例
在这里插入图片描述
在这里插入图片描述

注意:移位一位的时候可以用立即数1,大于一位必须用cl来储存所需移位

惯常用法:将X逻辑左移一位,相当于执行X=X*2;右移一位,相当于执行X=X/2
在这里插入图片描述


二、操作显存数据

显示的原理

【汇编语言】初始汇编-中的内存地址空间
我们在之前的文章中有谈到
在这里插入图片描述
屏慕上的内容=显存中的数据
在这里插入图片描述

显示缓冲区的结构

在这里插入图片描述
在这里插入图片描述
例:在这里插入图片描述

显示信息的一种“直接”方式

显示信息的一种“直接”方式:直接在显示缓冲区输入要显示的数据
例:编程序,在屏幕的中间,白底蓝字,显示‘Welcome to masm!’
在这里插入图片描述

在这里插入图片描述


三、描述内存单元的标号

关于标号

代码段中的标号可以用来标记指令、段的起始地址。
代码段中的数据也可以用标号
在这里插入图片描述
在这里插入图片描述
我们在想:offset .cs:…能简单点吗?我们引入去了冒号的数据标号。

去了冒号的数据标号

在这里插入图片描述
在这里插入图片描述
我们在code 段中使用的标号a、b后面没有“:” ,它们同时描述内存地址和单元长度的标号。
标号a
地址code:0
以后的内存单元都是字节
标号b
地址code:8
以后的内存单元都是字

数据标号同时描述内存地址和单元长度

在这里插入图片描述

更常见的方式:数据段中的数据标号

对比:地址标号只能在代码段中使用
数据段中的数据标号
在这里插入图片描述
在这里插入图片描述
扩展用法:将标号当作数据来定义
在这里插入图片描述


四、数据的直接定址表

直接定址表:用查表的方法解决问题

问题:以十六进制的形式在屏幕中间显示给定的byte 型数据。
分析:先将一个byte的高4位和低4 位分开,显示对应的数码字符
在这里插入图片描述
方案一:
在这里插入图片描述
这种方法显然不好。
方案二:
在这里插入图片描述
能不能一次解决这种问题不用分成两种呢?
方案三:
在这里插入图片描述
这种方法相对来说最简单。

最简解决方案

最简方案:建立一张表,表中依次存储字符’0’~ ‘F’,通过数值0~15直接查找到对应的字符。

这里是引用
在这里插入图片描述
在这里插入图片描述

直接定址表

问题求解思路:
利用表,在两个数据集合之间建立一种映射关系,用查表的方法根据给出的数据得到其在另一集合中的对应数据。
优点:
算法清晰和简洁
加快运算速度,以空间换时间
使程序易于扩充
例如:
三角函数表我们需要的值可以通过映射方法找到
在这里插入图片描述

应用示例:为加快运算速度而采用查表方法

问题:
编写程序,计算sin(x),x∈{0°,30°,60°,90°,120°,150°,180°},并在屏幕中间显示计算结果。
方法一:
在这里插入图片描述
这种方法显然不好。
方法二:
在这里插入图片描述

解决方案:在这里插入图片描述


五、代码的直接定址表

使用代码的直接定址表解决问题

直接定址表法:
用查表的方式,通过依据数据,直接计算出所要找的元素的位置
直接定址表分类:
1)数据的直接定址表
2)代码的直接定址表

要解决的问题
实现一个子程序setscreen ,为显示输出提供如下功能
1)清屏。
2)设置前景色。
3)设置背景色。
4)向上滚动一行
在这里插入图片描述

各种功能的实现

这里是引用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

直接定址表的优势

在这里插入图片描述
要在 setscreen 中再加入新功能,只需要在地址表中加入它的入口地址就可以了。结构清晰,便于扩充。

不用 直接定址表
在这里插入图片描述
要在 setscreen 中再加入新功能,则需要修改程序的逻辑,加入新的比较、转移指令,比较麻烦。


总结

到这里这篇文章的内容就结束了,谢谢大家的观看,如果有好的建议可以留言喔,谢谢大家啦!

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

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

相关文章

css:echarts渐变色转换为css渐变色

通过一个下拉框来选择渐变类型,为了简化,我设置了三种:水平方向的渐变、垂直方向的渐变和径向渐变用,表格来配置echarts渐变色的百分比位置和颜色。 config是表格里的数据格式如下: offset是百分比位置,co…

2024北京车展来了!自主品牌成“流量担当”!

时隔四年,2024北京国际车展重磅回归! 4月25日,2024(第十八届)北京国际汽车展览会(以下简称“北京车展”)正式开幕,本次车展以“新时代 新汽车”为主题。作为今年国内首个国际A级车展…

Centos/linux根目录扩容、分区、挂载。LVM、物理卷、逻辑卷

前言    (空格) :分区挂载和扩容是两码事 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量&a…

使用 Godot 游戏引擎为 Apple 的 visionOS 创建游戏和应用的平台

借助GodotVision ,您可以使用Godot 游戏引擎为 Apple VisionOS创建游戏和应用程序。 保卫牛城堡,一款使用 GodotVision 制作的 VisionOS 游戏 GodotVision 运行一个控制本机RealityKit 视图的无头 Godot实例。粗略地说:Godot 是后端,

C++面向对象程序设计 - 派生类的构造函数和析构函数

构造函数的主要作用对数据成员初始化,基类的构造函数是不能被继承的,在声明派生类时,派生类并没有把类的构造函数继承下来。因此,对继承过来的基类成员初始化的工作也要由派生类的构造函数完成;所以在派生类中不仅要考…

OSPF的LSA与特殊区域

Area区域概念 *一个区域维护一张LSDB,路由器详细的链路信息只在这个区域内传播 不是每一台路由器都需要了解所有外部目的地的详细信息 *OSPF网络的层次化设计 通过区域ID标识 骨干( Backbone )区域,必须是area 0(骨干区域…

JVM(Jvm如何管理空间?对象如何存储、管理?)

Jvm如何管理空间(Java运行时数据区域与分配空间的方式) ⭐运行时数据区域 程序计数器 程序计数器(PC),是一块较小的内存空。它可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机的多线程是通过时间片轮转调…

milvus对象存储和消息中间件的工厂设计模式分析

milvus对象存储和消息中间件的工厂设计模式分析 需求 根据参数设置创建mq和storage mq有kafka,pulsar storage有local,minio,remote 配置文件 根据配置文件选择初始化mq和存储: mq:type: pulsarcommon:storageType: minio对于这种类型一个是mq,一个是存储&…

抓住四月小尾巴,拿个offer~

首先声明一下~本人是个双非二本大三在校生。 从三月份就开始了苦哈哈的找实习之旅,快三月中旬才敢投大厂,为什么嘞?因为学校要求必须参加完期末考试才能出去实习(差不多七月初),因为这个好多公司一听就不安…

算法模版自用(杂)

文章目录 算法库函数next_permutation(start,end) prev_permutation(start,end) (全排列函数)nth_element (求第k小值)next(it,num),prev(it,num)min_element(begin(),end()),max_element(begiin(),end()) (取最小值最大值) _int128的输入输出STLlist 数…

serdes 同轴电缆和双绞线接法

1、同轴电缆 Coaxial Cable 2、双绞线STP(Shielded Twisted Pair) 比如我们用的车载camera一般就只需要接一路即可,RIN接camera, RIN-通过电容接地。

Android 使用 GeckoView 并实现 js 交互、权限交互

参考文档: geckoview版本 引入文档(有坑 下面会给出正确引入方式) 官方示例代码1 官方示例代码2 参考了两位大神的博客和demo: GeckoView js交互实现 geckoview-jsdemo 引入方式: maven {url "https://maven.…

MySQL中的死锁预防和解决

MySQL中的死锁预防和解决 死锁是数据库管理系统中常见的问题,特别是在高并发的应用场景下。MySQL数据库中的死锁会导致事务处理速度减慢,甚至完全停止,因此理解并预防死锁至关重要。本文将详细介绍如何预防MySQL中的死锁,包括常用…

【算法基础实验】图论-深度优先搜索和深度优先路径

深度优先(DFS) 理论基础 深度优先搜索(DFS, Depth-First Search)是图和树的遍历算法中的一种,它从一个节点开始,沿着树的边走到尽可能深的分支,直到节点没有子节点为止,然后回溯继续搜索下一个分支。DFS …

网络安全实训Day17and18

写在前面 第17和18天都讲的sql注入,故合并 ​​​​​​ 网络空间安全实训-渗透测试 Web渗透 定义 针对Web站点的渗透攻击,以获取网站控制权限为目的 Web渗透的特点 Web技术学习门槛低,更容易实现 Web的普及性决定了Web渗透更容易找到目…

JavaEE 初阶篇-深入了解 I/O 高级流(缓冲流、交换流、数据流和序列化流)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 缓冲流概述 1.1 缓冲流的工作原理 1.2 使用缓冲流的步骤 1.3 字节缓冲流于字符缓冲流的区别 1.4 字节缓冲流的实例 1.5 字符缓冲流的实例 2.0 转换流概述 2.1 字符…

MySQL函数之单行函数

1.前言 我们在使用 SQL 语言的时候,不是直接和这门语言打交道,而是通过它使用不同的数据库软件,即DBMS。DBMS 之间的差异性很大,远大于同一个语言不同版本之间的差异。实际上,只有很少的函数是被 DBMS 同时支持的。比…

MySQL基础知识——MySQL索引

深入浅出索引 索引的意义 索引的意义:在大量数据中,加速访问少量特定数据; 使用索引的前提条件: 1)索引块数量小于数据块数量; 2)索引键有序,故可以使用二分查找等高效的查找方式&…

go语言并发实战——日志收集系统(十) 重构tailfile模块实现同时监控多个日志文件

前言 在上一篇文章中,我们实现了通过etcd来同时指定多个不同的有关分区与日志文件的路径,但是锁着一次读取配置的增多,不可避免的出现了一个问题:我们如何来监控多个日志文件,这样原来的tailFile模块相对于当下场景就…

前端到全栈进阶之“前端框架”

从前端入门到全栈-系列介绍 你会学到什么? 可能学不到什么东西,该系列是作者本人工作和学习积累,用于复习 系列介绍 现在的 Web 前端已经离不开 Node.js,我们广泛使用的 Babel、Webpack、工程化都是基于 Node 的,各…