File 在程序集80x86中包含文件
我只是学习组装,我做了一个简单的程序。但是如何将该过程放在单独的文件中,以及如何将其包含在main.asm中File 在程序集80x86中包含文件,file,assembly,File,Assembly,我只是学习组装,我做了一个简单的程序。但是如何将该过程放在单独的文件中,以及如何将其包含在main.asm中 simple proc . . . simple ENDP 假设这是我想包含在主程序中的程序。我将使用哪种文件类型,.asm或.h 还有,在main.asm中如何调用该函数?您还没有指定要使用的汇编器,但下面是使用MASM32的方法: simple proc . . . simple ENDP 在.inc文件中声明外部过程的原型;让
simple proc
.
.
.
simple ENDP
假设这是我想包含在主程序中的程序。我将使用哪种文件类型,.asm或.h
还有,在main.asm中如何调用该函数?您还没有指定要使用的汇编器,但下面是使用MASM32的方法:
simple proc
.
.
.
simple ENDP
在.inc
文件中声明外部过程的原型;让我们称之为external.inc:
; Declare a procedure prototype that takes two DWORD arguments
external_adder PROTO :DWORD, :DWORD
.686p
.model flat,stdcall
option casemap:none
.code
; Define the body of external_adder
external_adder PROC arg1:DWORD, arg2:DWORD
mov eax,arg1
add eax,arg2
ret
external_adder ENDP
END
.686p
.model flat,stdcall
option casemap:none
include \masm32\include\kernel32.inc ; for ExitProcess
include \masm32\include\msvcrt.inc ; for crt_printf
include external.inc ; for external_adder
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
.data
format db "123 + 456 = %d",13,10,0
.code
start:
invoke external_adder,123,456
; Print the result, then close down the program
invoke crt_printf, ADDR format, eax
invoke ExitProcess,0
END start
然后在相应的
.asm
文件中定义这些过程的主体;让我们称之为外部.asm:
; Declare a procedure prototype that takes two DWORD arguments
external_adder PROTO :DWORD, :DWORD
.686p
.model flat,stdcall
option casemap:none
.code
; Define the body of external_adder
external_adder PROC arg1:DWORD, arg2:DWORD
mov eax,arg1
add eax,arg2
ret
external_adder ENDP
END
.686p
.model flat,stdcall
option casemap:none
include \masm32\include\kernel32.inc ; for ExitProcess
include \masm32\include\msvcrt.inc ; for crt_printf
include external.inc ; for external_adder
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
.data
format db "123 + 456 = %d",13,10,0
.code
start:
invoke external_adder,123,456
; Print the result, then close down the program
invoke crt_printf, ADDR format, eax
invoke ExitProcess,0
END start
每当您想从另一个
.asm
文件中使用这些过程中的一个时,您都需要包含.inc
文件。让我们创建另一个名为main.asm的文件:
; Declare a procedure prototype that takes two DWORD arguments
external_adder PROTO :DWORD, :DWORD
.686p
.model flat,stdcall
option casemap:none
.code
; Define the body of external_adder
external_adder PROC arg1:DWORD, arg2:DWORD
mov eax,arg1
add eax,arg2
ret
external_adder ENDP
END
.686p
.model flat,stdcall
option casemap:none
include \masm32\include\kernel32.inc ; for ExitProcess
include \masm32\include\msvcrt.inc ; for crt_printf
include external.inc ; for external_adder
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\msvcrt.lib
.data
format db "123 + 456 = %d",13,10,0
.code
start:
invoke external_adder,123,456
; Print the result, then close down the program
invoke crt_printf, ADDR format, eax
invoke ExitProcess,0
END start
要构建此功能,您需要执行以下操作:
ml /c /coff main.asm
ml /c /coff external.asm
link /SUBSYSTEM:CONSOLE main.obj external.obj
什么汇编程序?每一个都是不同的。您可以根据需要将文件类型设置为任何类型,但没有任何意义。但是,您的代码需要位于代码部分,然后您只需将其包含在main.asm文件中。X86 include文件的后缀为.inc,但这些文件用于定义、等同、,不是为了代码。您可以拥有一个汇编程序项目,该项目由代码的多个.asm文件组成。对于包含asm和C代码的项目,有一个名为h2inc的实用程序,可以将C.h文件转换为assembler.inc文件。