如何汇编语言定义变量
汇编语言定义变量的格式为 :【变量名】【变量类型】【数值列表】
其中,变量类型有DB,DW,DD等,分别表示变量占有的内存空间(依次为1,2,4个字节)
如:
A DB 1,2,3,4 就定义了名称为A的4个占1个字节的变量,分别是1,2,3,4(严格来说是0001,0010,0011,0100)保存在系统分配的内存空间中。
如果是A DW 1,2,3,4则保存的值为(00000001,00000010,00000011,00000100)
扩展资料:
注意事项
由于汇编语言是面向机器的语言,没有对函数的定义,函数的实现是通过中断调用的,(一个代码段跳到另外一个代码段) 所以对全局变量和局部变量的体现是通过栈来实现的。
即:
全局变量保存在数据段中,即伪代码中声明的DATA SEGMENT,任何时刻都能调用。
而局部变量则保存在栈段中,是伪代码中声明的STACK SEGMENT,平时不调用,调用中断时把局部变量从栈里取出来。
1、db((byte,字节,一字节宽)
2、dw(word,字,两字节宽)
3、dd(double word,双字,四字节宽)
各个数据定义伪指令均可以连续定义变量。
示例如下:
DATAS SEGMENT;定义数据段
BUF0 DB 1;定义一个字节型变量,名称是BUF0,初始值是01H
BUF1 DB "2";定义一个字符型变量,名称是BUF1,初始值是"2"
BUF2 DW 1;定义一个字型变量,名称是BUF2,初始值是0001H
BUF3 DD 2;定义一个双字型变量,名称是BUF3,初始值是00000002H
BUF4 DB 1 DUP(50);定义连续50个字节型变量,名称是BUF4,初始值是01H
BUF5 DB "12345678";定义一个字符型变量,名称是BUF5,初始值是"12345678"
DATAS ENDS;数据段定义结束
STACKS SEGMENT;定义堆栈段
DB 100 DUP(?)
STACKS ENDS
CODES SEGMENT;定义代码段
ASSUME CS:CODES,DS:DATAS,SS:STACKS;段寄存器关联
START:
MOV AX,DATAS
MOV DS,AX
......
CODES ENDS
END START
<名称> <单位大小> <内容>
其中单位大小可以是db(byte,字节)、dw(word,字,两字节大)、dd(double word,双字,四字节大)等
如:MSG db "asdf"定义了一个叫MSG的,单位大小是1字节的字符串变量。
A dw 0定义了一个双字的空间,叫A。
在数据段?
是的,不过其是在任何段都行,只要保证别不小心当成代码执行就行。变量的实质其实就是一段内存空间,用来存储二进制码,只是因为人为规定才有了各种变量名、变量类型和各种内容的含义。比如0x30既可以是十六进制的48也可以是ASCII的字符“0”,全凭人把它看做什么。所以在汇编语言中只要声明一定量的内存空间,加上个标号好方便访问,然后就拿来当各种变量用了。
在汇编语言中,定义变量?
变量,在汇编语言中,纯粹是属于【谬论】。
在汇编语言中,针对存储器,只有【地址】和【内容】两种概念。
哪有什么变量?
什么是变量呢? 这就纯属“恶搞”。
比如:BUFF DW 18。
有人说这个 BUFF,就是变量,等于 18。
其实,BUFF 并不是什么变量,而是【符号地址】。
经过编译后,BUFF,是 18 所存在的【段地址:偏移地址】。
----------------
BUF0 DB 1, 2, 3
BUF1 DW 68,-20,0
-------
DB、DW...,这些伪指令,是在存储器中,定义(存储)数据的。
并不是“定义变量”的。
BUF0、BUF1...,这些,是数据的【起始地址】。
也可以称为【符号地址】。
起始地址,并非是什么“变量”。
将其称之为“变量”,纯属是外行。
一帮伪专家,蹲在这儿,假装指点江山,伪造概念。