2016-05-13 5 views
0

トラップタスク17を使用してレジスタの内容を表示しようとすると、私は奇妙なエラーが発生します。 はここに私のコードです:私はこれを実行するとtrapコマンドが呼び出されたときの簡単な68kエラー

*Equates section 
program_start equ $1000 *Start Location of program 
timesToAdd equ 10  *Number to multiply numToMultiply by 
numToMultiply equ 512 *Number to multiply through cumulative sum 

ORG program_start 
START:     ; first instruction of program 

* Put program code here 
    MOVE.L #$00000000,D0 *Initially set value in D0 to 0 
    MOVE.B #timesToAdd,D2 *Store times left to add in D2 

loop CMP.B #0,D2   *Check if we are finished adding 
     BEQ loop_end   *exit loop if we are done 
     SUB.B #1,D2   *decrement timesToAdd by 1 
     ADDI.L #numToMultiply,D0 *Add numToMultiply to value in D0 
     BCC skipSet 
     MOVE.B #1,D1   *Set D1 to 1 if carry bit is set 
skipSet BRA loop 
loop_end  
    MOVE.L D0,D2 
    MOVE.L #17,D0 

    CMP.B #0,D1 *Check if there was a carry 
    BEQ skipCarry 
    LEA Carry,A1 
    Trap #15  *Print Carry: with carry bit 
skipCarry 
    MOVE.L D2,D1 
    LEA Product,A1 
    Trap #15 

    SIMHALT    ; halt simulator 

Carry DC.B 'Carry: ' 
Product DC.B 'Product= ' 
    END START  ; last line of source 

、私はこの出力を得る:レジスタの Output

ステートトラップ呼び出しの前に: Before Trap

任意の助けをいただければ幸いです。

答えて

1

あなたのコードはひどく悪用されます。 trap#15はd0で示される操作を呼び出します。ヘルプマニュアルを参照してください。あなたは、時間のトラップ#15で "最小のフィールドの小数でD1.Lに番号を締結し表示します。(タスク15 & 20を参照してください)"

、トラップ15の動作3のためにされて探していました呼ばれる、あなたのD0は、(A1)で

「表示のn文字列の文字として解釈され、下位バイトが0x00である場合$ 1400、で、nはD1.W(NULLまたは最大255上で停止)CRと、 LF(タスク13参照) "

A1は、バイト "Product"のアドレスと同じです。

数字をCスタイルの文字列として解釈しようとしており、結果としてごみを与えています。

また、トラップを呼び出す前に、d0またはd1/etcが変更されている可能性があることに注意してください。奇妙なことが起こらないように、常にトラップコールの近くにd0割り当てを維持しようとします。最初に情報を準備してから、d0を設定してから、トラップを呼び出します。

これは、それが動作することを妨げる唯一のものですが、とにかく私がより快適な方法でそれを再フォーマットしました。

;Equates section 
program_start equ $1000  ; Start Location of program 
timesToAdd equ 10   ; Number to multiply numToMultiply by 
numToMultiply equ 512   ; Number to multiply through cumulative sum 

    org program_start 
start:      ; first instruction of program 
    move.l #$00000000, D0 ; Initially set value in D0 to 0 
    move.b #timesToAdd, D2 ; Store times left to add in D2 

loop: 
    cmp.b #0, d2    ; Check if we are finished adding 
    beq loop_end   ; exit loop if we are done 
    sub.b #1, d2    ; decrement timesToAdd by 1 
    addi.l #numToMultiply, d0 ; Add numToMultiply to value in D0 
    bcc skipSet 
    move.b #1, d1    ; Set D1 to 1 if carry bit is set 

skipSet: 
    bra loop 

loop_end: 
    ; Check if there was a carry 
    cmp.b #0, d1  
    beq skipCarry 
    lea Carry, a1 

    ; Print Carry: with carry bit 
    move.l #17, d0 
    move.l d0, d2 
    trap #15  

skipCarry: 
    move.l d2, d1 
    lea Product, a1 

    move.l d0, d1 
    move.l #3, d0 
    trap #15 

    simhalt 

Carry dc.b 'Carry: ' 
Product dc.b 'Product= ' 
    end start 
+0

ヘルプマン – RagCity

関連する問題