0

例如,我有一个包含这些代码编号的文件(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

4

1 回答 1

0

不知何故 68xx 系列浮现在脑海中......

乘以 2 可以通过移位轻松完成,并且可以按照与转换相同的方式跳过每个第二个字节,除了对 x 进行两次 INC 运算。使用奇数字节,您在调用之前 INC x。

于 2013-11-30T11:22:15.710 回答