Как правильно добавить четные или нечетные числа в этот код сборки

Например, у меня есть файл (codes.txt) с этими номерами кода

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

Затем подпрограмма с именем readCode_Driver, задача которой состоит в том, чтобы помочь прочитать эти числа с помощью другой подпрограммы с именем toInteger.asm. Файл 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. Микроконтроллер Дракон 12 68hc12

1 ответ

Решение

Каким-то образом серия 68xx приходит на ум...

Умножение на 2 может быть легко выполнено путем сдвига, а пропуск каждого второго байта может быть выполнен так же, как вы выполнили преобразование, за исключением того, что INCin дважды x. С нечетными байтами вы INC x перед вызовом.

Другие вопросы по тегам