Board logo

标题: 如何在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)

{

      int
iResult;

      TCHAR
szTemp[256];

      iGlobal
=
5;

      iResult
=
ARMTEST1(1,2,3,4);

      wsprintf(szTemp,
L"Result = %d",
iResult);

      MessageBox(HWND_DESKTOP,
szTemp,
L"ASM Result",
MB_OK);

     return
0;

}
/* WinMain() */


armtest.asm 源码:
; TITLE("Sample App")
;++

     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)

     END




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0