16 直接定址表

《汇编语言》学习(十六)直接定址表 本文主要介绍直接定址表。 一、地址标号和数据标号 1,地址标号     前面各章节中,在代码段中,经常会用到各种标号,有些表示指令的起始地址,有些表示数据的起始地址。这种只在代码段中使用的,形如“s:***”的标号,被称为“地址标号”。     地址标号表示代码段中的指令或数据的起始(偏移地址),对地址标号的调用(call),经过编译器后,会转换为偏移地址。注意,如果直接进行运行,需要使用 阅读详情

1、前面我们一直在代码段使用标号来标记指令、数据、段的起始位置。比如,

a:db 1,2,3,4,5,6,7,8

b:dw 0

程序中,a,b只是标号,它仅仅表示了内存单元的地址

但是,我们还可以使用一种标号,这种标号不但标识内存单元的地址,还表示了内存单元的长度,即表示在此标号的单元,是一个字节单元,还是字单元,还是双字单元

a db 1,2,3,4,5,6,7,8

b dw 0

在a b后面没有“:”,他们是同时描述内存地址和单位长度的标号。标号a,描述了地址code:0,和从这个地址开始,以后的内存单元都是字节单元;而标号b描述了地址code:8,和从这个地址开始,以后的内存单元都是字单元

在这里 标号b代表了一个内存单元,地址为xxxx:8,长度为两个字节

下面的指令会引起编译错误

mov al,b

因为b代表的内存单元是字单元,而al是8位寄存器

可见,使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。以后,我们将这种标号称为数据标号,他标记了存储数据的单元的地址和长度。它不同于仅仅表示地址的地址标号

 

2、在其他段中使用数据标号

一般来说,我们不在代码段中定义数据,而实将数据定义在其他段中。在其他段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。

注意,在后面加有“:”的地址标号,只能在代码段中使用,不能在其他段中使用

 

注意,如果想在代码段中直接使用数据标号来访问数据,则需要用伪指令assume将标号所在的段和一个段寄存器联系起来。否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中。当然,这种联系是编译器需要的,但绝不是说,我们因为编译器的工作需要,用assume指令将段寄存器和某个段联系起来,段寄存器中就会真的存放该段的地址,我们在程序中还要使用指令对段寄存器进行设置

 

3、直接定址表

通过样例讨论查表的方法编写相关程序的技巧

编写子程序,以16进制的形式在屏幕中间显示给定的字节型数据

分析;一个字节需要用两个十六进制数码来表示,所以子程序需要在屏幕上显示两个ASCII字符,我们当然用0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F这十六个字符来显示十六进制数码

我们可以将一个字节的高四位和低四位分开,分别用他们的值得到对应的数码字符。比如2BH,可以的达奥高四位的值为2,低四位的值为11,那么如何用这两个数值得到对应的数码字符2和B呢

最简单的方法就是一个一个比较,但是这样做,程序中要使用多条比较,转移指令。程序将比较长,混乱

显然,我们希望能够在数值0~15和字符0~F之间找到一种映射关系。这样用0~15间的任何数值,都可以通过这种映射关系直接得到0~F中对应的字符

我们考虑一下ASCII与其之间的映射:

0~9之间的映射关系很明显   相差30H

A~F之间的映射关系也很明显  相差37H

可见,我们可以利用数值和字符之间的这种原本存在的映射关系,通过高四位和低四位值得到对应的字符码,但是由于映射关系的不同,我们在程序中必须做一些比较,对于大于9的数值,我们要用不同的计算方法

这样做,虽然程序得到了简化。但是,如果我们希望用更简洁的算法,就要考虑用同一种映射关系从数值得到字符码。所以,我们就不能利用他们与ASCII之间的对应关系了

因为数值0~15和字符0~F之间没有一直的映射关系存在,所以,我们应该在他们之间建立新的映射关系

具体的做法是,建立一张表,表中一次存储字符0~F,我们可以通过数值0~15直接查找到对应的字符

利用表,在两个数据集合中间建立一种映射关系,使我们可以用查表的方法根据给出的数据得到其在另一集合中的对应数据。这样做的目的一般来说有以下3个

(1)为了算法的清晰和简洁

(2)为了加快运算速度;

(3)为了是程序易于扩充

 

