Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 发送字符串到串行错误,6809汇编,初学者_String_Assembly_Serial Port_Retro Computing - Fatal编程技术网

String 发送字符串到串行错误,6809汇编,初学者

String 发送字符串到串行错误,6809汇编,初学者,string,assembly,serial-port,retro-computing,String,Assembly,Serial Port,Retro Computing,我已经建立了一个简单的单板计算机,并试图学习6809汇编语言。我已经运行了一些简单的东西,例如通过6850ACIA进行Echo。我正试图打印一个字符串,但被卡住了 该字符串位于ROM中,以null零结尾。我加载X寄存器以指向字符串的开头。之后,我将X指向的字符加载到寄存器中,X递增。然后在将字符输出到ACIA之前测试null零。我已经将一个简单的逻辑分析器连接到数据总线,并且知道没有任何东西输出到ACIA,因为它看到的是零而不是第一个字符,并且认为字符串已经完成。我在代码中看不到bug,它可能与

我已经建立了一个简单的单板计算机,并试图学习6809汇编语言。我已经运行了一些简单的东西,例如通过6850ACIA进行Echo。我正试图打印一个字符串,但被卡住了

该字符串位于ROM中,以null零结尾。我加载X寄存器以指向字符串的开头。之后,我将X指向的字符加载到寄存器中,X递增。然后在将字符输出到ACIA之前测试null零。我已经将一个简单的逻辑分析器连接到数据总线,并且知道没有任何东西输出到ACIA,因为它看到的是零而不是第一个字符,并且认为字符串已经完成。我在代码中看不到bug,它可能与硬件有关,但需要有经验的眼睛来检查,以防我犯了初学者的错误

以下是大会:


*******************************EQUATES****************************************
    ***ACIA register definitions****
ACIA_control EQU $A000 ;write only
ACIA_status EQU $A000 ;read only
ACIA_data EQU $A001 ;read/write

********************************STRING CONSTANT******************************
    ORG $C000 ; ROM starts here

    ***store string to send out on serial***
    *Pseudo op FCN stores characters in sequential bytes,
    *and automatically adds null zero.
   

start_of_string
    FCN "The quick brown fox jumps over the lazy dog"

**********************************SETUP****************************************
setup

    ***reset_ACIA***
    LDA #%00000011
    STA ACIA_control

    ***set_ACIA_mode***
    ;clock/64 gives 19,200 baud with 4.9152   MHz xtal
    ;8 bits, 1 stop bit, no parity
    ;/RTS inactive (set high), TX interupt disabled, RX interupt disabled
    LDA #%01010110
    STA ACIA_control

*********************************SEND LOOP**************************************
reset_index_register
        LDX start_of_string

        ***Is ACIA ready to TX***
wait    LDA #%00000010
        ANDA ACIA_status
        BEQ wait

        ***send character***
        LDA ,X+
        BEQ end_of_string; string finished at null zero
        STA ACIA_data
        BRA wait ;next character

        ***LOOP BACK***
end_of_string
        BRA reset_index_register

*********************************VECTORS****************************************

    ***RESET***
    ORG $FFFE
    FDB setup ;Jump to programme entry

这绝对是初学者的错误

错误在队列中

LDX开始\u字符串

这是扩展模式寻址,所以X寄存器在字符串开头加载两个字符。这是一个指针,所以它现在指向“有龙!”

正确的代码是:
LDX#字符串的开始
这是即时模式。X现在加载了字符串开头的地址

Lance Leventhal的书“6809汇编语言编程”中的一个错误并没有让事情变得更容易。他将LDX的操作码直接作为BE,将LDX的操作码扩展为BE。这当然是不可能的。LDX立即操作码实际上是8E,因此您可以看到打字错误是如何发生的