汇编中的名字:标号和变量 – 微机原理课程教学资源网 您所在的位置:网站首页 微机原理中pc是什么意思呀 汇编中的名字:标号和变量 – 微机原理课程教学资源网

汇编中的名字:标号和变量 – 微机原理课程教学资源网

2024-07-17 02:37| 来源: 网络整理| 查看: 265

汇编中的名字 — 标号和变量 前言标号和变量变量标号标号和变量综合总结一些标号段的名称 codesg什么是标号(是以前的错话不用看了) 前言

汇编中的名字分为标号和变量在这里插入图片描述

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

汇编程序中,除了汇编指令和伪指令,还有标号。名字是符号汇编中所有的符号都是地址,只不过分为指向数据的地址,指向指令的地址。也就是说,名字项(名字)都是地址。名字也可以叫符号地址。名字项可以是标号和变量。标号和变量都是地址。

有一个简单粗暴的区分方法:f ( x ) = { 有冒号:名字中的标号 无冒号:名字中的变量 f(x)={有冒号:名字中的标号无冒号:名字中的变量{有冒号:名字中的标号无冒号:名字中的变量f(x)={有冒号:名字中的标号无冒号:名字中的变量​

标号和变量

名字分为标号和变量

变量

在这里插入图片描述这里的LIST明显是一个变量也就是说,在前面的程序中,一定有相应的变量定义语句,比如

LIST DB 3 DUP (0)LIST DB 01H

变量具有三个属性:段基地址、偏移地址和数据类型而标号有两个属性,段基地址、偏移地址

变量类似于C语言中的数组名

DATA_WORD DW 1000,100H,-5

在这个语句里,DATA_WORD既是第一个元素的地址,又是这一句数据的地址。

与标号的3个属性相关的数值回送算符分别是 SEG , OFFSET, TYPE 。 例如:MOV AX, SEG X ; 将变量X所在的段地址送入AXMOV BX, OFFSET Y ; 将变量Y的偏移地址送入BXMOV CX, TYPE Z ; 将变量Z的类型值送入CX

而LEA BX, LIST是使用了变量的偏移地址属性。LEA这个语句的作用就是取偏移地址。在这里插入图片描述这里利用了变量的地址属性(段地址+偏移地址),就是从BUFF的地址指向的内存单元中取数存到SI里可以类比于下面的寻址方式

MOV BX, [1234H]

这条指令的意思是把1234H当成地址,从这个地址指向的内存单元里取数存入BX(如果是MOV BX, 1234H,那是把1234H这个数存入BX,而[1234H]就是一个地址),其实跟MOV SI, BUFF挺像的。

并且,MOV SI, BUFF和MOV SI, [BUFF]的效果是一样的。即使你不加[ ],直接写MOV SI, BUFF,人家也知道你要用它的地址属性,加上[ ]也行,都没问题。

根据变量的三个属性,你也能知道下面这个程序是不对的。在这里插入图片描述能看出错在哪里吗?是因为

MOV AX,[X]

而报错吗?再强调一遍,对于变量MOV AX,X和MOV AX,[X]的效果是一样的。看看报错在这里插入图片描述错误提示可以直译为“无效的指令操作数”,这个提示多见于MOV传值时,一般的原因就是操作数长度不匹配参考博文error A2070:invalid instruction operands 错误原因X是个变量,变量有数据类型属性。X的数据类型属性是DB,这个是定义的时候就决定了的。你把DB类型的数赋给AX,是不行的,MOV的两个操作数类型必须匹配。按照你之前的想法,X是地址,MOV AX,X是从X这个地址开始取两个字节(一个字)送到AX里。显然这是错的,错就错在X还不仅仅是地址,他还有类型属性。如果

MOV AL,X

这样就是没有问题的。

标号 在这里插入图片描述 标号和变量综合总结

下面咱们对标号和变量进行比对和说明。

首先总结一下,标号和变量分别是什么呢?标号有三个属性,段基地址、偏移地址和类型变量有三个属性,段基地址、偏移地址和数据类型一般来说,标号只在代码段中被定义,而变量则可以被定义在数据段和代码段中。标号的类型属性和变量的类型属性还不太一样。标号的类型属性用来指出该标号是在本段内引用还是在其他段中引用的。如果是在段内引用的,则称为NEAR,否则为FAR

变量的3个属性的数值回送算符分别是 SEG , OFFSET, TYPE 。 例如:MOV AX, SEG X ; 将变量X所在的段地址送入AXMOV BX, OFFSET Y ; 将变量Y的偏移地址送入BXMOV CX, TYPE Z ; 将变量Z的类型值送入CX

看一下PPT上的解释(解释的很好要仔细看)标号在这里插入图片描述变量在这里插入图片描述标号—指向—指令变量—指向—数据

下面再看一下例子

变量

MOV SI, BUFF

就是把BUFF送到SI,BUFF代表的就是一个值或者说一个数。

LEA SI, BUFF

是取BUFF的偏移地址。

MOV DATA_WORD, AX

是把AX的内容送到内存中DATA_WORD所指的单元。

标号指向内存单元中的指令这种用法主要就是用来指令跳转比如说JMP到next或者start这种标号开始的地方 一些标号 段的名称 codesg

codesg只是一个例子。codesg segmentcodesg endscodesg就是一个标号,是一个段的名称,这个段的名称最终将被编译,连接程序处理为一个段的段地址(P79)简单的说:段名就相当于一个标号,它代表了段地址。

什么是标号(是以前的错话不用看了)

下面的“什么是标号”中的内容,也不能说不对,就是说的很模糊。所以不要看。在下面你说标号有两种用法,这是不对的,咱们要以老师PPT上为主,也用标号和变量来说明和学习。所以下面的不要看。这是老师ppt上的一句话在这里插入图片描述关于这句话我有一些疑惑。感谢这篇文章!10分钟看懂汇编程序

标号:指向内存单元的一个符号名,有两种用途,一种用于跳转命令跳转的地址,另一种用于读取或存储指令时访问的内存位置。在第二种里,符号地址是偏移地址,没有特别说明的话默认在数据段。

我觉得这是完美的解释!那么显然

在这里插入图片描述是第二种用途buff指向一个内存单元这条语句把buff所指内存单元中的东西取出来

其实在这里插入图片描述这两句显然都不是要用buff来跳转那么此时就把buff看成指向内存单元的东西就好比MOV AX,BX同样也有MOV SI,BUFF你说BX是什么吗,也不是,BX就是一个寄存器的名字可是在这条语句里,意思就是把BX里的东西和AX里的东西交换对于BUFF是同样在这里插入图片描述这又是一种标号的用法。DATA_WORD指数据段中偏移地址为DATA_WORD的区域。(没有明确说明,默认在数据段)把端口28H和29H读到的数据经过AX送到内存中DATA_WORD所指的单元。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有