汇编-变量

复制代码
.386  
.model flat,stdcall 
option casemap:none

.data   
sum DWORD 0    ;创建一个全局变量,取名sum,初始化0
sum1 DWORD ?    ;创建一个全局变量sum1,无初始化
;问号(?)初始化值使得变量未被初始化,这意味着在运行时才会为该变量分配一个值
;变量名其实是一个标号,标识了从该变量从所在段的开始到该变量的偏移量

list BYTE 10,20,30,40
     BYTE 50,60,70,80
     BYTE 81,82,83,84

;如果同一个数据定义中使用了多个初始化值,则它的标号只指出第一个初始化值的偏移量
;假设list的偏移量为0000,那么数值10的偏移量就为0000,20的偏移量为0001,30的偏移量为0002,40的偏移量为0003
;不是所有的数据定义都需要标号。比如, 要在list字节数组后面继续扩展,就可以在下一行定义后加的字节:
;BYTE 50, 60, 70, 80   BYTE 81, 82, 83, 84


ExitProcess PROTO,dwExitCode:DWORD      

.code  
main PROC   
mov eax,5  
 
mov sum,eax  

INVOKE ExitProcess,0  
main ENDP   
END main  

定义DWORD和SDWORD数据

复制代码
.data   
val1 DWORD 12345678h    ;无符号数
val2 SDWORD -2147483648  ;有符号数
val3 DWORD 20 DUP(?)     ;无符号数组

val4 DD 12345678h     ;无符号数
val5 DD -2147483648   ;有符号数


pVal DWORD val3
;DWORD还可用于声明一种变量, 这种变量包含的是另一个变量的32位偏移量。如上所示, pval包含的就是val3的偏移量

myList DWORD 1, 2, 3, 4, 5  ;定义数组,偏移量的增量为4

定义压缩的BCD(TBYTE) 数据

Intel将一个压缩的BCD整数存放在一个10字节的包中。每个字节(除了最高字节外)包含两个十进制数字。在低9个字节中,每半个字节都存放了一个十进制数字。在最高字节中,最高位表示该数的符号。如果最高字节为80h,则该数为负数;如果最高字节为00h,则该数为正数。整数的范围是-999999999999999999到+999999999999999999。与其他数据值一样, BCD以小端序存储(最低字节存放在变量的起始偏移量处) 。

MASM使用T BYTE伪指令来声明压缩BCD变量。常量初始化值必须是十六进制的, 因为汇编器不会自动将十进制初始化值转换为BCD码。下面的两个例子展示了十进制数-1234有效和无效的表达方式:

定义浮点类型

复制代码
.data   
rVal1 REAL4 -1.2
rVal2 REAL8 3.2E-260
rVal3 REAL10 4.6E+4096
ShortArray REAL4 20 DUP(0.0)

;DD、DQ和DT伪指令也可以定义实数:
rVal4 DD -1.2    ;短实数
rVal5 DQ 3.2E-260  ;长实数
rVal6 DT 4.6E+4096  ;扩展精度实数

实例:变量相加程序

复制代码
.386  
.model flat,stdcall 
option casemap:none

.data   
firstval DWORD 20002000h 
secondval DWORD 11111111h 
thirdval DWORD 22222222h 
sum DWORD 0

ExitProcess PROTO,dwExitCode:DWORD      

.code  
main PROC   
	mov eax,firstval 
	add eax,secondval 
	add eax,thirdval 
	mov sum,eax
  
INVOKE ExitProcess,0  
main ENDP   
END main  
相关推荐
myloveasuka1 小时前
寻址方式笔记
汇编·笔记·计算机组成原理
请输入蚊子3 小时前
《操作系统真象还原》 第六章 完善内核
linux·汇编·操作系统·bochs·操作系统真像还原
myloveasuka4 小时前
指令格式举例
汇编·笔记·计算机组成原理
我在人间贩卖青春20 小时前
汇编之分支跳转指令
汇编·arm·分支跳转
我在人间贩卖青春1 天前
汇编之加载存储指令
汇编·arm·寄存器加载存储
我在人间贩卖青春1 天前
汇编之状态寄存器访问指令
汇编·arm·状态寄存器
我在人间贩卖青春1 天前
汇编之软中断指令和协处理指令
汇编·arm·软中断·协处理
我在人间贩卖青春1 天前
汇编之数据处理指令
汇编·arm·数据处理指令
白太岁2 天前
操作系统开发:(11) RTOS 与 GPOS 的分界线:MMU
c语言·开发语言·汇编·arm开发·系统架构
枷锁—sha3 天前
【pwn系列】Pwndbg 汇编调试实操教程
网络·汇编·笔记·安全·网络安全