汇编基础
64位编程
之前介绍的一直都是32位的程序,64位和32位有很多相似的地方,但仍有许多的不同:
比如64位MASM 11.0不支持INVOKE伪指令,而且不需要在程序前写出.model,.stack,.386的
寄存器
64位模式下,操作数的默认大小是32位,并且有8个通用的寄存器。但是给每条指令加上REX(寄存器扩展)前缀后,操作数也可达64位。通用寄存器的数量也增加到了16个:32位模式下的寄存器再加上8个有标号的寄存器,R8~R15
- 64位模式下,单条指令不能同时访问寄存器的高字节,如AH,BH,CH以及新寄存器的低字节DIL
- 64模式下,32位的EFLAGS被64位的RFLAGS取代。这两个寄存器共享低32位,而RFLAGS的高32位是不使用的
- 32位和64位拥有相同的状态标志位