2011-08-12 577 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編碼的十六進制數字轉換爲字節值。你需要兩個字符來組成一個字節值。