Casl匯編語(yǔ)言輔導(dǎo)(下)

字號(hào):

三、試題解釋
    1、2002年試題四 [程序說(shuō)明]
    本程序?qū)?80 個(gè) ASCII 編碼的數(shù)字字符轉(zhuǎn)換成 BCD 碼(二十進(jìn)制碼),并將每四個(gè) BCD 碼壓縮在一個(gè)字中。見(jiàn)下面圖示。
    數(shù)字字符數(shù)據(jù)地址 ASCII  
    +0 0033H '3'
    +1 0036H '6'
    +2 0038H '8'
    +3 0032H '2'
    ... ...  
    壓縮后的數(shù)據(jù)地址 BCD碼
    YS 3682H
    ... ...
    程序中約定原始數(shù)字字符存放在 SJ 開(kāi)始的連續(xù)存區(qū)中,轉(zhuǎn)換和壓縮結(jié)果存放在 YS 開(kāi)始的連續(xù)存區(qū)中。
    [程序]
    Y START 1
    LEA GR1,0 2
    __(1)__ 3
    S0 LEA GR3,4 4
    S1 LD GR0,SJ,GR2 5
    __(2)__ 6
    ST GR0,WK 7
    __(3)__ 8
    OR GR4,WK 9
    LEA GR3,-1,GR3 10
    JNZ S2 11
    ST GR4,YS,GR1 12
    LEA GR1,1,GR1 13
    __(4)__ 14
    S2 LEA GR2,1,GR2 15
    CPL GR2,C80 16
    __(5)__ 17
    WL EXIT 18
    SJ DS 80 19
    WK DS 1 20
    CF DC #000F 21
    C80 DC 80 22
    YS DS 20 23
    END
    從程序說(shuō)明中可知要將 80 個(gè) ASCII 編碼的數(shù)字字符轉(zhuǎn)換成 BCD 碼,并將每四個(gè) BCD 碼壓縮在一個(gè)字中。必須有雙重循環(huán):內(nèi)循環(huán)將每四個(gè) BCD 碼壓縮在一個(gè)字中,外循環(huán)完成 80 個(gè) ASCII 碼轉(zhuǎn)換(20個(gè)內(nèi)循環(huán))。從第4行LEA GR3,4可看出,GR3是內(nèi)循環(huán)計(jì)數(shù)器,S1是內(nèi)循環(huán)開(kāi)始標(biāo)號(hào)。
    從第2行、第5行及第15行可知,GR2是源地址指針(在第2行賦初值),GR1是目的地址指針,應(yīng)該在第3行賦初值。從而得到__(1)__空應(yīng)為L(zhǎng)EA GR2,0。
    從第7行及第9行可知,第7~9行是將轉(zhuǎn)換好的BCD碼拼裝到壓縮字中。GR4是壓縮字、WK是放轉(zhuǎn)換好的 BCD 碼的暫存單元。由此得__(2)__是將十進(jìn)制數(shù)的ASCII碼轉(zhuǎn)換成BCD碼,即AND GR0,CF。而將BCD碼拼裝到壓縮字前,應(yīng)該將壓縮字中原來(lái)的BCD碼左移4位,所以__(3)__空應(yīng)為SLL GR4,4。
    第10~17行應(yīng)該是內(nèi)外循環(huán)的控制語(yǔ)句,也是本程序的難點(diǎn)。
    從第10、11行可看出,第15~17行應(yīng)該內(nèi)循環(huán)尚未結(jié)束的處理,但第16、17行卻是判斷外循環(huán)結(jié)束的語(yǔ)句。因此可知,此程序把內(nèi)外循環(huán)的控制語(yǔ)句合在一起了。__(5)__空應(yīng)是JNZ S1 或 JMI S1,注意,應(yīng)該是跳轉(zhuǎn)到內(nèi)循環(huán)的起點(diǎn)S1,而不應(yīng)該是S0。因?yàn)榇颂巸?nèi)循環(huán)尚未結(jié)束,不能給內(nèi)循環(huán)計(jì)數(shù)器GR3重新賦值。
    第12~14行應(yīng)該是內(nèi)循環(huán)結(jié)束的處理,即把拼裝好的壓縮字送回到目的地址(第12、13行)。但__(4)__空不應(yīng)該是JMP S0,因?yàn)檫@樣將會(huì)越過(guò)判斷外循環(huán)結(jié)束的語(yǔ)句第16、17行。所以__(4)__空應(yīng)該是非跳轉(zhuǎn)語(yǔ)句,而從__(5)__(JNZ S1)看,內(nèi)循環(huán)計(jì)數(shù)器GR3應(yīng)重新賦值,所以__(4)__空應(yīng)該是LEA GR3,4。
    標(biāo)號(hào)S0與WL是沒(méi)用的。另外壓縮字GR4也不需賦初值清0,因?yàn)?次移位,每次移4位,原來(lái)不管是什么數(shù)都移出到外面了。