读书人

asm 调用c 库函数解决方法

发布时间: 2013-01-12 16:25:03 作者: rapoo

asm 调用c 库函数
cpp
#include<stdio.h>

extern "C" void asmmain();

void main()
{
asmmain();
}

asm
include \masm32\include\SmallWin.inc


printf PROTO C,format:PTR BYTE,args:VARARG
scanf PROTO C,format:PTR BYTE,args:VARARG
asmmain PROTO C

.586
.model flat,C

.code
val dword ?
itip BYTE '输入一个 整数',0dh,0ah,0
scan BYTE '%d',0
otip BYTE '这个数:',0dh,0ah,0
print BYTE '%d',0dh,0ah,0

.code
asmmain PROC C
INVOKE printf, ADDR itip
INVOKE scanf ,ADDR scan, ADDR val
INVOKE printf,ADDR print,val
ret
asmmain ENDP
END

输入完一个数,程序就停止运行了

[解决办法]
你把数据 val 定义在 .code 里?这个段通常是 Read+Execute 属性的,没有 Write ,所以读入数据写入到该变量时访问异常了。还是按常规的来吧,代码在 .code ,初始化的数据在 .data ,非初始化的数据在 .data? ,只有少量非初始化数据的话,也可以合并在 .data 中。

读书人网 >汇编语言

热点推荐