在分支程序Motorola 68K中不显示输出

时间:2019-04-27 03:23:27

标签: assembly 68000

即使在输入2时,我在遍历循环后仍无法将任何输出显示到我的答案缓冲区中,也无法将其显示为输出。我确定我的问题出在for,if或factor块中,但是我一直在查看我的代码一段时间,没有任何帮助。任何帮助表示赞赏!

for:    
    cmp.l   D0,D3       *D3-D0 
    bne if      *!= 0
    move.l  D3,(A2)+    
    bra done    
if:
    move.l  D0,D7

    divu    D3,D7
    clr.w   D7       
    swap    D7
    move.w  D7,D6
    tst.w   D6
    beq factor

    addq    #1,D3
    bra for
factor: 
    move.b  #'*',(A2)+
    move.b  D3,(A2)+
    bra done            
    divu    D3,D0
    swap    D0
    clr.w   D0
    swap    D0
    subq    #1,D3
    bra for

1 个答案:

答案 0 :(得分:0)

此处:

move.l  D3,(A2)+    
bra done    

写值本身,并且只要写就不会显示任何内容,因为它从零开始,而且还必须添加#'0'

move.b  D3,(A2)
add.b   #'0',(A2)+  
bra done    

与此处相同:

factor: 
    move.b  #' * ',(A2)+
    move.b  D3,(A2)+

第一行是可疑的,可能与汇编程序有关,因为您将一个3字节的字符串存储在一个字节中...

第二行缺少0 ASCII码加法。我会改写为:

factor:
     move.b  #' ',(A2)+
     move.b  #'*',(A2)+
     move.b  #' ',(A2)+
     move.b  D3,(A2)
     add.b  #'0',(A2)+