`

ARM汇编作业1

 
阅读更多

AREA exone,CODE,READWRITE

  ENTRY

  CODE32 ;作业一1到100的加法

  MOV r0,#100   ;向寄存器中存入要比较的次数

  MOV r1,#1   ;初始的两个数

  MOV r2,#0

loop

  ADD r2,r2,r1     ;两两相加

  ADD r1,r1,#1 ;自动加一

  SUB r0,r0,#1 ;要加的数减一

  CMP r0,#0 ;判断比较次数是否为零

  BNE loop

  LDR r3,=RESULT

STR r2,[r3]

RESULT

DCD 0

STOP

B STOP

 

 

 

AREA extwo, CODE,READWRITE

    ENTRY

CODE32

;作业二排序:将目标地址处的数据进行冒泡排序,从小到大

MOVS r2, #1   ;r2 = 排序完成标志,1表示未完成

again

LDR r0, =data     ;r0 = 目的数据块地址

MOV r1, #40 ;r2 = 排序字数量

SUBS r1, r1, #4

ANDS r2, r2, #1 ;判断排序是否完成

BEQ stop ;若r2=0,完成

MOVS r2, #0 ;否则,标志设置为0

;STMFD sp!, {r4} ;保存工作寄存器

judge

LDR r3, [r0] ;读出r0地址处得值到r3

LDR     r4, [r0,#4] ;读出r0地址处得值到r4

CMP r3, r4 ;比较二者的大小

BLS next ;若r3<=r4,跳到next

exchange

MOVS r2, #1 ;发生数据交换,就设置标志为1

STR r3, [r0,#4] ;交换二者的值

STR r4, [r0]

next

ADDS r0, r0, #4 ;目标地址加4

SUBS r1, r1, #4 ;计数值减1

BNE judge ;本趟排序未结束,跳到judge_2

B again ;否则下一趟

LDMFD sp!, {r4} ;恢复工作寄存器

;将程序的控制权转交给调试器

stop

 

data

    DCD 9,4,6,7,8,1,3,2,0,5

STOP

    B STOP


 

0
3
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics