首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

asm 调用c 库函数解决方法

2013-01-12 
asm 调用c 库函数cpp#includestdio.hextern C void asmmain()void main(){asmmain()}asminclude \ma

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 中。

热点排行