w=a b*c用汇编语言写,汇编语言编写规范.docx
汇编语言编写规范
汇编语言编写规范
篇一:汇编语言程序设计规范1 汇编语言程序设计规范 实验目的 ? 熟悉ARM微处理器指令系统; ? 学习ARM嵌入式汇编软件的使用; ? 学习ARM嵌入式汇编程序的编程和调试。 实验设备 ? 硬件:PC机。 ? 软件:集成开发环境,Windows XX/XP/XX。 实验内容 ? 熟悉简单程序的编写; ? 掌握ARM程序的运行和调试。 实验原理 (1)汇编程序结构 在ARM( Thumb)汇编语言程序中,以段为单位组织源文件。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行的映象文件。 可执行映象文件通常由以下几部分构成: ? 一个或多个代码段,代码段的属性为只读。 ? 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 ? 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。 (2)汇编中的子程序调用 在ARM汇编语言程序中,子程序的调用一般是通过BL指令来实现的。在程序中,使用指令:BL 子程序名 即可完成子程序的调用。 该指令在执行时完成如下操作: ? 将子程序的返回地址存放在LR(R14)中; ? 将PC 指向子程序的第一条指令地址; ? 若需要参数传递,则用R0-R3来传递,当参数超过4个,则超过的参数用堆栈来传递; ? 子程序返回时:MOV PC,LR ? 用R0来保存返回值。 以下是使用 BL 指令调用子程序的例子: include AREA TEST,CODE,READONLY EXPORT asm_proc IMPORT value ENTRY asm_proc LDR R0,=value LDR R0,[R0] MOV R1,#8 BL DOadd Exit SWI 0x DOadd ADD R0,R0,R1 MOV PC,BL END 实验参考程序 (1)见课本page102:关于字符串复制程序(用LDRB和STRB逐字节读写)。 (2)数据块的复制。 ? 本程序将数据从源数据区src复制到目标数据区dst时,以8个字为单位进行。 ? 对于最后所剩下不足8个字的数据,以字为单位进行复制,这时程序跳转到CopyWords 处执行。在进行以8个字为单位的数据复制时,保存了所用的8个工作寄存器。 AREA Block,CODE,READONLY NUM EQU 20 ENTRY CODE 32 LDR R0,=src LDR R1,=dst MOV R2,#NUM MOV SP,#&400 BlockCopy MOV R3,R2,LSR #3 BEQ CopyWords STMFD SP!,{R4-R11} QuadCopy LDMIA R0!,{R4-R11} STMIA R1!,{R4-R11} SUBS R3,R3,#1 BNE QuadCopy LTMFD SP!,{R4-R11} CopyWords ANDS R2,R2,#7 BEQ Stop WordCopy LDR R3,[R0],#4 STR R3,[R1],#4 SUBS R2,R2,#1 BNE WordCopy Stop MOV R0,#0x18 LDR R1,=&XX6 SWI 0x ;将CPU的控制权交给调试器 AREA Bdata,DATA,READWRITE ;定义数据区Bdata src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;这里的DCD定义源数据区src及目标数据区dst END 实验思考题 1. 修改下列C程序段代码为ARM汇编程序段代码。 void gcd( int a, int b) { whil