汇编语言跨模块使用变量和标号
默认情况下,变量和符号对其包含模块是私有的(private)。可以使用 PUBLIC 伪指令输出指定过程名,如下所示:
现在再新建一个启动模块 main.asm,其中包含 vars.inc,并使用了 count 和 SYM1:
PUBLIC count, SYM1
SYM1 = 10
.data
count DWORD 0
访问外部变量和符号
使用 EXTERN 伪指令可以访问在外部过程中定义的变量和符号:EXTERN name:type
对符号(由 EQU 和 = 定义)而言,type 应为 ABS。对变量而言,type 是数据定义属性,如 BYTE、WORD、DWORD 和 SDWORD,可以包含 PTR。例子如下:EXTERN one:WORD, two:SDWORD, three:PTR BYTE, four:ABS
使用带 EXTERNDEF 的 INCLUDE 文件
MASM 中一个很有用的伪指令 EXTERNDEF 可以代替 PUBLIC 和 EXTERN。它可以放在文本文件中,并用 INCLUDE 伪指令复制到每个程序模块。比如,现在用如下声明定义文件 vars.inc:
;var s.inc
EXTERNDEF count:DWORD, SYM1:ABS
;sub1.asm .386 .model flat,STDCALL INCLUDE vars.inc SYM1 = 10 .data count DWORD 0 END因为不是程序启动模块,因此 END 伪指令省略了程序入口标号,并且不用声明运行时堆栈。
现在再新建一个启动模块 main.asm,其中包含 vars.inc,并使用了 count 和 SYM1:
; main.asm .386 .model flat,stdcall .stack 4096 ExitProcess proto, dwExitCode:dword INCLUDE vars.inc .code main PROC mov count,2000h mov eax,SYM1 INVOKE ExitProcess,0 main ENDP END main
所有教程
- 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视频