Assembly 汇编语言程序设计
以下是sic/xe机器的汇编语言代码Assembly 汇编语言程序设计,assembly,bootloader,sic,Assembly,Bootloader,Sic,以下是sic/xe机器的汇编语言代码 clear a ldx #128 loop jsub getc rmo a,s shift s,4 jsub getc addr s,a stch 0,x tixr x,x j loop getc td input jeq getc rd input comp #4 ;if input is 4 then eof jeq
clear a
ldx #128
loop jsub getc
rmo a,s
shift s,4
jsub getc
addr s,a
stch 0,x
tixr x,x
j loop
getc td input
jeq getc
rd input
comp #4 ;if input is 4 then eof
jeq 80 ;jump to start of program
comp #48 ; compare to charcter 0
jlt getc ;skip charcters less than 0
sub #48
comp #10 ;if result is less than 10, conversion is complete
jlt return
sub #7 ;for hex digits A through F
return rsub
input byte x'F1'
这是一个引导加载程序…该程序的目的是从设备F1读取数据,并将输入存储在80开始的地址…现在我的问题是,当我们需要执行移位s,4…时,当我们获取一次输入,我们从它的ascii值中找到它的原始值,然后将它发送到“loop”来存储它…从程序中,似乎只有chatacter的前半字节被发送到loop,然后是另一个…如果这是事实,那么在前半个字节中会有character的前半字节,因此前半个字节上的ascii操作不会给我们真正的值输入值…当程序返回“getc”以获取另一半字节时,列表中的另一个字符将不会被读取…以下是同一本书中的一行以获取帮助
each byte of the code to be loaded is on device F1 as two hexadecimal digits
该代码将ASCII字符串中编码的数字转换为字节值 因此,给定字符串“A5”,它将把数字165存储到内存中的一个字节中 它需要对每个字节值执行两次读取。如您所见,字符串“A5”中有两个字符,分别是“A”和“5” getc例程读取第一个字符。在我的示例中,这是“A”,它的ASCII值为65 41十六进制。例行程序减去48,然后再减去7。65-48-7=10,这是十六进制数字A的十进制表示法 然后,循环将该值移动4位,得到160'的值。这是因为我们读取的第一个字符是两字节字符串中的高阶字节 下次调用getc时,它将读取字符“5”,其代码为53。53-48是5 然后,循环将之前存储的值160加上5,得到正确的总数165 同样,该代码段将ascii编码的十六进制数转换为字节值。您需要两个字符组成一个字节值