首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化DCPU-16 FizzBuzz

优化DCPU-16 FizzBuzz
EN

Stack Overflow用户
提问于 2012-04-06 14:08:45
回答 1查看 1.3K关注 0票数 4

我尝试在DCPU-16中实现FizzBuzz。我使用这个网络仿真器:http://mappum.github.com/DCPU-16/ (存储库:https://github.com/mappum/DCPU-16)。

它在循环结束之前停止。为什么?

我如何优化它?我是一个高级语言程序员,对asm一无所知。你有这方面的基本资料吗?

关于DCPU的更多信息-16:官方规范:http://0x10c.com/doc/dcpu-16.txt -非官方规范:http://0x10.cc/

守则:

代码语言:javascript
复制
; FizzBuzz in DCPU-16

SET Z, 0x8000
SET I, 1


:loop
    JSR print
    ADD I, 1
    IFN I, 100
        SET PC, loop

    BRK


:print
    ADD Z, 1
    SET [Z], 10

    SET A, I
    MOD A, 3
    IFE A, 0
        JSR printFizz

    SET B, I
    MOD B, 5
    IFE B, 0
        JSR printBuzz

    SET C, A
    IFG B, A
        SET C, B
    ADD A, B
    IFG A, C
        JSR printNumber

    SET PC, POP


:printNumber
    SET A, I

    IFG I, 9
        DIV A, 10

    JSR printDigit

    IFG 10, I
        SET PC, POP

    SET A, I
    MOD A, 10

    JSR printDigit
    SET PC, POP

:printDigit
    ADD A, 48
    ADD Z, 1
    SET [Z], A
    SET PC, POP

:printFizz
    ADD Z, 1
    SET [Z], 70
    ADD Z, 1
    SET [Z], 105
    ADD Z, 1
    SET [Z], 122
    ADD Z, 1
    SET [Z], 122
    SET PC, POP

:printBuzz
    ADD Z, 1
    SET [Z], 66
    ADD Z, 1
    SET [Z], 117
    ADD Z, 1
    SET [Z], 122
    ADD Z, 1
    SET [Z], 122
    SET PC, POP
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-06 16:22:24

该模拟器上的控制台空间仅为0x8000 - 0x8180

看起来你在控制台的末尾,所以你的输出切断了中间字母,你最终写到了无关的内存。

如果您查看调试器:寄存器i在compeletion为0x64,基数为100 (因此您的循环完成了)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10044665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档