2011-08-12 109 views
0

以下是的SiC/XE机的汇编语言代码....sicxe汇编语言编程

 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值中找到它的原始值,然后发送它'循环'来存储它...从程序看来,首先只有半字节的chatacter被发送到循环,然后另一个...如果这是事实,那么在第一个将有前半字节因此,上半场的ascii操作不会给我们输入的真正价值......还有w母鸡程序返回到“GETC”,让另一半字节将不会在列表中的其他字符来代替阅读...以下是来自同一本书的帮助下,线...

each byte of the code to be loaded is on device F1 as two hexadecimal digits 
+0

需要'家庭作业'标签吗? –

回答

0

那代码将以ASCII字符串编码的数字转换为字节值。

所以,给定字符串'A5'它会将数字165存储到内存中的一个字节中。

它需要为每个字节值做两次读取。 (如你所见,字符串'A5'中有两个字符,分别是'A'和'5'。

getc例程读取第一个字符。在我的例子中,这是'A',它有一个ASCII值为65(41十六进制),该例程再次减去48,然后再减去7 65-48-7 = 10,这是十六进制数字A的十进制表示法。

然后循环将此值4这是因为我们读取的第一个字符是两字节字符串的高位字节。

下一次调用getc时,它读取字符'5',它会读取具有53的代码。53-48是5.

循环然后将5添加到先前存储的值160,给出正确的总数为165.

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