2.2 使用寄存器
在前一节中的x86基本寄存器的介绍,对于一个汇编语言编程人员来说是不可或缺的。现在你知道,寄存器是处理器内部的一些保存数据的存储单元。仅仅了解这些是不足以写出一个可用的汇编语言程序的,但你已经可以大致读懂一般汇编语言程序了(不必惊讶,因为汇编语言的祝记符和英文单词非常接近),因为你已经了解了关于基本寄存器的绝大多数知识。
在正式引入第一个汇编语言程序之前,我粗略地介绍一下汇编语言中不同进制整数的表示方法。如果你不了解十进制以外的其他进制,请把鼠标移动到这里。
数字计算机内部只支持二进制数,因为这样计算机只需要表示两种(某些情况是3种,这一内容超过了这份教程的范围,如果您感兴趣,可以参考数字逻辑电路的相关书籍)状态. 对于电路而言,这表现为高、低电平,或者开、关,分别非常明显,因而工作比较稳定;另一方面,由于只有两种状态,设计起来也比较简单。这样,使用二进制意味着低成本、稳定,多数情况下,这也意味着快速。
与十进制类似,我们可以用下面的式子来换算出一个任意形如am-1……a3a2a1a0的m位r进制数对应的数值n:
程序设计中常用十六进制和八进制数字代替二进制数,其原因在于,16和8是2的整次方幂,这样,一位十六或八进制数可以表示整数个二进制位。十六进制中,使用字母A、B、C、D、E、F表示10-15,而十六进制或八进制数制表示的的数字比二进制数更短一些。
EAX的内容为000A3412h.
汇编语言中的整数常量表示
十进制整数
这是汇编器默认的数制。直接用我们熟悉的表示方式表示即可。例如,1234表示十进制的1234。不过,如果你指定了使用其他数制,或者有凡事都进行完整定义的小爱好,也可以写成[十进制数]d或[十进制数]D的形式。
十六进制数
这是汇编程序中最常用的数制,我个人比较偏爱使用十六进制表示数据,至于为什么,以后我会作说明。十六进制数表示为0[十六进制数]h或0[十六进制数]H,其中,如果十六进制数的第一位是数字,则开头的0可以省略。例如,7fffh, 0ffffh,等等。
二进制数
这也是一种常用的数制。二进制数表示为[二进制数]b或[二进制数]B。一般程序中用二进制数表示掩码(mask code)等数据非常的直观,但需要些很长的数据(4位二进制数相当于一位十六进制数)。例如,1010110b。
八进制数
八进制数现在已经不是很常用了(确实还在用,一个典型的例子是Unix的文件属性)。八进制数的形式是[八进制数]q、[八进制数]Q、[八进制数]o、[八进制数]O。例如,777Q。
需要说明的是,这些方法是针对宏汇编器(例如,MASM、TASM、NASM)说的,调试器默认使用十六进制表示整数,并且不需要特别的声明(例如,在调试器中直接用FFFF表示十进制的65535,用10表示十进制的16)