汇编 请问调用外部(其它)ASM文件里面的子过程应该怎么调?

汇编 请问调用外部(其它)ASM文件里面的子过程应该怎么调?,第1张

主程序调用写在其他asm中的子过程的方法
主程序文件名 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跳转可以直接执行到最后一步看到最后结果,如图


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12654458.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存