Assembly 68K部件:在编号文件中搜索编号

Assembly 68K部件:在编号文件中搜索编号,assembly,68000,easy68k,Assembly,68000,Easy68k,我正在使用Easy68k编写一个汇编程序,在这个程序中,我必须编写一个脚本,用于在带有数字的文件中搜索数字 文件编号4.txt: 1 2 3 4 5 6 7 9 11 12 13 14 我的代码: ORG $1000 START: ; first instruction of program *------------File Handling ------------* lea filename, a1

我正在使用Easy68k编写一个汇编程序,在这个程序中,我必须编写一个脚本,用于在带有数字的文件中搜索数字

文件编号4.txt:

1
2
3
4
5
6
7
9
11
12
13
14
我的代码:

    ORG    $1000

START:                  ; first instruction of program

*------------File Handling ------------*

        lea         filename, a1
        move        #51, d0
        trap        #15

        move.l      #filesize, d2
        lea         buffer, a1
        move        #53, d0
        trap        #15 

*------------Save Address in A1------------*

        movea.l     a1, a3      ; pointer for file values



*------------Searching Value Loop------------*  

            clr.l   d3          ; value at index
search      move.b  (a3)+,d3
            *-- Compare Here --*
next        cmpi.b  #$FF,d3
            bne.s   search



* Put program code here


            SIMHALT             ; halt simulator

* Put variables and constants here
    org    $2000

filename    dc.b    'numbers4.txt',0
buffer      ds.w    80
filesize    dc.b    80


    END    START        ; last line of source
加载到内存的文件值:

我被困在需要比较数值的地方。我知道如何将单位数值0-9(即减去30)与十六进制进行比较,但如何将双位数或更高的数字与十六进制进行比较?例如,如何检查十六进制“0B”是否是内存中的ascii值(31)之一。或者我的方法不正确,我不确定


我是个新手,如果我遗漏了一些明显的东西,我向你道歉。请帮助

我将创建一个子例程,将数字读入内存/寄存器。依次处理每个数字,直到到达行的末尾(回车等)。本质上是将文本处理为一个真正的整数值以存储在内存中。然后这些值将很容易使用

读取一个数字时,每次将一个字符加载到数据寄存器中,如果下一个字符也是一个数字,则将数据寄存器中的数字乘以10,然后添加新的数字。如果源代码是十六进制的,这会更好,因为您可以简单地将数据寄存器左移4位,或在新的数字中移动

如果下一个字符不是数字,那么例程应该返回

如此简单的循环:

loadval: clr.l   d0        ; result in d0
         clr.l   d1        ; working reg
.loop:   move.b  (a3)+, d1
         cmpi.b  #$30, d1  ; check for numerical digit
         blt     .done
         cmpi.b  #$39, d1
         bgt     .done

         sub.b   #$30, d1  ; We have a number, add it 
         mult.w  #10, d0
         add.w   d1, d0
         bra.s   .loop
.done:   rts
希望这是有意义的,并且有效(只是在我的头顶上涂鸦了一下,所以可能有点问题:D)