当前位置: 代码迷 >> 汇编语言 >> asm 调用c 库函数解决方法
  详细解决方案

asm 调用c 库函数解决方法

热度:1650   发布时间:2013-02-26 00:00:00.0
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 中。
  相关解决方案