80X86学习笔记变量与标号

变量表示存储单元中存放的数值,标号表示存储单元中存放的指令代码。

(1)数据定义语句

通过数据定义语句可为数据项分配存储单元,并根据需要设置其初值,还可用符号代表数据项,此时符号与分配的存储单元相联系。

1.数据定义语句

数据定义语句最常用的是伪指令语句。

格式:

[变量名]数据定义符 表达式[,表达式,….,表达式];注释

例:

VARB DB 3

VARW DW –1234

BUFF DB 100, 3+4, 5*6

(1)定义字节数据项

定义字节数据项的数据定义符是DB

例:

COUNT DB 100

               DB 0DH, 0AH, ‘$’

TABLE    DB 0, 1, 4, 9, 16

(2)定义字数据项

符号为DW

例:

FLAG DW 2FCDH, 100, –1

VECT DW 0

DW 100H

(3)定义双字数据项

符号为DD

例:

VECTOR DD 4

FARPTR DD 12345678H, 0

(4)定义没有初值的数据项

?不预置对应变量的初值,仅仅是给变量分配存储单元。

例:

INBUFF DB 5, ?,  ?, 8, ?

VARW DW ?

OLDV DD ?

(5)定义字符串

DB也可以用于定义字符串,字符串要用引号括起来,单引号和双引号皆可,只要配对。

例:

MESS1 DB ‘HELLO!’

上述语句与如下语句起相同作用:

MESS1 DB ‘H’,’E’,’L’,’L’,’O’

MESS DB ‘AB’

MESS2 DW ‘AB’;写反注意!A高位

(6)定义其他类型数据项

定义8字节:DQ

定义10字节:DT

例:

DT 0

DQ ?

2.重复操作符DUP

有时需要定义数组,还需要定义数据缓冲区,为此在数据定义语句中使用的重复操作符DUP

格式:

count DUP (表达式)

例:

BUFFER1 DB 5, 0, 5 DUP (?)

BUFFER2 DB 100 DUP (0, 2 DUP(1,2), 0, 3)

BUFFER3 DB 256 DUP (‘ABCDE’)

DATA DW 1, 5 DUP (1, 2, 4 DUP (0))

(2)变量和标号

1.变量和标号属性

变量和和标号均表示存储器操作数,都具有如下三种属性:

(1)段值,变量和标号对应存储单元所在段得段值。

(2)偏移,   变量和标号对应存储单元的起始地址的段内偏移。

(3)类型,变量类型主要是字节,字,双字,标号类型主要

是NEAR FAR 近表示段内标号,远表示段间标号。

2.析值操作符

也称为数值回送操作符,原因是这些操作符把一些特征或存储地址的一部分作为数值回送。

五个析值操作符的简单使用格式如下:

SEG 变量名或标号

OFFSET 变量名或标号

TYPE 变量名或标号

LEHGTH 变量名

SIZE 变量名

例:VARW DW 1234H, 5678H

        VARB  DB  3,4

设VARW从100H开始:

(1)操作符SEG能返回变量所在的段值

MOV AX, SEG VARW

MOV DS, AX

(2)操作符OFFSET返回变量或者标号的偏移

MOV BX, OFFSET VARW

把VARW偏移(100H)送BX

MOV DI, OFFSET VARW+2

MOV SI, OFFSET VARB

(3)操作符TYPE返回变量或标号类型,类型用数值表示,常见类型和对应数值规定如下:

字节:1   字:2  双字:4  NEAR:-1   FAR:-2

可见变量类型值是对应该类型变量项所占用的字节数,而标号的类型值却没有实际的物理意义。

对于ADD SI, TYPE VARW 汇编将程序形成为:ADD SI, 2

(4)LENGTH返回利用DUP定义的数组中元素个数

如果变量定义语句中没有使用DUP, 则返回1.

如果嵌套DUP,则返回最外层重复数。

MOV CX, LENGTH VARW; 1送CX

MOV CX, LENGTH VARB;  1送cx

(5)SIZE返回利用DUP定义的数组占用的字符数,可按下式计算:

SIZE 变量= (LENGTH 变量) * (TYPE 变量)

MOV CX, SIZE VARW; 2->CX

MOV CX, SIZE VARB; 1->CX

3.属性操作符

操作符PTR

汇编程序在汇编指令”MOV [SI], 1”时,将发出警告提示信息或出错提示信息。

MOV WORD PTR [SI], 1;   指明字类型

MOV BYTE PTR [SI], 1

PTR是最常用的合成操作符,用在地址表示式前,用于指定火临时改变变量和标号类型。

格式:

类型 PTR 地址表达式

类型可以是BYTE WORD DWORD NEAR FAR

PTR并不分配存储但愿,只是临时性的强制指定变量或标号的类型。

例:

JMP FAR PTR OK

JMP DWORD PTR OLDVECT

例:假设程序中的数据定义如下:

LNAME DB 30 DUP (?)

CODE_LIST DB 1, 7, 8, 3, 2

用一条MOV指令将LNAME的偏移地址放入AX,用一条指令将CODE_LIST头两个字节的内容放入SI。

MOV AX, OFFSET LNAME

MOVE SI, WORD PTR CODE_LIST

原文地址:https://www.cnblogs.com/seebro/p/2432104.html