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