Sicxe汇编语言编程

问题描述 投票:0回答:1

以下是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值中找到其原始值,然后将其发送到“循环”以进行存储...从程序看来,只有前半字节的聊天对象被发送至循环,并且然后是另一个...如果这是事实,那么在第一个字符中将有charcter的前半个字节,因此前半部分的ascii操作将不会为我们提供输入的真实值...同样在程序返回到'getc'获取另一半字节将不会读取列表中的其他字符...下面是同一本书的一行以寻求帮助...

each byte of the code to be loaded is on device F1 as two hexadecimal digits  
assembly bootloader sic
1个回答
0
投票

该代码将以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。

然后,循环将5与先前存储的值160相加,得出正确的总数165。

同样,该代码段将一个ascii编码的十六进制数字转换为一个字节值。您需要两个字符来组成一个字节值。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.