电工之家_电工基础知识学习网站
当前位置:电工之家 > 电子技术 > 正文

ARM汇编语言程序结构示例

时间:2015-11-20 09:43 来源:电工之家

ARM汇编语言程序结构示例
详细介绍ARM汇编语言之前,先给出一个汇编源程序示例,使读者对ARM汇编语言程序的结构有一个大概的了解。
    CODE32 ;32位的ARM指令段
    AREA codesec, CODE, READONLY ;代码段,名称为codesec,属性为只读
    main PROC ;函数main
    STMFD sp!,{lr} ;保存必要的寄存器和返回地址到数据栈
    ADR r0,strhello ;取标签strhello代表的地址值
    BL _ printf ;调用C运行时库的_printf函数打印
    ;“Hello world!”字符串
    BL welcomefun ;调用子函数welcomfun
    LDMFD sp!,{pc} ;恢复寄存器值
    strhello ;strhello代表本地字符串的地址
    DCB "Hello world!\n\0" ;定义一段字节空间
    ENDP ;函数main结束
    welcomefun ;子函数welcomfun
    STMFD sp!,{lr} ;保存必要的寄存器和返回地址到数据栈
    ADR r0,adrstrarm ;取adrstrarm的地址放到寄存器r0中
    LDR r0,[r0,#0] ;将strarm的值放到r0中
    BL _ printf ;调用C运行时库的_printf函数打印
    ;“Welcom to ARM world!”字符串
    LDMFD sp!,{pc} ;恢复寄存器值
    adrstrarm ;adrstrarm标签
    DCD strarm ;保存strarm的地址
    AREA constdatasec, DATA, READONLY,ALIGN=0 ;数据段,名称为constdatasec,
    ;属性为只读
    strarm
    DCB "Welcome to ARM world!\n\0" ;存放“WelcometoARM world!”
    ;字符串
    EXPORT main ;导出main函数供外部调用
    ;引入3个C运行时库函数和ARM库
    IMPORT _main
    IMPORT __main
    IMPORT _printf
    IMPORT ||Lib$$Request$$armlib||, WEAK
    END ;程序结束
    将上面代码保存为hello.s,Windows系统下在终端输入命令行:
    armcc -g hello.s -o hello.axf
    将hello.s编译成映像文件hello.axf。
    运行命令:
    armsd -exec hello.axf
    将出现下面结果:
    …
    1 ARM7TDMI, BIU, Little endian, Semihosting, Debug Comms Channel, 4GB, Mapfile,
    2 Timer, Profiler, Tube, Millisecond [20000 cycles_per_millisecond], Pagetables,
    3 IntCtrl, Tracer, RDI Codesequences
    4 Object program file wangt.axf
    5 Hello world!
    6 Welcome to ARM world!
    7 Program terminated normally at PC = 0x00009f70 (_sys_exit + 0x8)
    8 +0008 0x00009f70: 0xef123456 V4.. : swi 0x123456
    9 Quitting

看过《ARM汇编语言程序结构示例》的人还看了以下文章
土壤湿度感应器探头的原理是什么?为什么制成板状的 土壤湿度感应器探头的原理是什么?为什么制
土壤湿度传感器的探头实际上就是两个金属电极,制作成板状是为了增大与土壤的接触面积,以便与土壤能有良好的接触,这样才能更好的检测土壤的干湿度。若制作成缝纫机针那么细小的电极,无法与土壤良好接触,这样也就不能精确的检测土壤的干湿度了。下面我们...
限流电阻会引起电压变化吗 限流电阻会引起电压变化吗
限流电阻可以限制流入负载的电流的大...
电脑开机出现故障是什么原因 电脑开机出现故障是什么原因
主板:技嘉B85M-HD3 CPU:i5 4430 内存:8G 集成显卡 故障现象:按开机键10多秒后才显示主板logo开始自检启动系统,进入系统后一切正常。 当彻底断电(拔掉电源线等十几秒)再插电开机3秒就亮屏并显示logo开始自检了。只要不彻底断电,每次开机都要十几秒才亮屏。...
模拟电路和数字电路的区别 模拟电路和数字电路的区别
模拟电路和数字电路都是令人头痛的事,也是学习电子电路过程中的两大拦路虎,难、才是挑战的动力。科学技术发展迅猛,电子电路自身功能不断升级,应用领域随之拓宽,跟现在人们日常密切度也不断拉近。以电子电路功能分类,可分模电与数电两大类,这两大类是...
用红外线信号控制马达电路原理 用红外线信号控制马达电路原理
用红外线信号来控制马达的工作与否,但其未说明马达的工作电压及红外线信号的控制距离,故这里只能介绍一个简单的红外控制电路来说明一下控制的基本原理。 直射式红外控制电路。 上图中的VD1为红外发射管,由于为近距离控制(20cm以内),这里采用直流驱动红...