标题: 如何在Visual Studio 2005环境下用c语言调用ARM汇编,以便了解ARM指令 [打印本页] 作者: yuyang911220 时间: 2014-7-11 19:43 标题: 如何在Visual Studio 2005环境下用c语言调用ARM汇编,以便了解ARM指令
在网上找到了一个这样的例子,是Larry Bank写的。贴出来以供大家学习。让大家了解ARM汇编指令,并用vs2005进行调试跟踪。
工程是pocket pc 2003的工程,主要包含两个文件:main.c, armtest.asm。
对armtest.asm需要自定义编译选项,
命令行为 armasm -g armtest.asm
输出为 armtest.obj
源码如下:
main.c 源码
// Windows CE Sample Application
// Demonstrations how to use ARM assembly language within a C program
// Written by Larry Bank 3/25/2007
#include <windows.h>
int
iGlobal;
int
ARMTEST1(int,
int,
int ,
int);
/****************************************************************************
* FUNCTION : WinMain(HANDLE, HANDLE, LPSTR, int) *
* PURPOSE : Program entrypoint * ****************************************************************************/
int
APIENTRY
WinMain (HINSTANCE
hInstance,
HINSTANCE
hPrevInstance,
LPWSTR
lpCmdLine,
int
nCmdShow)
AREA
sample,
CODE, READONLY
; name this block of code
EXPORT
ARMTEST1
IMPORT
iGlobal
; Called from C as int ARMTEST1(int, int, int, int);
; The first 4 parameters are passed in r0-r3, more parameters would be passed on the stack
ARMTEST1
proc
add
r0,r0,r1
; add all of the inputs together
add
r0,r0,r2
add
r0,r0,r3
ldr
r1,=iGlobal
; get the value of our global variable
ldr
r1,[r1]
; dereference the pointer (I know there's a pipe stall here)
add
r0,r0,r1
; we're not concerned with performance in this example
mov
pc,lr
; return to C with the value in R0
endp
LTORG
; allow room for the address constant of our global (loaded relative to PC)