【汇编语言】直接定址表

【汇编语言】直接定址表



前言

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


一、移位指令

移位指令过程

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

逻辑移位指令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 中再加入新功能,则需要修改程序的逻辑,加入新的比较、转移指令,比较麻烦。


总结

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

相关推荐

  1. vue单输入绑

    2024-04-26 21:12:01       58 阅读
  2. Vue3-单输入绑

    2024-04-26 21:12:01       40 阅读
  3. VUE3 单输入绑

    2024-04-26 21:12:01       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 21:12:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 21:12:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 21:12:01       87 阅读
  4. Python语言-面向对象

    2024-04-26 21:12:01       96 阅读

热门阅读

  1. STC 8F无线通讯语言模块测试

    2024-04-26 21:12:01       35 阅读
  2. REST API规范

    2024-04-26 21:12:01       99 阅读
  3. Ubuntu鼠标自动点击脚本-工具xdotool简单使用

    2024-04-26 21:12:01       30 阅读
  4. 顺序表 (C语言版)

    2024-04-26 21:12:01       30 阅读
  5. Redis深度解析与面试必备问答(必知必会20题全)

    2024-04-26 21:12:01       183 阅读
  6. 计算机网络概述

    2024-04-26 21:12:01       35 阅读
  7. 面试经典150题——整数转罗马数字

    2024-04-26 21:12:01       37 阅读
  8. vue中@click.prevent函数的使用

    2024-04-26 21:12:01       31 阅读
  9. 【汇编】指令系统的寻址方式

    2024-04-26 21:12:01       39 阅读
  10. 前端生成二维码

    2024-04-26 21:12:01       31 阅读