arm汇编语言实现c语言程序

arm汇编语言实现c语言程序,第1张

不懂C语言但稍微懂一点ARM Cortex-M3 汇编

很久没写汇编了,下边这个没调试直接编的不是范例,所以肯定写错了

编译器GCC-ARM-NONE-EABI

应该有范例,你还是找范例吧

i: .int 20 @int i=20

a: .int 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3 @ 定义A数组

b: .int 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3@ 定义B数组

ldr r0, = i@把20存到R0

xunhuan1: @ if 里面

ldr r1, = a @ 把A数组的首地址存到R1

ldr r2, [r1, r0] @ 取出首地址加20处的数据存到R2

ldr r3, = b @ 把B数组的首地址存到R3

ldr r4, [r3, r0] @取出首地址加20处的数据存到R4

mov r5, # 4 @ 把被乘数存到R5

mul r4, r4, r5 @ R4乘以4 b[i]*4

add r6, r2, r4 @ R2加上R4存到R6 a[i]+b[i]*4

str r6, [r1, r0]@ R6的数据存到A首地址加20的地方

lsrs r0, # 1 @ R0逻辑右移

bne xunhuan @ 判断R0是不是等于0不等于跳到xunhuan

xunhuan: @ while 循环

sub r0, # 1 @ i减1

cmp r0, # 0 @比较R0和0

bge xunhuan1@大于等于跳转xunhuan1

N EQU 20

AREA Adding, CODE, READONLY

ENTRY

MOV R1,#0i

MOV R2,=Aa[ i ]

MOV R3,=Bb[ i ]

MOV R4,=Xx[ i ]

REPEAT

LDR R5,[R2]

LDR R6,[R3]

MUL R0,R5,R6 a[ i ]*b[ i ]

STR R0,[R4]x[ i ]= a[ i ]*b[ i ], 其中x[ i ]只存放结果的低32位

ADD R1,R1,#1 i++

ADD R2,R2,#4 [R2+4]

ADD R3,R3,#4 [R3+4]

ADD R4,R4,#4 [R4+4]

CMP R1,#N

BCC REPEAT

LDR R4,=RESULT

STR R0,[R4]

HERE B HERE

AREA DataSpace, DATA, READWRITE

A DCD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

B DCD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

X DCD 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

END

这是x[ i ]只存放结果低32位的ARM代码


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12070309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存