繁体   English   中英

68K 程序集:在数字文件中搜索数字

[英]68K Assembly: Search number in numbers file

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

文件 numbers4.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 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM