我想缩短或以某种方式改进我的装配程序

时间:2015-02-20 05:10:40

标签: assembly arm

我已经创建了一个汇编程序,可以打印从1到1000的整数而不打印5的倍数。它工作正常,但我想以某种方式缩短我的代码或以任何可能的方式使其更好。我是汇编新手,这是我第一次使用ARMsim创建程序。

.equ SWI_PrStr, 0x69
.equ SWI_PrInt, 0x6b
.equ StDout, 1
.equ SWI_EXIT, 0x11

.global _start
start:

MOV R5, #1
MOV R6, #1
MOV R7, #1000

LOOPHERE:

CMP R5, R7
BLE LOOPBODY
B LOOPDONE

LOOPBODY:

CMP R6, #5
BLT LOOPIF
MOV R6, #0
B LOOPNEXT

LOOPIF:

MOV R0, #StDout
MOV R1, R5
swi SWI_PrInt

ldr R1, =EOL
swi SWI_PrStr

B LOOPNEXT

LOOPNEXT:

ADD R5, R5, #1
ADD R6, R6, #1
B LOOPHERE

LOOPDONE:
swi SWI_EXIT

.data

EOL: .asciz "\n"
.end

1 个答案:

答案 0 :(得分:2)

关键是使用条件指令使ARM组件与其他体系结构如此不同。

start:
    mov    r0, #StDout
    mov    r5, #0       ;Main Counter
    mov    r4, #5       ;Modulo-5 counter
loop:
    add    r5, #1
    subs   r4, #1       ;Update counters
    moveq  r4, #5

    movne  r1, r5
    swine  SWI_PrInt    ;Print number if not multiple of 5
    ldrne  r1, =EOL
    swine  SWI_PrStr

    cmp    r5, #1000     ;Loop until we reach 1000
    bne    loop