三、試題解釋
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ù)都移出到外面了。
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ù)都移出到外面了。