汇编-变量

复制代码
.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  
相关推荐
liulilittle4 小时前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
工业互联网专业4 小时前
汇编与接口技术:8259中断实验
汇编·单片机·嵌入式硬件·8259中断实验
small_wh1te_coder18 小时前
硬件嵌入式学习路线大总结(一):C语言与linux。内功心法——从入门到精通,彻底打通你的任督二脉!
linux·c语言·汇编·嵌入式硬件·算法·c
Ronin-Lotus13 天前
微处理器原理与应用篇---ARM常见汇编指令
汇编·arm开发·微处理原理与应用
永夜的黎明16 天前
【二进制安全作业】250616课上作业1-栈溢出漏洞利用
c语言·汇编·安全
Geometry Fu18 天前
物联网控制技术 知识点总结 第三章 汇编语言 第四章 C51语言
汇编·物联网·51单片机
半桔18 天前
【Linux手册】进程的状态:从创建到消亡的“生命百态”
linux·运维·服务器·汇编·深度学习·面试
一条叫做nemo的鱼21 天前
从汇编的角度揭开C++ this指针的神秘面纱(下)
java·汇编·c++·函数调用·参数传递
一条叫做nemo的鱼22 天前
从汇编的角度揭开C++ this指针的神秘面纱(上)
汇编·c++·算法·函数调用·this指针·参数传递
qwertyuiop_i24 天前
汇编(函数调用)
汇编·windows·函数调用