本文介绍了我想缩短或以某种方式提高自己的汇编程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经创建了打印从1到1000的整数无5.印刷倍数它工作正常,但我想以某种方式缩短我的code或使其以任何方式可能更好汇编程序。我是新来组装,这是我第一次创建一个使用ARMsim程序。
.EQU SWI_PrStr,0×69.EQU SWI_PrInt,0x6b.EQU标准输出,1.EQU SWI_EXIT,为0x11。全球_start开始:MOV R5,#1MOV R6,#1MOV R7,#1000LOOPHERE:CMP R5,R7BLE LOOPBODY乙LOOPDONELOOPBODY:CMP R6,#5BLT LOOPIFMOV R6,#0乙LOOPNEXTLOOPIF:MOV R0,#StDoutMOV R1,R5SWI SWI_PrIntLDR R1,= EOLSWI SWI_PrStr乙LOOPNEXTLOOPNEXT:ADD R5,R5,#1ADD R6,R6,#1乙LOOPHERELOOPDONE:SWI SWI_EXIT。数据EOL:.asciz\\ n。结束解决方案
关键是使用条件指令,使得ARM汇编从其他架构完全不同。
启动: MOV R0,#StDout MOV R5,#0;主计数器 MOV R4,#5,模5计数器循环: 加R5,#1 潜艇R4,#1;更新计数器 moveq R4,#5 movne R1,R5 猪SWI_PrInt;打印;如果不倍数5 ldrne R1,= EOL 猪SWI_PrStr CMP R5,#1000;循环播放,直到我们到达1000 BNE循环i have created an assembly program that prints integers from 1 to 1000 without printing multiples of 5. it works fine but i would like to somehow shorten my code or make it better in any way possible. i am new to assembly and this is my first time creating a program using 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解决方案
The key is to use the conditional instructions that makes ARM assembly so different from other architectures.
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
更多推荐
我想缩短或以某种方式提高自己的汇编程序
发布评论