ARM汇编语言从1+2+......+100

时间:2022-09-03 01:13:21

Thumb 汇编指令实验的参考程序代码清单

;文件名:test.s

;功能:计算1+2+3+…+N 的值

N        EQU 50                               定义N的值为50  

AREA testcode,CODE,READONLY            区域名为testcode,代码,只读

ENTRY                                  入口

CODE32

ARM_CODE LDR SP,=0x40003F00                     sp=0x40003F00

ADR R0,THUMB_CODE+1                    将分支目标地址送R0,使R1的bit[0]=1

BX R0                                  分支并且转换为thumb状态

LTORG

CODE16                                 汇编以下代码为thumb指令

THUMB_CODE

LDR R0,=N                               伪指令R0=50

BL SUM_N                                跳转到SUM_N执行

B THUMB_CODE                            跳转到THUMB_CODE,thumb模式

;名称:SUM_N

;功能:计算1+2+3+…+N 的值

;入口参数:R0( N 的值 )

;出口参数:R0( 运算结果 )

SUM_N

PUSH {R1-R7,LR}

MOVS R2,R0                              R0的内容放入R2

BEQ SUM_END                             相等转到SUM_END

CMP R2,#1                               R2与1比较,设置标志位

BEQ SUM_END                             相等转到SUM_END

MOV R1,#1                               将1送入R1

MOV R0,#0                               将0送入R0

SUM_L1  ADD R0,R1                               R0=R0+R1

BCS SUM_ERR                            

CMP R1,R2                               R1与R2比较,设置标志位

BHS SUM_END                            

ADD R1,#1                               R0=R0+1

B SUM_L1                                转到SUM_L1

SUM_ERR MOV R0,#0__                             将0送入R0

SUM_END POP {R1-R7,PC}

END

ARM 汇编指令实验的参考程序代码清单:

;文件名:add.s

;功能:计算1+2+3+…+N 的值

N      EQU 5;                                   定义N的内容为5

       AREA Example,CODE,READONLY           定义区域,区域名为Example,代码,只读

       ENTRY                                   入口

       CODE32

START

       LDR R0,=N                                R0=5

       MOV R2,R0                                R2=R0

       MOV R0,#0                                R0=0

       MOV R1,#0                                R1=0

LOOP

       CMP R1,R2                                比较R1与R2

       BHI ADD_END                            

       ADD R0,R0,R1                             R0=R0+R1

       ADD R1,R1,#1                              R1=R1+1

       B LOOP                                   转到loop

ADD_END

       B START                                  转到start

       END

程序说明:

请问ARM代码中BHI NEXT1是什么意思?代码段如下 CMP R1,R2; BHI NEXT

alvvvin  4级   分类:  其他    被浏览63次    2014.10.04

请微博专家回答 检举

请问ARM代码中BHI NEXT1是什么意思?代码段如下CMP R1,R2;BHI NEXT1;STR R2,[R0];STR R1,[R0+4];谢谢大神解答…
回答: bhi 是“无符号数大于跳转”,结合上一条指令CMP R1, R2来看,意思就是,如果R1大于R2,则跳转到标号NEXT1