0

たとえば、これらのコード番号を含むファイル (codes.txt) があります。

CODE1   fcc "3392236"
CODE2   fcc "1234550"
CODE3   fcc "7654361"
CODE4   fcc "1212223"
CODE5   fcc "1233211"
CODE6   fcc "1232343"

次に、toInteger.asm と呼ばれる別のサブルーチンでこれらの数値の読み取りを支援する readCode_Driver と呼ばれるサブルーチン。readCode_Driver.asm ファイルは次のようになります。

NUMBEROFCODES   equ     6       ; Six CODEs to process
LENGTHOFCODE    equ     7       ; Each code is 7 digits
PROGRAMSTART    equ     $2000   ; Executable code as in (programming code) starts here
STORAGE1        equ     $1000   ; Storage starts here for original code numbers

org     STORAGE1
CODES
#include codes.txt

    org     ProgramStart
    lds     #ProgramStart

                            ; Setup to use toInterger
    ldx     #CODES           ; point to first digit of NUM1 ex: 3
    ldab    #LENGTHOFCODE    ; code's length
    clra                    ; loop counter



ConvertCODEs

    psha                    
    pshb                    

    jsr     toInteger         ; Convert from ASCII to Integer


    pulb                    ; Retrieve CODE's Length (called a POP)
    pula                    ; Retrieve Loop Counter

    inca                    ; Setup to loop again
    cmpa    #NUMBEROFCODES   ; All six codes converted?
    bne     ConvertCODEs     ; No, so continue on looping
    swi                     ; All six CODEs converted?

#include toInteger.asm            ; subroutine to test with this driver
    end

これは私の toInteger.asm ファイルとその内容です:

toInteger ldaa    0,x                             ; get ASCII value
    suba    #$30                            ; convert to an integer
    staa    0,x                             ; store integer
    inx                                     ; point to next value
    decb                                    ; one less value to do
    cmpb    #0                              ; Is this the last ASCII value?
    bne     toInteger                         ; No, more to do
    rts                                     ; Yes, so we're done

これらのコードを検証するには、addeven.asm という別のサブルーチンが必要です。このサブルーチンは、コードに偶数を追加することを想定しています。たとえば、CODE1 は 3392236 です。偶数はこの位置 0 1 2 3 4 5 6 から選択されます。CODE1 では、偶数は 3(pos 0)、9(pos 2)、2(pos 4)、および 6 になります。 (位置6)。オッズ番号は 3(post1)、2(pos3)、3(pos5) になります。

問題は、code1 の偶数を取得し、個々の偶数に 2 を掛けてから、それらをアセンブリ言語で加算するにはどうすればよいかということです。この 2*3,2*9,2*2,2*6 のようになり、6+1+8+4+1+2 のようにそれらを追加します。これらのコードでは、18 は 1 と 8 なので、1+8 のように追加しました。マイクロコントローラーはdragon 12 68hc12

4

1 に答える 1

0

なんとなく68xx系が思い浮かびます…

2 による乗算は、シフトによって簡単に実行できます。2 バイトごとのスキップは、x を 2 回 INC することを除いて、変換と同じ方法で実行できます。奇数バイトでは、呼び出しの前に INC x を使用します。

于 2013-11-30T11:22:15.710 に答える