组装 – 优化DCPU-16 FizzBu​​zz

我试图在DCPU-16中实现FizzBu​​zz.我使用这个网络模拟器:
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/

代码:

; 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

最佳答案 该仿真器上的控制台空间仅为0x8000 – 0x8180.

看起来你正在敲击控制台的末端,所以你的输出切断了中间字母,你最终写入不相关的内存.

如果你查看调试器:在completion我是0x64的寄存器,在base-10中是100(所以你的循环完成).

点赞