程序就是要对数据进行操作。在汇编中,这些数据有在buffer中的数据,有变量数据,有在寄存器中的数据。
数据一般分为两类:全局数据和局部数据。
全局数据:在.data以及.bss中定义的数据是全局数据,在寄存器中的数据也是全局数据。
局部数据:局部数据存放在stack中,是由调用者压入栈的。
For now, simply understand that global data is defined in the .data and .bss sections of your program, whereas local data is placed on the stack for the “local’’ use of a particular call to a particular procedure. Local data takes some care and discipline to use safely, for reasons explained later.
其实一个全局数据也不一定非要放在.data或者.bss中,放到一段procedure之后有时可能更加合适。这是,这个数据依旧是全局数据(因为它不是被调用者放到Stack中的)。这样做的好处是,如果这个数据仅仅被这个procedure使用到,那么对这个程序的复制和粘贴就会非常方便。
这种在一个Procedure之中定义数据的方法是NASM的一种伪指令,DB、DW和DD。
除了有局部数据之外,还有局部标签。这也是NASM定义的。这种标签以一个句号开头,它隶属于它之上的第一个离他最近的全局标签。比如:
Scan: (CODE) jmp .modTest (CODE) .modTest: (CODE)
使用Local labels的一些习惯:Local labels and all jumps to them should occur within a single screen.
Local label一般在句号之后的第一个字母使用小写。而global label则大写。这是一种书写约定。
还可以从一个procedure的外部访问一个局部标签,访问的方法是全局标签和局部标签连接起来:
call Scan.modTest