美文网首页
汇编学习 16 直接定址表

汇编学习 16 直接定址表

作者: 官总哦 | 来源:发表于2019-05-06 15:28 被阅读0次

1.小思考:为什么我们需要assume字段?

  • 一句话:assume可以关联不同的段和寄存器,可以改变相应段中的标号所默认关联的段寄存器,但是不能实际改变寄存器的值
  • 什么意思?这一节我们学习了数据标号,数据标号可以这样使用:
mov ax,a[si] ; a定义在data segment中,data段同ds关联

数据标号a,可以直接作为一个地址,同时还可以表示数据大小。我们设想一下编译器是如何翻译这段代码的:首先它看到了标志a,寻找标志a的位置,结果在data segment中找到了a的标志,然后它寻找data段所关联的寄存器ds,然后它就会把汇编代码看成这样:

mov ax,ds:offset a[si] ; 这里只是为了方便说明的假设

这样编译器也就准确找到了标志a的位置,但是ds的值究竟是多少,真的是data段的段地址吗?编译器不知道,需要人为设定:

mov ax,data
mov ds,ax

这样才让编译器真的找对了数据标志的地方。所以assume字段修改了编译器翻译出来的代码,而段寄存器实际的值,assume是修改不了的,需要手动修改。

所以我们进一步思考,一般来说我们都会在开始的地方加上assume cs:code 这一句话,如果不加会有什么后果?
》》》编译器在执行code段的代码时,如果遇到类似jmp S这样的代码时,S实际上代表着一个偏移地址,那段地址在哪里寻找?如果关联了cs和code字段,因为S是出现在code段的,自然段地址就是cs了,编译器可以正确找到;如果没有关联,遇到code中有一个S标号,编译器根本就不知道在那个段寄存器找到段地址,自然编译也就不会成功。

2.数据标号

  • 有一种标号,这种标号不但表示内存单元的地址,还表示内存单元的长度,也就是表示在此标号处的单元,是一个字节单元,还是字单元,还是双字单元。
    比如:
code segment
a db 1,2,3,4,5,6,7,8
b dw 0
...
code ends

比如标号a,描述了地址code:0,和从这个地址开始,以后内存单元都是字节单元两个信息;标号b,描述了从code:8开始,并且以后内存单元都是字单元

  • 使用数据标号注意操作数匹配问题,不能操作大小不同的数
mov b[2],al
mov ax,a[3]
; 以上表示都是错的,b匹配的是字单元,不能与al搭配;a匹配的是字节单元,不能与ax寄存器搭配

!补充:在其他段中使用数据标号
如果在其他段中使用数据标号,一定要将assume字段中将对应的段和某个寄存器联系起来,否则在使用数据标号的时候,CPU会因为找不到相应的段寄存器而出错!(在小思考中解释了相应的原因)

3.直接定址表(一种映射关系表)

总述:利用直接定址表,我们可以将两个数据集之间建立一种映射关系,我们可以用查表的方法根据 给出的数据,在另一个集合中得到对应数据。
我们利用直接定址表,一般来说有三个目的:

(1)提高算法的清晰程度和简洁程度
(2)为了加快运算速度
(3)为了使程序更易于扩充

相关文章

  • 汇编学习 16 直接定址表

    1.小思考:为什么我们需要assume字段? 一句话:assume可以关联不同的段和寄存器,可以改变相应段中的标号...

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

    版权声明:本文为 gfson 原创文章,转载请注明出处。注:作者水平有限,文中如有不恰当之处,请予以指正,万分感谢...

  • 构造哈希表以及二次探测法

    构造哈希表的几种方法 直接定址法 f(key) = a × key + b 除留余数法 f( key ) = ke...

  • HashMap

    HashMap本质是哈希表,通过k-v存储数据,映射关系通过哈希函数构造。 哈希函数的实现方式 1.直接定址法:取...

  • 汇编语言之基础

    本系列为学习<汇编语言> 王爽版 的学习笔记 [TOC] 汇编语言是什么? 汇编语言是直接在硬件之上工作的编程语言...

  • 【8086汇编】-- 常用寄存器

    学习汇编最重要的是就是学习寄存器和指令,8086汇编拥有14个16位的寄存器,分别AX、BX、CX、DX、SI、D...

  • Swift-简单汇编指令、lldb常用指令

    汇编语言的分类分为:8086汇编(16bit)、x86汇编(32bit)、x64汇编(64bit)、ARM汇编(嵌...

  • 开始在Linux下使用汇编语言

    在学习Linux操作系统的过程中,顺便学习了汇编语言,在操作系统的学习过程中,总共遇到过三种汇编,16位实模式下的...

  • 汇编分析&编译器优化

    汇编的种类 8086汇编(8086处理器是16bit的CPU) Win32汇编 Win64汇编 ARM汇编(嵌入式...

  • 逆向 - arm64汇编 - 第一天

    1. 汇编语言种类 8086汇编(8086处理器是16bit的CPU)Win32汇编Win64汇编ARM汇编(嵌入...

网友评论

      本文标题:汇编学习 16 直接定址表

      本文链接:https://www.haomeiwen.com/subject/pooroqtx.html