汇编中的名字:标号和变量 – 微机原理课程教学资源网 | 您所在的位置:网站首页 › 微机原理中pc是什么意思呀 › 汇编中的名字:标号和变量 – 微机原理课程教学资源网 |
汇编中的名字 — 标号和变量
前言标号和变量变量标号标号和变量综合总结一些标号段的名称 codesg什么是标号(是以前的错话不用看了)
前言
汇编中的名字分为标号和变量 ![]() ![]() 汇编程序中,除了汇编指令和伪指令,还有标号。名字是符号汇编中所有的符号都是地址,只不过分为指向数据的地址,指向指令的地址。也就是说,名字项(名字)都是地址。名字也可以叫符号地址。名字项可以是标号和变量。标号和变量都是地址。 有一个简单粗暴的区分方法:f ( x ) = { 有冒号:名字中的标号 无冒号:名字中的变量 f(x)={有冒号:名字中的标号无冒号:名字中的变量{有冒号:名字中的标号无冒号:名字中的变量f(x)={有冒号:名字中的标号无冒号:名字中的变量 标号和变量名字分为标号和变量 变量
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这个语句的作用就是取偏移地址。 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 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这种标号开始的地方 一些标号 段的名称 codesgcodesg只是一个例子。codesg segmentcodesg endscodesg就是一个标号,是一个段的名称,这个段的名称最终将被编译,连接程序处理为一个段的段地址(P79)简单的说:段名就相当于一个标号,它代表了段地址。 什么是标号(是以前的错话不用看了)下面的“什么是标号”中的内容,也不能说不对,就是说的很模糊。所以不要看。在下面你说标号有两种用法,这是不对的,咱们要以老师PPT上为主,也用标号和变量来说明和学习。所以下面的不要看。这是老师ppt上的一句话 标号:指向内存单元的一个符号名,有两种用途,一种用于跳转命令跳转的地址,另一种用于读取或存储指令时访问的内存位置。在第二种里,符号地址是偏移地址,没有特别说明的话默认在数据段。 我觉得这是完美的解释!那么显然
其实 |
CopyRight 2018-2019 实验室设备网 版权所有 |