51单片机,怎么用汇编调用C函数,怎么用C调用汇编写的函数,他们的参数是怎么传递的

51单片机,怎么用汇编调用C函数,怎么用C调用汇编写的函数,他们的参数是怎么传递的,第1张

你去下载MasmPluseexe(在aogo小站)然后在下载他们站点提供的MasmPluse的教程

同时下载OLLYDBG(在看雪论坛下载)调试

并且看一本叫《WINDOWS下32位汇编语言程序设计》罗云彬写的

前提是你要学会这们语言

至于hello word, 这个玩意很简单

386 ;这是指明CPU使用的指令集

model flat,stdcall ;这是指明使用平坦的段(4GB) stdcall是调用约定,这个可以网上查到

option casemap:none ;这里指明是否区分大小写,因为API接口对大小写区分的很严格所以必须指定

include windowsinc ;包含参数声明文件,这是个包含了windowsAPI接口一些参数值的文件

include user32inc ;user32dll库内函数的参数声明

include kernel32inc ;kernel32dll库内的函数的参数声明

includelib user32lib ;这是指明user32dll库内函数准确地址的一个声明

includelib kernel32lib ;这个就不解释了

data ;已初始化可以读写段

szCaption db 'A MessageBox !',0

szText db 'Hello, World !',0

code ;已初始化可读不可写段

start:

invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK ;MessageBox(user32库内的一个API函数)他d出一个message框显示一些提示

invoke ExitProcess,NULL ;这个不用解释了,结束进程

end start ;代码结束的标志

MasmPluse是汇编泰斗们编写的,界面干净简洁,代码支持高亮并且他们的站点还提供MasmPluse的教程和代码列子

OllyDbg是r3级别的一个调试工具,使用方式看雪有详细教程

Api接口是应用程序编程接口,说通俗点就是系统提供的功能函数

调用约定是指明调用参数的传递方式和入栈方式

堆栈的压入顺序是从高位地址向低位地址延伸,局部变量的分配方向也是这样,这个是关键。

每个函数开始一般有push bp、mov bp, sp两条指令,局部变量的分配地址都在bp之下,访问也是通过bp-n,而bp+2(32位汇编中是esp+4)才是栈顶,所以局部变量不会破坏栈顶数据,ret之前有pop bp,则栈顶数据就是call的时候压入堆栈的返回地址,没有什么“寻找返回地址”的活儿要干。

call 后面加 子程序名

如下面的程序:

TITLE disp ;列表文件标题 列表文件名为 LST 编译后产生

PAGE 50,70 ;列表文件每页行数,每行字数

;---------------------------------------

DAT SEGMENT PARA 'DAT' ;数据段

D0 DB 0DH,0AH,0DH,0AH

D1 DB 'This is my first Assembly program ! I love it very much ! Do you know ','$' ;设置字符串,$为字符串结束标志

DAT ENDS

;----------------------------------------

STAC SEGMENT PARA STACK 'STAC' ;堆栈段

STA1 DW 100 DUP() ;开辟100个双字内存空间

STAC ENDS

;-----------------------------------------

CODE SEGMENT PARA 'CODE' ;代码段

ASSUME CS:CODE,DS:DAT

ASSUME SS:STAC,ES:DAT

STAR PROC FAR

;---------------------------------------------

;PUSH DS

;XOR AX,AX ;为了能正常退出DOS

;PUSH AX

;---------------------------------------------

MOV AX,DAT

MOV DS,AX

MOV ES,AX

CALL TT

;---------------------------------------------

OK:MOV AX,4C00H ;为了能正常退出DOS

INT 21H

;---------------------------------------------

STAR ENDP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;下面为子程序

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;对以'$'结尾的字符串进行显示的子程序

TT PROC

LEA Dx,D0

MOV AH,9

INT 21H

RET

TT ENDP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;上面为子程序

CODE ENDS

END STAR

以上就是关于51单片机,怎么用汇编调用C函数,怎么用C调用汇编写的函数,他们的参数是怎么传递的全部的内容,包括:51单片机,怎么用汇编调用C函数,怎么用C调用汇编写的函数,他们的参数是怎么传递的、关于汇编指令call和ret的具体细节 *** 作!、汇编怎么调用函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/10152123.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存