
哎
你去下载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的具体细节 *** 作!、汇编怎么调用函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)