[英]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.