win32汇编-标号、变量和数据结构

发布时间 2023-10-13 10:27:18作者: 天子骄龙

 

标号、变量和数据结构

当程序中要跳转到另一位置时,需要有一个标识来指示新的位置,这就是标号,通过在目标地址的前面放上一个标号,可以在指令中使用标号来代替直接使用地址。
使用变量是任何编程语言都要遇到的工作, Win 32汇编也不例外, 在MASM中使用变量也有需要注意的几个问题,错误地使用变量定义或用错误的方法初始化变量会带来难以定位的错误。变量是计算机内存中已命名的存储位置,在大部分的语言中都有很多种类的变量,如整数型、浮点型和字符串等,不同的变量有不同的用途和尺寸,比如说虽然长整数和单精度浮点数都是32位长,但它们的用途不同。

顾名思义, 变量的值在程序运行中是需要改变的, 所以它必须定义在可写的段内, 如.data 和.data?, 或者在堆栈内。按照定义的位置不同, MASM中的变量也分为全局变量和局部变量两种。
在MASM中标号和变量的命名规范是相同的, 它们是:

(1)可以用字母、数字、下划线及符号@、$和?。

(2)第一个符号不能是数字。

(3)长度不能超过240个字符。

(4)不能使用指令名等关键字。

(5)在作用域内必须是唯一的。

标号

1.标号的定义
当在程序中使用一条跳转指令的时候,可以用标号来表示跳转的目的地,编译器在编译的时候会把它替换成地址,标号既可以定义在目的指令同一行的头部,也可以在目的指令前行单独用一行定义,标号定义的格式是:
标号名:目的指令   ;方法1

标号名::目的指令     ; 方法2

 

常用的方法是使用方法1(标号后跟一个冒号),这时标号的作用域是当前的子程序,在单个

子程序中的标号不能同名,否则编译器不知该用哪个地址,但在不同的子程序中可以有相同名称的标号,这意味着不能从一个子程序中用跳转指令跳到另一个子程序中

需要从一个子程序中用跳转指令跳到另一个子程序中的标号时,可以用方法2(标号后跟两个冒号)来定义,这时标号的作用域是整个程序,对任何其他子程序都是可见的