Assembly 汇编语言程序设计

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

以下是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 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编码的十六进制数转换为字节值。您需要两个字符组成一个字节值