初级文章【西门子】字符拼接成字符串 针对S7-400极其以下PLC,1200往上据说有专门的块了呢,首先,我是不用库的,需要什么函数会自己写,OK进入正题。 首先,我们有一个DB块,里面有14个char,一个14位的char数组和一个14位的string。如下图。 我们的目的是将char1-char10拼接成一个string。 第一种方式:第一步,将char放进数组。 ​​​​​​​ 相信大家都能看明白,但是我还是要解释解释 L取值2 T赋值到临时变量DBNO(INT) OPN DB [#DBNO]获取DB块,这一句. 阅读详情

相关推荐

广东省道路工程检测练习试题(单选题)真题

1.一般项目的合格点率应达到( ),且不合格点的最大偏差值不得大于规定允许偏差值的1.5倍。A.不低于75%B.不低于80%C.不低于85%D.不低于90%答案:B2.进行土路基平整度检测时,当路宽小于9m,检测点数应为( )A.1B.2C.3D.4答案:A3.根据《城镇道路工程施工与质量验收规范》,在分部工程中,根据工种、材料、施工工艺等划分的是( )A.单位工程B.分项工程C.分部工程D.工序工程答案:B4.根据《城镇道路工程施工与质量验收规范》,土方路基压实度的检测频率为每1000m每压实层抽检( )

ZShy001238的博客 681

【汇编语言】直接定址表

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

2301_80035097的博客 1816

libVLC 视频抓图

libVLC 中通过libvlc_video_take_snapshot核心接口来截图。以下是VLC播放器中使用的截图界面,我们仿照这个做一个界面。首先,你需要初始化 libVLC 实例和媒体播放器对象。1. 初始化 libVLC 和媒体播放器。菜单添加action,并响应槽函数。生成目录下snap.png。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 1939

直接定址表

一、单元长度的标号 之前的课程中,我们一直在代码段中使用标号来标记指令、数据、段的起始地址。比如,下面的程序 将code段中的a标号处的8个数据累加,结果存储到b标号处的字中。 assume cs:code code segment a: db 1,2,3,4,5,6,7,8 b: dw 0 start:mov si,offset a mov bx,offset ...

流彩飞霞的专栏 637

把 ABAP 出站 IDoc 做到稳如老狗:从数据抽取到端口投递的全链路拆解

SAP出站IDoc创建流程解析 本文详细拆解了SAP系统中出站IDoc的创建流程,将其归纳为四个关键阶段:数据获取、数据转换、控制记录校验和端口投递。文章指出,IDoc的稳定性取决于整条流水线的设计质量,而不仅仅是字段映射。 核心要点包括: IDoc由控制记录和数据记录组成,需在WE31/WE30中定义段结构 2.数据获取阶段需明确触发点、依赖链和一致性保证 3.数据转换应遵循"结构版本+映射纪律"原则 4.控制记录校验决定IDoc能否发出,需与WE20伙伴配置匹配 5.端口类型(tRF

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

药物不良反应预测实战指南:从FAERS数据挖掘到PyTorch深度学习模型(含可解释性分析)

【代码】药物不良反应预测实战指南:从FAERS数据挖掘到PyTorch深度学习模型(含可解释性分析)

理论都是虚的,代码才是王道。 721

汇编语言 第十六章 直接定址表 小白笔记

仅仅在assume中将段和寄存器联系起来不能真正联系起来,要想联系还要用mov将寄存器和段地址联系起来。还可以将标号当作数据,这个时候如果标号前是dw就代表标号对应的偏移地址,如果是dd就代表偏移地址和段地址。我们称它为数据标号(在他的后边一定要有数据类型,dd、dw、db等)1、2号功能al传递颜色al=(0,1,2,3,4,5,6,7)有“:”的地址标号只能在代码段中使用,不能在其他段中使用。16进制和2进制的关系是:四位二进制用一位16进制表示。此时标号名称代表的意义包含数据长度和数据地址。

小白垃圾笔记2 345

RK3588开发笔记-USB3.0接口调试

RK3588平台是一款强大的处理器,但要充分发挥其性能,需要正确调试其各种接口,包括USB 3.0接口。USB 3.0接口提供了更快的数据传输速度,但也可能面临一些问题。本篇博客将介绍如何在RK3588平台上调试USB 3.0接口,以确保其稳定性和性能。RK3588芯片具有强大的USB资源,包括多个USB接口和高速数据传输能力。RK3588通常具有多个USB接口,包括USB 2.0和USB 3.0。USB 2.0用于低速和全速设备连接,而USB 3.0则用于高速设备连接。

flypig has a dream! 2560

【汇编语言】直接定址表(一)—— 「从单元标号到跨段数据:解锁汇编语言的隐藏技巧」

该文主要介绍汇编语言中的标号,包括单元长度标号、数据标号及其在不同段中的使用,还有相关操作符及注意事项。

2301_80191662的博客 2045

为分析表明卡诺电池技术(或热泵式储电技术)-是目前最佳的储能技术!!!-2021年

卡诺电池(Carnot Battery)是一种基于热力学循环的储能技术,其核心原理是通过热力循环将电能转化为热能存储,并在需要时将热能重新转换为电能输出。这种技术得名于热力学中的卡诺循环原理,由法国工程师卡诺于1824年提出。

qq_15963745的博客 654

linux系统下XDMA驱动的安装与测试问题总结

先看两个常见的问题。一个是驱动安装问题,一个是驱动测试错误;error 512 能识别PCIE的设备,但是The kernel modle installed correctly, but no devices were recognized.

whm128的博客 3797

《汇编语言》- 读书笔记 - 第16章-直接定址表

这是《汇编语言》第16章读书笔记,探讨了汇编语言中的直接定址表,一种通过索引快速访问特定数据元素的方法。文章通过实例解释了直接定址表的优势,如快速访问、简单实现和内存预分配。同时,介绍了数据标号的使用和跨段访问数据的方法。最后,通过编写中断例程的实验,加深了对直接定址表应用的理解。

灵台方寸山斜月三星洞 1492

YOLOv10精度上不去?QAT量化感知训练全流程,INT8推理mAP只掉0.8%

普通PTQ量化虽简单,但无法应对YOLOv10的小目标特征和激活分布波动,导致精度暴跌。QAT通过“模拟量化误差+联合优化权重与量化参数”,让INT8模型精度接近FP16,同时速度提升1.8倍,完美适配实时检测场景(如安防监控、自动驾驶)。该流程已在工业级项目中验证,针对YOLOv10的优化策略(敏感层保护、小目标加权、分阶段训练)可直接迁移至其他YOLO系列(v8/v9),量化后精度损失均可控制在1%以内。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 915

第16章 直接定址表

这个实验的重点要关注,中断例程安装完成后,中断例程调用其它子程序时,地址的设置。在安装程序中,中断例程不会执行,安装程序中所有对内存访问的地址基础,是安装程序所在的地址空间,这个空间是DOS系统分配的;安装完成后,中断例程对内存访问的地址基础,是安装的位置。在其它段中,我们也可以使用数据标号来描述存储数据的单元的地址和长度。使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。(代码内不包含,测试部分,有兴趣的安装完中断例程,自己写个单独的测试文件,我已测试通过)在code段中使用的标号。

yyhshm520的博客 842

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

《汇编语言》第16章 直接定址表

这一章,我们讨论如何有效合理地组织数据,以及相关的编程技术。

chenyijun的专栏 1215

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【汇编语言】16-直接定址表

本系列将讲解《汇编语言》一书,本节讲解【汇编语言】16-直接定址表。

383

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

汇编语言_第16章 直接定址表

16.1 描述了单元长度的标号 数据标号:它标记了存储数据的单元的地址和长度。 16.2 在其他段中使用数据标号 在其他段中,也可以使用数据标号来描述存储数据的单元的地址和长度。 注意:在后面加油“:”的地址标号,只能在代码段中使用,不能在其他段中使用。 如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume将标号所在的段和一个寄存器联系起来。否则编译器在编译的时候,无法确...

madao1234的博客 424

【笔记】【汇编语言】第16章 直接定址表

16.0 概述 本章讨论如何有效合理地组织数据,以及相关的编程技术. 16.1 描述了单元长度的标号 标号后面不加":",便是同时描述内存地址和单元长度的标号. 使用这种标号可以使我们以简洁的形式访问内存中的数据,我们称其为>>>>数据标号<<<<,以区别于原来的>>>>地址标号<<<&lt...

dengkenglu1416的博客 216

汇编语言笔记16-直接定址表

转载必须注明出处,违者必究。http://www.cnblogs.com/dennisOne ☞地址标号和数据标号 地址标号 1 assume cs:code 2 code segment 3 a: db 1, 2, 3, 4, 5, 6, 7, 8 4 b: dw 0 5 start: mov si, offset a ...

bangchan5586的博客 475

汇编语言 | 第16章 直接定址表(含检测点16.1 16.2)

文章目录16.1 描述了单元长度的标号检测点16.116.2 在其他段中使用数据标号检测点16.216.3 直接定址表 16.1 描述了单元长度的标号 前面的课程中,我们一直在代码段中使用标号来标记指令、数据、段的起始地址。比如,下面的程序将code段中的a标号处的8个数据累加,结果存储到b标号处的字中。 assume cs:code code segment a db 1,2,3,4,5,6,7,8 b dw 0 start: mov si,0 mov cx,8 s: mov al,

Kni9hT's Blog 987

第16章 直接定址表 笔记

P289 数据标号标记了存储数据的单元的地址和长度。它不同于仅仅表示地址的地址标号。P290 注意:在后面加有":"的地址标号,只能在代码段中使用,不能在其它段中使用。P295 在上面的两个子程序中,我们将 通过给出的数据进行计算或比较而得到结果的问题,转化为用给出的数据作为查表的数据,通过查表得到问题的结果。具体的查表方法,是用查表的依据数据,直接计算出所要查找的元素在表中的位置。像这种可以通过依据数据,直接计算出所要找的元素的位置的表,我们称其为:直接定址表。P299 实验16 编写包含多个功能子程序的

canmeng50401的专栏 663

王爽 《汇编语言》 实验16 将含有直接定址表的程序,安装到中断上

昨天晚上做的。实验16的内容是要求把16.4的程序,安装到0:200H中,以便给 int 7cH调用。 做这个程序的时候,我没有照抄16.4,而是凭借着看过两三遍的印象,用作者的思路把实验16完成的。 本来以为难点无非就是实现功能,把程序安装到0:200H上有啥难的?结果我发现我错了。实现功能别说书上有例子,即使没有例子也并不困难。难点就是直接定址表安装到0:200H处,会有许多偏移地址的问题。...

杂七杂八 1436

汇编语言 实验16 直接定址表

根据ah中的功能号计算对应子程序在table表中的偏移。

hipparch的博客 271
上一篇: 15 外中断
下一篇: 0 本书目录
fa1lr4in
博客等级 码龄9年 64粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值