我已经创建了一个汇编程序,可以打印从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
答案 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