汇编语言64位编程
AMD 和 Intel 64 位处理器的出现增加了对 64 位编程的兴趣。MASM 支持 64 位代码,所有的 Visual Studio 2012 版本(最终版、高级版和专业版)以及桌面系统的 Visual Studio 2012 Express 都会同步安装 64 位版本的汇编器。
现在借助《数据定义》一节中给出的 AddTwoSum 程序,将其改为 64 位编程:
1) 32 位 AddTwoSum 程序中使用了下列三行代码,而 64 位版本中则没有:
4) 在第 17 行,END 伪指令没有指定程序入口点,而 32 位程序则指定了。
下面是修改后的 6〜12 行:
现在借助《数据定义》一节中给出的 AddTwoSum 程序,将其改为 64 位编程:
;AddTowSum_64.asm ExitProcess PROTO .data sum DWORD 0 .code main PROC mov eax,5 add eax,6 mov sum,eax mov eax,0 call ExitProcess main ENDP END上述程序与之前给出的 32 位版本不同之处如下所示:
1) 32 位 AddTwoSum 程序中使用了下列三行代码,而 64 位版本中则没有:
.386 .model flat,stdcall .stack 40962) 64 位程序中,使用 PROTO 关键字的语句不带参数,如第 3 行代码所示:
ExitProcess PROTO
32 位版本代码如下:ExitProcess PROTO,dwExitCode:DWORD
3) 14〜15 行使用了两条指令(mov 和 call)来结束程序。32 位版本则只使用了一条 INVOKE 语句实现同样的功能。64 位 MASM 不支持 INVOKE 伪指令。4) 在第 17 行,END 伪指令没有指定程序入口点,而 32 位程序则指定了。
使用 64 位寄存器
在某些应用中,可能需要实现超过 32 位的整数的算术运算。在这种情况下,可以使用 64 位寄存器和变量。例如,下述步骤让示例程序能使用 64 位数值:- 在第 6 行,定义 sum 变量时,把 DWORD 修改为 QWORD。
- 在 10〜12 行,把 EAX 替换为其 64 位版本 RAX。
下面是修改后的 6〜12 行:
sum DWORD 0
.code
main PROC
mov rax,5
add rax,6
mov sum,rax
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频