Assembly 68K部件:在编号文件中搜索编号
我正在使用Easy68k编写一个汇编程序,在这个程序中,我必须编写一个脚本,用于在带有数字的文件中搜索数字 文件编号4.txt: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
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)