山东大学嵌入式实验:ARM汇编指令实验2-字符串拷贝实验

实验目的

通过实验掌握使用LDB/STB,b等指令完成较为复杂的存储区访问和程序分支,学会使用条件码。

实验环境

硬件:PC 机

软件:ADS1.2 集成开发环境

实验内容

熟悉开发环境的使用并完成一块存储区的拷贝。

完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。

实验要求

(1)按照2.3节介绍的方法,在ADS下创建一个工程asmlab2,定义两个数据存储区Src和Dst,Src用于存放原字符串,Dst用于存放目的字符串。堆栈地址0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串的个数。通过AXD查看寄存器和memory和寄存器中数据的变化。

(2)在指令后面加上适当注释,说明指令功能。

(3)指出程序执行完后各相关寄存器及存储器单元的具体内容。

实验代码:

 AREA Init,CODE,READONLY
 ENTRY
 CODE32
start
  MOV SP, #0x400      ;设置堆栈地址(这个好像没用到)
  LDR R0, =Src        ;将原字符串地址给R0
  LDR R1, =Dst        ;将目的字符串地址给R1
  MOV R3,#0           ;R3赋值为0
strcopy
  LDRB R2,[R0],#1     ;存储器地址为R0的字节内容读入寄存器R2,并把新地址R0+1的值存入R0
  CMP R2,#0           ;比较R2和0,检测字符串是否结束
  BEQ endcopy         ;等于0则跳转至endcopy
  STRB R2,[R1],#1     ;将R2中的字节数据写入以R1为地址的存储器中,并把新地址R1+1的值存入R1
  ADD R3,R3,#1        ;R3自加一,记录字符个数
  B strcopy           ;循环
endcopy
  LDR R0, =ByteNum    ;把字符数的地址给R0
  STR R3,[R0]         ;把R3的值放到R0中
  B .
  AREA Datapool,DATA,READWRITE	
Src  DCB	"string",0  ;初始字符串存储空间
Dst DCB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0      ;目的字符串存储空间
ByteNum DCD 0
 END

练习题

编写程序循环对R4~R11 进行累加8 次赋值,R4~R11 起始值为1~8,每次加操作后把 R4~R11 的内容放入SP 栈中,SP 初始设置为0x800。最后把R4~R11清空赋值为0。

提示:多字的加载与存储使用多寄存器寻址,使用的指令为LDM和STM。如:

   LDMIA R0!, {R4-R11}

   STMIA R1!, {R4-R11}

实验代码:

 AREA Init,CODE,READONLY
 ENTRY
 CODE32

main NOP
NUM EQU 8                
start
 MOV SP,#0X800
 LDR R0,=src            ;把src的地址赋给R0
 MOV R2,#NUM            ;把循环次数赋给R2
 MOV R4,#1
 MOV R5,#2
 MOV R6,#3
 MOV R7,#4
 MOV R8,#5
 MOV R9,#6
 MOV R10,#7
 MOV R11,#8              ;给寄存器赋初值    
loop
 ADD R4,R4,#1
 ADD R5,R5,#1
 ADD R6,R6,#1
 ADD R7,R7,#1
 ADD R8,R8,#1
 ADD R9,R9,#1
 ADD R10,R10,#1
 ADD R11,R11,#1          ;循环累加,每个寄存器值加一
 STMFD SP!,{R4-R11}      ;多寄存器寻址,把R4~R11的内容放入SP栈中
 SUBS R2,R2,#1           ;R2中的循环次数减一
 BNE loop                ;不为0则跳转到loop继续循环    
 LDMIA R0!,{R4-R11}      ;将以R0起始地址的值存入R4-R11,即把R4~R11清空赋值为0. IA模式表示:每次传送后地址+4(After Increase)
Stop
 B Stop
 LTORG                   ;声明数据缓冲池
src DCD 0,0,0,0,0,0,0,0    
 END
© 版权声明
THE END
喜欢就支持以下吧
点赞2赞赏 分享
评论 共7条

请登录后发表评论

    • 头像download0
    • 头像sikis izle0
    • 头像altyazili0
    • 头像altyazili0
    • 头像yabanci0
    • 头像yabanci0
    • 头像sikis izle0