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

int i=20;
while(i>=0)
{if(i%2==0)
a[i]=a[i]+b[i]*4;
i--;}

第1个回答  2015-11-11
不懂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
第2个回答  2015-11-11

intel汇编行吗,我觉的原理差不多,只是指令不一样,我不会arm的汇编,

.model flat
.stack 4096
.data
a WORD m DUP(?)
b WORD n DUP(?)
i WORD 20
.code
mov eax,i
mov edx,0
@@while:
mov esi,eax
cmp eax,edx
jl  endwhile
push eax
and eax,01h
cmp edx,eax
jae L1
mov eax,b[esi*2]
shl eax,2
add eax,a[esi*2]
mov a[esi*2],eax
pop eax
dec eax
jmp @@while
endwhile:
mov i,eax

本回答被网友采纳
相似回答