asm 调用c 库函数,该怎么处理

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