我想缩短或以某种方式提高自己的汇编程序 [英] I want to shorten or somehow improve my assembly program

查看:281
本文介绍了我想缩短或以某种方式提高自己的汇编程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

  .EQU SWI_PrStr,0×69
.EQU SWI_PrInt,0x6b
.EQU标准输出,1
.EQU SWI_EXIT,为0x11。全球_start
开始:MOV R5,#1
MOV R6,#1
MOV R7,#1000LOOPHERE:CMP R5,R7
BLE LOOPBODY
乙LOOPDONELOOPBODY:CMP R6,#5
BLT LOOPIF
MOV R6,#0
乙LOOPNEXTLOOPIF:MOV R0,#StDout
MOV R1,R5
SWI SWI_PrIntLDR R1,= EOL
SWI SWI_PrStr乙LOOPNEXTLOOPNEXT:ADD R5,R5,#1
ADD 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

这篇关于我想缩短或以某种方式提高自己的汇编程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