1、实验二 基于 ARM 的汇编语言程序设计一、实验目的了解 ARM 汇编语言的基本框架,学会使用 ARM 的汇编语言编程。二、实验设备标准硬件。三、实验内容用汇编语言编写“连续发送 128 个 ASCII 字符”的应用程序。四、实验原理ARM 汇编语言程序中,是以程序段为单位来组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。因此在进行汇编时除了要了解其书写规范外,还要能理解段的应用。下
2、面是一个代码段的小例子,实现数据的装载AREA Init,CODE,READONLYENTRYLDR R0, =0x3FF5000LDR R1, 0x0fSTR R1, R0LDR R0, =0x3F50008LDR R1, 0x1STR R1, R0END上述程序,在汇编程序中,用 AREA 指令定义一个段,并说明定义段的相关属性,其格式为 AREA 段名,属性 1,属性 2,属性 n。本例中定义了段名为 Init 的属性为代码段,只读。ENTRY 伪指令标识程序的入口,即代码从此处开始执行,程序的末尾为 END 指令,该伪指令告诉编译器源文件的结束,每一个汇编文件都要以 END 结束。AR
3、EA DataArea, DATA, NOINIT, ALIGN=2DISPBUF SPACE 200RCVBUF SPACE 200DATA 为数据段的标识。本程序段名为 DataArea,属性数据段,不含初始化,采用 align 表达式对其方式 2 表达式次方。五、实验步骤1.打开 ADS1.2 开发环境,打开基础实验实验五asm.mcp 项目文件,然后进行 compile 和 make 生成*.axf 文件。2.编译通过后,进入 ADS1.2 调试界面,加载基础实验实验五 asm_DataDebug 中的映象文件 asm.axf。3.在 ADS 调试环境下全速运行映象文件,应出现界面:本
4、程序连续发送了 128 个 ASCII 字符。下面分析程序的源码。在 UART 前的部分为系统的初始化,这在后边 BOOTLOADER 的章节里要详细介绍。UART 后的程序为主程序,在程序中找到下面这部分的代码,;/呼叫主应用程序b UARTUARTldr r0, =GPHCON ;设置 GPIO(RxD0,TxD0 引脚)ldr r1, =0x2afaaastr r1, r0 ldr r0, =GPHUP ;GPH10:0禁止上拉ldr r1, =0x7ffstr r1, r0 ; ldr r0, =UFCON0 ;禁用 FIFOldr r1, =0x0str r1, r0 ldr r0,
5、 =UMCON0 ;禁用 AFCldr r1, =0x0str r1, r0 ldr r0, =ULCON0 ;设置线寄存器ldr r1, =0x3 ; 正常模式,无奇偶校验,一个停止位,8 个数据位str r1, r0ldr r0, =UCON0 ;设置 Uart0 控制器ldr r1, =0x245;RX 边沿触发,TX 电平触发,禁用延时中断,使用 RX 错误中断,正常操作模式,中断请求或表决模式str r1, r0ldr r0, =UBRDIV0 ;设置波特率为 115200ldr r1, =0x1a ;int(50700000 / 16 / 115200) - 1 = 26str r
6、1, r0 mov r1, #100;延时初值Delay ;延时sub r1, r1, #0x1bne Delay ;/开中断ldr r0, =INTMSK;/中断屏蔽寄存器ldr r1, r0and r1, r1, #0xefffffffstr r1, r0 ;/打开中断 uart0MOV R5 , #127 ; /设置要打印的字符的个数MOV R1 , #0x0 ; /设置要打印的字符LOOP LDR R3 , =UTRSTAT0;/通道 0 状态寄存器LDR R2 , R3TST R2 ,#0x04 ; /判断发送缓冲区是否为空BEQ LOOP ; /为空则执行下边的语句,不为空则跳转到
7、 LOOPLDR R0 , =UTXH0;/通道 0 发送缓存寄存器 STR R1 ,R0 ;/向数据缓冲区放置要发送的数据ADD R1, R1, #1 ;/R1 加 1,准备打下一个字符SUB R5 ,R5, #0x01 ;/计数器减一CMP R5 ,#0x0;打印剩余个数和 0 比较,即 R5-0BNE LOOP;打印剩余个数,R5 不为 0 则跳转LOOP2 B LOOP2 ;死循环,相当 C 里的 while(1)分析清楚之后,我们改变 R1 的数据,换成其他的数据,然后保存、编译、调试。观察结果。六、心得、体会本次试验通过对汇编语言的学,基本掌握了 ARM 中汇编语言的使用。虽然还是有点模糊,但可以仿照书上内容编写出来。之前学习嵌入式时候有过对汇编语言的学习,但不是很明白,相对来说这门语言比较高深难懂。即使现在再次学习,实验又进行了实际的验证。还是难窥其一斑。要想学好汇编语言是需要下一番功夫的,这里只是一次小小的实验,可以不必完全明白。