主程序文件名 mainasm
子过程文件名 subasm
子过程名 fun1
方法有:
1:
(1)在mainasm 文件中 在call fun1 之前的任意位置,(即使在data中也可以) include subasm
(2)在 subasm的子过程之前可以使用 code和data 也可以不加
列如:
data
n1 DWORD 2
code
fun1 PROC NEAR32
add eax ,n1
ret
fun1 ENDP
或者:
fun1 PROC NEAR32
add eax ,eax
ret
fun1 ENDP
(3)直接编译mainasm,连接mainobj 即可
注: subasm 最后一定不能有END
2:(1)在mainasm 文件中 的data 之前 EXTRN fun1:NEAR32 ,也可以用 fun1 PROTO NEAR32 声明函数
(2)在subasm 的fun1 PROC NEAR32之前,或者fun1 ENDP 之后 PUBLIC fun1
subasm 末尾需要 END
例如:
386
MODEL FLAT
PUBLIC fun1
data
n1 dword 2
code
fun1 PROC NEAR32
add eax ,n1
ret
fun1 ENDP
end
(3)分别编译mainasm,subasm。连接连接mainobj和subobj
总结,若是其他asm文件中的是宏,则在主文件,或者子过程文件中 直接 include 宏nameasm 即可
若是这些工作做得没有差错,编译或者连接时出现差错,则最大可能性是:你的子过程名写错了,解决的办法是
把所有出现子过程名的地方重新复制粘贴一遍。asm文件是宏汇编文件,在c中调用方法如下:
1、编写汇编程序:
#include <xcinc>
GLOBAL _add ; 声明全局可用的函数add
SIGNAT _add,4217 ; 告诉编译器调用方式
;
PSECT mytext,local,class=CODE,delta=2
; our routine to add to ints and return the result
_add:
; W is loaded by the calling function;
BANKSEL (PORTB) ; select the bank of this object
ADDWF BANKMASK(PORTB),w ; add parameter to port
; the result is already in the required location (W)so we can ; just return immediately
RETURN
2、编写c语言程序
//声明调用外部的汇编程序
extern unsigned char add(unsigned char a);
void main(void) {
volatile unsigned char result;
result = add(5); // 开始调用上面声明的汇编函数
}进CMD
然后键入MASM的地址
然后进入MASM后键入MASM (文件名)
然后键入LINK
运行直接键入
如果调试键入DEBUG
用计事本写好的程序,后缀名要用ASM
并且要放到MASM的文件夹内最好你把MASM放到C盘
这样进入CMD
CD\
C:\>CD MASM
C:\MASM>MASM (程序正确就可以下一步了)
C:\MASM>LINK (这一步生成EXE在MASM文件夹下)
(运行可以进文件夹直接双击运行)
C:\MASM>DEBUG (调试)
要运行汇编程序,可以有很多的方法,也可以用一些专门的软件,但众所周知,汇编的话,是即使用记事本也是可以写出来然后在DOS环境下运行的,只要有MASMEXE和LINKEXE即可,当我们在记事本里写好汇编程序时,应把它保存成asm的格式,如sortasm,然后在开始->运行中输入cmd,转到你存放程序的文件夹,最好所有的文件都是用英文命名,如我的是在D盘的huibian文件夹中
2然后再输入masm 以及你的文件名敲回车,再在默认的情况下连敲三次回车,此时如果有错误和提醒,它会显示,否则就是 0,如图
3再输入link 以及你的文件名,连敲几次回车,这时电脑会自动生成一个你的文件的目标文件,如我的文件名是maxxx
4这时,你就可以直接运行程序 了,如我的运行结果为0054
5当然,如果你觉得你的程序有问题,也可以用debug 进行调试,输入u可以直接看到你的每一步指令,直到出现最后一条 int 21h 为止,记住它前面的地址码,用g跳转可以直接执行到最后一步看到最后结果,如图
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)