File 在程序集80x86中包含文件

File 在程序集80x86中包含文件,file,assembly,File,Assembly,我只是学习组装,我做了一个简单的程序。但是如何将该过程放在单独的文件中,以及如何将其包含在main.asm中 simple proc . . . simple ENDP 假设这是我想包含在主程序中的程序。我将使用哪种文件类型,.asm或.h 还有,在main.asm中如何调用该函数?您还没有指定要使用的汇编器,但下面是使用MASM32的方法: simple proc . . . simple ENDP 在.inc文件中声明外部过程的原型;让

我只是学习组装,我做了一个简单的程序。但是如何将该过程放在单独的文件中,以及如何将其包含在main.asm中

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文件。