久久久国产精品秘人口麻豆|永久免费AV无语国产|人成电影免费中文字幕|久久AV嫩草影院2

    1. <dfn id="yitbn"><samp id="yitbn"><progress id="yitbn"></progress></samp></dfn>

          <div id="yitbn"></div>

          1. 查看全部128種考試
            軟件水平考試
             考試動態(tài) 報考指南 歷年真題 模擬試題 復習資料 心得技巧 專業(yè)英語 技術文章 軟考論壇 考試用書
             程序員 軟件設計師 網絡管理員 網絡工程師 系統(tǒng)分析師 數(shù)據(jù)庫系統(tǒng)工程師
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            eeeigo.com  
            【字體: Casl匯編語言輔導(下)
            Casl匯編語言輔導(下)
            spks.eeeigo.com 來源:考試吧(eeeigo.com) 更新:2004-12-29 23:52:00 軟件水平考試 考試論壇

            、試題解釋

            1、2002年試題四
            [程序說明]

            本程序將 80 個 ASCII 編碼的數(shù)字字符轉換成 BCD 碼(二十進制碼),并將每四個 BCD 碼壓縮在一個字中。見下面圖示。

            數(shù)字字符數(shù)據(jù)

            地址

            ASCII

             

            +0

            0033H

            '3'

            +1

            0036H

            '6'

            +2

            0038H

            '8'

            +3

            0032H

            '2'

            ...

            ...

             

            壓縮后的數(shù)據(jù)

            地址 BCD碼
            YS 3682H
            ... ...

            程序中約定原始數(shù)字字符存放在 SJ 開始的連續(xù)存區(qū)中,轉換和壓縮結果存放在 YS 開始的連續(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

            從程序說明中可知要將 80 個 ASCII 編碼的數(shù)字字符轉換成 BCD 碼,并將每四個 BCD 碼壓縮在一個字中。必須有雙重循環(huán):內循環(huán)將每四個 BCD 碼壓縮在一個字中,外循環(huán)完成 80 個 ASCII 碼轉換(20個內循環(huán))。從第4行LEA GR3,4可看出,GR3是內循環(huán)計數(shù)器,S1是內循環(huán)開始標號。

            從第2行、第5行及第15行可知,GR2是源地址指針(在第2行賦初值),GR1是目的地址指針,應該在第3行賦初值。從而得到__(1)__空應為LEA GR2,0。

            從第7行及第9行可知,第7~9行是將轉換好的BCD碼拼裝到壓縮字中。GR4是壓縮字、WK是放轉換好的 BCD 碼的暫存單元。由此得__(2)__是將十進制數(shù)的ASCII碼轉換成BCD碼,即AND GR0,CF。而將BCD碼拼裝到壓縮字前,應該將壓縮字中原來的BCD碼左移4位,所以__(3)__空應為SLL GR4,4。

            第10~17行應該是內外循環(huán)的控制語句,也是本程序的難點。

            從第10、11行可看出,第15~17行應該內循環(huán)尚未結束的處理,但第16、17行卻是判斷外循環(huán)結束的語句。因此可知,此程序把內外循環(huán)的控制語句合在一起了。__(5)__空應是JNZ S1 或 JMI S1,注意,應該是跳轉到內循環(huán)的起點S1,而不應該是S0。因為此處內循環(huán)尚未結束,不能給內循環(huán)計數(shù)器GR3重新賦值。

            第12~14行應該是內循環(huán)結束的處理,即把拼裝好的壓縮字送回到目的地址(第12、13行)。但__(4)__空不應該是JMP S0,因為這樣將會越過判斷外循環(huán)結束的語句第16、17行。所以__(4)__空應該是非跳轉語句,而從__(5)__(JNZ S1)看,內循環(huán)計數(shù)器GR3應重新賦值,所以__(4)__空應該是LEA GR3,4。

            標號S0與WL是沒用的。另外壓縮字GR4也不需賦初值清0,因為4次移位,每次移4位,原來不管是什么數(shù)都移出到外面了。
            2、2001年試題三

            [程序說明]

            子程序 DEHZ 用來對 HZ 編碼的字串做解碼處理。

            HZ 編碼是海外華人創(chuàng)造的一種將含有高位為 1 的漢字雙字節(jié)字串轉換成易于在網絡中傳輸?shù)腁SCII 字符串的變換方式。編碼過程中,被轉換字符串中的原漢字子字符串各字節(jié)高位作清零處理,使之成為 ASCII 子字符串,并在其前后兩端分別添加 ~{ 和 ~} 作為標記;而對于原 ASCII 子字符串,則將其中的 ~ 改寫為 ~~,其余字符不變。

            DEHZ 解碼子程序則是 HZ 編碼的復原過程。復原 ASCII 子字符串過程中遇有 ~~ 字符則改寫為一個 ~ ,遇有 ~{ 則將其后直至 ~} 標記前的各字節(jié)高位置 1,復原為漢字子字符串,同時刪除其前后標記。~的后續(xù)字符不屬于以上情況均作為錯誤處理。

            調用該子程序時, GR1 存放原始字符串首地址, GR2 存放還原后的目標字符串首地址。工作寄存器  GR3 用作處理漢字子字符串的識別標志,進入子程序時應初始化為處理 ASCII 子字符串。程序按照   CASL 語言的標準約定,字符串的每個字符只占用一個存儲字的低八位。原始字符串和目標字符串均以 0 作為結束標志。

            [程序]

            START 1
            DEHZ PUSH 0,GR3 2
            PUSH 0,GR2 3
            PUSH 0,GR1 4
            LEA GR3,0 5
            LOOP __(1)__ 6
            CPA  GR0,MARK0 7
            JNZ GOON 8
            LEA GR1,1,GR1 9
            LD GR0,0,GR1 10
            CPA GR0,MARK0 11
            __(2)__ 12
            CPA GR0,MARK1,GR3 13
            JNZ  ERROR 14
            __(3)__ 15
            LEA GR1,1,GR1 16
            JMP LOOP 17
            ERROR OUT ERS1R,ERLEN 18
            JMP EXIT 19
            GOON __(4)__ 20
            ST GR0,0,GR2 21
            LEA GR2,1,GR2 22
            LEA GR1,1,GR1 23
            CPA GR0,VO 24
            __(5)__ 25
            EXIT P0P GR1 26
            P0P GR2 27
            P0P GR3 28
            RET 29
            V1 DC 1 30
            V0  DC O 31
            DC #0080 32
            MARK0 DC  '~ ' 33
            MARK1 DC '{ }' 34
            ERSTR DC 'ERROR!' 35
            ERLEN DC 6 36
            END 37

            [解]

            寄存器作用:

            GR1:源字符串地址指針,調用該子程序時,存放源字符串首地址。

            GR2:目標字符串地址指針,調用該子程序時,存放目標字符串首地址。

            GR3:用作處理漢字子字符串的識別標志。0 表示 ASCII 碼(初始值),1 表示漢字。

            GR0:工作寄存器,存放待處理的字符。(從第 7 行 "CPA  GR0,MARK0" 看出)

            分析:

            1)從第 7 行 " CPA  GR0,MARK0" 看出,GR0 中存放待處理的字符。所以第 6 行(__(1)__)必定是一條取數(shù)指令:"LD  GR0,0,GR1" ,即把源字符串地址指針所指的字符取到 GR0 中。

            2)從第 7 行及第 8 行可知,第 9 行到第 17 行是處理碰到“~”的情況,即判斷后一字符是否是“~”、“{ ”及“}”。若都不是,則出錯。

            3)從第 11 行可知,要判斷是否連續(xù)兩個“~”情況,而后面是繼續(xù)比較,所以第 12 行(__(2)__)應該是一條“JZE”指令,而且是轉移到 GOON ,即把“~”存放到目標字符串中。

            4)第 13 行“CPA GR0,MARK1,GR3”應該是比較“{ ”及“}”:在中文狀態(tài)比較“}”(結束),在西文狀態(tài)比較“{ ”(開始)。所以這里用的是變址尋址,即由 GR3 的值是 0 或 1,決定是比較“{ ”還是“}”。

            5)第 12 行(__(3)__)應該是改變漢字子字符串的識別標志 GR3 的指令,即原來是 0 的變成 1,原來是 1 的變成 0,異或指令可以達到此目的。將 GR3 與常數(shù) 1 相異或,因 Casl 沒有沒有立即數(shù)運算指令,只能和常數(shù) V1 異或:EOR GR3,V1。

            6)第 20 行(__(4)__)是 GR0 中存放的字符送到目標字符串前的處理工作:若是西文狀態(tài)( GR3 的值是 0 ),保持原樣;若是中文狀態(tài)( GR3 的值是 1 ),字節(jié)最高位置 1,復原為漢字子字符串,將GR0 的內容與十六進制數(shù) 0080 相或,即能達到目的。所以這條指令應是:OR GR0,V0,GR3 。

            7)第 24 行將 GR0 與 0 比較,是判斷字符串結束標志 0 。若非 0(未結束),繼續(xù)處理。故第 25 行(__(5)__)應是一條條件轉移指令:JNZ LOOP 。

            3、2000年試題四

            [程序說明]

            (1)本子程序根據(jù)每位職工的基本工資(非負值)和他完成產品的超額數(shù)或不足數(shù)計算該職工的應發(fā)工資。

            (2)主程序調用時,GR1中給出子程序所需參數(shù)的起始地址,參數(shù)的存放次序如下表:

            GR1

            a1
              b1
              c1
              a2
              b2
              c2
             
              an
              bn
              cn
              -1(結束標志)

             其中 ai 為職工 i 的基本工資;bi 為職工 i 的完成產品的超額數(shù)或不足數(shù);ci為職工 i 的應發(fā)工資數(shù)(i = 1、2、…、n)。

            bi以原碼形式存放(大于零為超額,小于零為不足),基本工資與計算所得的應發(fā)工資以補碼形式存放。

            (3)應發(fā)工資的計算規(guī)則為:

            ●恰好完成定額數(shù)(此時bi = 0),應發(fā)工資即為基本工資。

            ●每超額 4 件,在基本工資基礎上增加 10 元(不到 4 件,以 4 計算,例如超額數(shù)為 10 時,增加 30 元)。

            ●每不足 4 件,在基本工資基礎上減 5 元(不到 4 件,以 4 計算,例如不足數(shù)為 5 時,減 10元)。

            [程序]

            START 1

            BEG 

            PUSH 0,GR1 2
            PUSH 0,GR2 3
            PUSH 0,GR3 4
            L1  __(1)__ 5
            LEA  GR0,0,GR2 6
            JMI FINISH 7
            LD GR3,1,GR1 8
            LEA  GR2,0,GR3 9
            AND GR2,C7FFF 10
            JZE L3 11
            SRL GR3,15 12
            LEA GR2,-1,GR2 13
            L2 __(2)__ 14
            LEA GR2,-4,GR2 15
            JPZ L2 16
            L3 __(3)__ 17
            __(4)__ 18
            __(5)__ 19
            FINISH POP GR3 20
            POP GR2 21
            POP GR1 22
            RET 23
            C7FFF DC #7FFF 24
            BONUS DC 10 25
            DC -5 26
            END 27

            [解]

            寄存器作用:

            GR1:地址指針

            GR2:臨時工作單元。先放 ai,后放 bi(絕對值)。

            GR3:bi符號

            GR0:ci---應發(fā)工資

            分析:

            1)從第 6 行 "LEA GR0,0,GR2" 及第 7 行 "JMI FINISH" 可知 GR0 開始時應是 ai,GR2 也應是ai,(從 LEA 指令功能分析)。所以第 5 行(1)應該是取數(shù)指令:

            LD GR2,0,GR1

            2)從第 8 行 "LD GR3,1,GR1" 及第 9 行 "LEA GR2,0,GR3" 可知 GR2 及 GR3 放的都是 bi(超額數(shù)或不足數(shù)),而從第 10 行 "AND GR2,C7FFF"(注意:C7FFF是 16 進制常量的標號(第 24 行)),可知 GR2 存放其絕對值。而且在該值為 0 時直接結束該職工處理(第 11 行 "JZE L3")。

            3)從第 12 行 "SRL GR3,15" 可知 GR3 存放 bi 的符號(超額為 0,不足為 1)

            4)從第 25、26 兩行可知 BONUS 是每個超額或不足單位(4 件)的增加或扣除金額。從而得出最關鍵的第 14 行2應為 "ADD GR0,BONUS,GR3"。第 15、16 行指出這一加或減(GR3=1時,源操作數(shù)為負)是一循環(huán)過程,一直到 GR2<0。為防止 bi 為 4 的整數(shù)倍時多加減一次,在第 13 行中先將 GR 減 1。

            5)第17、18、19行(L3)依次是該職工的應發(fā)工資回送、修改地址指針(指向下一職工)和跳到處理程序開始(L1):

            ST GR0,2,GR1

            LEA GR1,3,GR1

            JMP L1

            4、1999年試題四〖程序4.1〗

            [程序4.1說明]

            本子程序是對 15 位二進位串,求它的奇校驗位,生成 16 位二進制位串,使 16 位二進制位串有奇數(shù)個 1。

            進入此子程序時,15 位二進制位串在 GR1 的第 1 位至第 15 位,并假定 GR1 的第 0 位是 0,求得的奇校驗位裝配在 GR1 的第 0 位上。


            [程序4.1]

            START 1
            BEG PUSH 0,GR2 2
            PUSH 0,GR3 3
            LEA GR3,1 4
            __ (1) __ 5
            L1 SLL GR2,1 6
            __ (2) __ 7
            LEA GR3,1,GR3 8
            L2 JZE L3 9
            JMP L1 10
            L3 __ (3) __ 11
            ST GR3,WORK 12
            ADD GR1,WORK 13
            POP GR3 14
            POP GR2 15
            RET 16
            WORK DS 1 17
            END 18

            [分析]

            1)從說明中已知,被轉換的二進位串(一個字)放在 GR1 中。

            2)第 6 行 "SLL GR2,1" 這條指令是處理奇偶校驗用的,因此 GR2 也應該是工作單元,初始值為被處理數(shù),故第 5 行(1)應該是 "LEA GR2,0,GR1"。

            3)從第 4、5 行看,GR3 是一個計數(shù)器(統(tǒng)計值為 1 的位的個數(shù)),初始值為 1,即當 GR2 一個 1也沒有時,其值為 1(奇校驗)。

            4)第 6 行 "SLL GR2,1" 將被處理數(shù)左移一位,需要判斷最高位是否為 1,若是,計數(shù)器加 1,否則跳過這條指令。因最高位也是符號位,所以可用 "JPZ L2"(2)。

            5)第 9 行(L2)"JZE L3"是移位結束條件,即移到結果為 0 時結束。

            6)第 11、12、13 行,是在計數(shù)器值為奇數(shù)(即實際 1 的個數(shù)為偶數(shù))時把被處理字 GR1 最高位變成 1。而計數(shù)器 GR3 為奇數(shù)即其最低位為 1,因此需把 GR3 的最低位變成最高位,所以第 11 行(3)應該是:SLL GR3,15


            5、1999年試題四〖程序4.2〗

            [程序4.2說明]

            子程序 SUM 是將存貯字 A 起的 n(n>0) 個字求和,并將結果存于存貯字 B 中。
            調用該子程序時,主程序在 GR1 中給出存放子程序所需參數(shù)的起始地址。參數(shù)的存放次序如下圖:

            (GR1)+0

            A

            +1

            n

            +2

            B

            [程序4.2]

            START
            SUM LD GR2,0,GR1
            LD GR3,1,GR1
            LEA GR0,0
            L5 ADD GR0,0,GR2
            LEA GR2,1,GR2
            _ (4) _
            JNZ L5
            L3 __(5)   
            ST GR0,0,GR3
            RET
            END

            [分析]

            1)GR1 為參數(shù)表起始地址

            2)GR2 為數(shù)組地址指針,起始值為A

            3)GR3 為計數(shù)器,初始值為數(shù)組長度 n。

            4)GR0 為累加和工作單元

            5)(  4  )應該是計數(shù)器減 1:LEA GR3,-1,GR3

            6)(  5  )應把結果單元地址 B 賦給 GR3:LD GR3,2,GR1

            5、1998年試題四

            [程序說明]

            本程序是統(tǒng)計字符串中數(shù)字字符"0"至"9"的出現(xiàn)次數(shù)。

            字符串中的每個字符是用 ASCII 碼存貯。一個存貯單元存放兩個字符,每個字符占 8 位二進位。

            程序中,被統(tǒng)計的字符串從左至右存放在 STR 開始的連續(xù)單元中,并假定其長度不超過 200,字符串以'·'符作為結束。NCH 開始的 10 個單元存放統(tǒng)計結果。

            START MIN 1
            MIN LEA GR2,9 2
            LEA GR0,0 3
            L1 _ (1) _ 4
            LEA GR2,-1,GR2 5
            JPZ L1 6
            LEA GR4,0 7
            LEA GR1,0 8
            L2 LD GR2,STR,GR1 9
            EOR GR4,C1 10
            JNZ RL 11
             _ (2) _  12
            RL SRL GR2,8 13
            LEA GR3,0,GR2 14
            SUB GR3,C9 15
            JM1 L316
            JNZ L4 17
            L3 LEA GR3,0,GR2 18
            SUB GR3,CO 19
            JM1 L5 20
            LEA GR2,1 21
            _(3)_ 22
            _(4)_ 23
            L4 LEA GR4,0,GR4 24
            JNZ L2 25
            _(5)_ 26
            JMP L2 27
            L5 SUB GR2,C 28
            JNZ L4 29
            EXIT 30
            C1 DC 1 31
            C DC '·' 32
            C0 DC '0' 33
            C9 DC '9' 34
            STR DS 200 35
            NCH DS 10 36
            END 37

            [解]

            1)第 2~8 行(L2以前)是初始化程序,其中第 2~6 行是把計數(shù)器存放單元 NCH 開始的十個單元清零。地址指針是 GR2(遞減),故(1)為:ST GR0,NCH,GR2

            2)從第 8、9 行看出 GR1 是地址指針(相對于 STR)。GR2是工作單元(要處理的字符)

            3)因一個字放兩個字符,故 GR4 用作高低字節(jié)標志。起始值為 0,先處理高字節(jié),第 10 行指令"EOR GR4,C1"一方面判斷是否第一次(結果非 0),并將 GR4 置 1。

            第一次處理高字節(jié),用邏輯右移指令將高 8 位內容移到低 8 位(高 8 位置 0)。

            第二次處理低字節(jié),用先邏輯左移再邏輯右移指令將高 8 位內容置 0,故(2)為:

            SLL GR2,8

            4)在處理過程又用 GR3 作臨時工作單元,即把 GR2 內容送給GR3再處理。處理時先判是否>"9"(不計數(shù))。然后減以 "0" ,使 GR3 變成 0~9。

            5)計數(shù)處理是在第 21、22、23 三行中完成。使 NCH 開始的 10 個單元中與 GR3 對應的那個單元加1。因加法指令的目的操作數(shù)只能是寄存器,所以先給 GR2 送 1(第 21 行),再將 NCH 對應單元內容加到 GR2 中,再將 GR2 內容送回 NCH 對應單元(采用 GR3 變址尋址)。故34為:"ADD GR2,NCH,GR3"及"ST GR2,NCH,GR3"。

            6)在一個字的第二次處理后(用第 24、25 行判斷),要修改字符串的地址指針 GR1(加1)。故    (5為:"LEA GR1,1,GR1"。

            6、1997年試題四

            [程序說明]

            本子程序將一個非負二進整數(shù)翻譯成五位十進整數(shù)字符。

            進入子程序時,在 GR0 中給出被翻譯的非負二進整數(shù),在 GR2 中給出存放五位十進整數(shù)數(shù)字字符的起始地址。

            十進制數(shù)字字符用 ASCII 碼表示。當結果小于五位時,左邊用空白符替換;當二進整數(shù)為零時,在(GR2)+4 中存放 0 的 ASCII 碼。

            數(shù)字字符 0 至 9 的 ASCII 碼是 48 至 57,空白符的 ASCII 碼是 32。
            [程序]

            START 1
            LEA GR1,0 2
            LEA GR3,32 3
            L1 ____(1)____ 4
            JPZ L2 5
            ST GR3,0,GR2 6
            LEA GR2,1,GR2 7
            LEA GR1,1,GR1 8
            LEA GR4,-4,GR1 9
            JNZ L1 10
            L2 ___(2)___ 11
            L3 ___(3)___ 12
            JMI L4 13
            SUB GR0,SNO,GR1 14
            LEA GR3,1,GR3 15
            ___(4)___ 16
            L4 ST GR3,0,GR2 17
            LEA GR2,1,GR2 18
            LEA GR1,1,GR1 19
            ___(5)___ 20
            JNZ L2 21
            RET 22
            SNO DC 10000 23
            DC 1000 24
            DC 100 25
            DC 10 26
            DC 1 27
            END 28

            [解]

            這是一個典型的二化十匯編語言題例,其算法是將被轉換的二進制數(shù)依次被 10i(i為 4、3、2、1、0)除,所得的商即為該十進制數(shù)位的值,其余數(shù)再被下一個 10i 除。一般用減法代替除法,即一邊減10i,一邊計數(shù)器加 1,直到不夠減再進行下一位 10i-1

            1)寄存器分配:GR0:被轉換數(shù);GR2:存放五位十進整數(shù)數(shù)字字符的起始地址。

            GR1:數(shù)位計數(shù)器(兼作 SNO 內存數(shù)組的下標)

            GR3:在初始化時放空格的 ASCII 碼(48),在轉換時作某一位的數(shù)碼計數(shù)器(初始值為 0 的 ASCII 碼 48)

            2)SNO 內存變量依次存放 104、103、102、101、100 。

            3)第 2~9 行為初始化程序,在 GR0<10i 時,對應的十進整數(shù)數(shù)字字符單元放空格(當結果小于五位時,左邊用空白符替換),此過程一直進行到 GR0≥10i 或 GR1= 4(個位)。因此____(1)____應為 "CPL GR0,SNO,GR1"。

            4)L2 開始進行除法(減法)。GR3 作某一位的數(shù)碼計數(shù)器。從 L4 可看出,該計數(shù)值直接放到結果單元 [GR2],而按題意所放的是 ASCII 碼,所以其初始值應為 0 的 ASCII 碼 48。因此___(2)___為:

            LEA GR3,48

            5)根據(jù)算法,GR0≥10i 才做減法,故____(3)____還是 "CPL GR0,SNO,GR1"。

            6) ___(4)___是 "JMP L3",即繼續(xù)做這一位的減法,直至 GR0<10i。

            7)L4 后 3 行是某一位結束處理:結果送到地址指針 GR2 所指的存放單元;地址指針 GR2 加 1;SNO 內存數(shù)組的下標 GR1 加 1。

            8)___(5)___應該是判斷除法是否做到個位結束。即下標 GR1=5,因此這一句為:

            LEA GR3,-5,GR1

            7、1996年試題四

            [程序說明]

            子程序 OFFSET 用二分法,查找無符號整數(shù) M 在一個長度為 N 的有序(升序)無符號整數(shù)列表NTABLE 中的位置。程序中標號為 LOW 和 UP 的兩個存儲字分別用作存放查找空間的上下限。

            進入子程序時,在 GR1 中中給出存放子程序所需參數(shù)的起始地址。參數(shù)的存放次序如下圖:

            (GR1)+0 

            M

            1

            N

            2

            NTABLE的首址

            從子程序返回時,GR0 中存放查找結果,即 M 在此有序表中的位置序數(shù),如表中找不到 M,則 GR0 中返回 0,其它寄存器的內容保持不變。
            [程序]

            START 1
            OFFSET PUSH 0,GR2 2
            PUSH 0,GR3 3
            LD GR0,0,GR1 4
            LEA GR2,0 5
            ST GR2,LOW 6
            ___(1)___ 7
            ___(2)___ 8
            ST GR2,UP 9
            LOOP ADD GR2,LOW 10
            SRL GR2,1 11
            LEA GR3,0,GR2 12
            ___(3)___ 13
            ___(4)___ 14
            JZE FOUND 15
            JPZ INCLOW 16
            LEA GR2,-1,GR2 ;M<NTABLE(K) 17
            ST GR2,UP 18
            JMP CMPLU 19
            INCLOW LEA GR2,1,GR2 ;M> NTABLE(K) 20
            ST GR2,LOW ;K+1→LOW 21
            ___(5)___ 22
            CMPLU CPL GR2,LOW 23
            ___(6)___ 24
            ___(7)___ 25
            FOUND LEA GR0,1,GR2 26
            POP GR3 27
            POP GR2 28
            RET 29
            LOW DS 1 30
            UP DS 1 31
            END 32

            [解]

            二分法查找的基本思想是對任意一段查找空間 [LOW,UP](有序)中的的表元,試探位置 K=(LOW+UP)/2上的成分 NTABLE(K) 與 M 進行比較,其可能結果有三種:

            1)NTABLE(K)= M,找到,結束查找。

            2)NTABLE(K)< M,下一查找空間為[K+1,UP]。

            3)NTABLE(K)> M,下一查找空間為[LOW,K-1]。

            初始查找空間為 LOW=0,UP=N-1。

            程序中空格___(1)___和___(2)___前面的兩條指令是將查找空間的上限 LOW 中 0,二在它之后的指令是將 GR2 中的值存于查找空間的下限 UP 中。因此這兩個空格是把下限初值 N-1 送給 GR2。由于進入子程序時,N 存放在(GR1)+1 中,所以這兩條指令為:

            LD GR2,1,GR1

            LEA GR2,-1,GR2

            從標號 LOOP 開始的循環(huán)是求試探位置 K,根據(jù) NTABLE(K) 和 M 比較結果,分別處理三種不同的情況,直至查到或查找空間為 0 。

            考察空格___(3)___和___(4)___前面的指令,可得 K 在 GR2 和 GR3 中,在執(zhí)行___(3)___和___(4)___兩條指令后,有三種轉向,因此這兩條指令是將 GR0 中的 M 與 NTABLE(K)比較。而從程序說明中以知,NTABLE(0) 地址在 GR1+2。故 NTABLE(K) 的地址應為 GR2 或 GR3 與(GR1+2)相加(絕對地址)。但GR2 在后面要作相對地址  K用,所以只能是 GR3 與(GR1+2)相加。所以空格___(3)___和___(4)___為:

            ADD GR3,2,GR1

            CPL GR0,0,GR3

            執(zhí)行上述兩條指令后,若不相等則要調整查找空間,在繼續(xù)查找前,先應判斷查找空間是否為 0,在程序中是用標號為 CMPLU 的指令實現(xiàn),顯然 GR2 內應是查找空間的下限 UP。故___(5)___的答案為:

            LD GR2,UP

            當查找空間不為0時(UP>LOW),應繼續(xù)查找,所以___(6)___的解答為:

            JPZ LOOP

            子程序返回時,GR0 中存放查找結果,在表中找到M時,GR0 中存放M在表中的位置序數(shù),在程序中用 "FOUND LEA GR0,1,GR2" 實現(xiàn)(這里 GR2 中是試探位置,與位置序數(shù)差 1 )。

            若表中找不到 M,GR0 中要放 0,所以___(7)___處應填 "LD GR2,-1"。

            轉帖于:軟件水平考試_考試吧
            文章搜索  
            看了本文的網友還看了:
            ·軟件工程習題200題之二  (2004-12-29 23:54:00)
            ·軟件工程習題200題之一  (2004-12-29 23:53:00)
            ·Casl匯編語言輔導(上)  (2004-12-27 13:32:00)
            軟件水平考試權威輔導教材: 訂書電話:010-62168566  更多>>>
            網友評論
            昵 稱: *  評 分: 1分 2分 3分 4分 5分
            標題:   匿名發(fā)表    (共有條評論)查看全部評論>>
            版權聲明 -------------------------------------------------------------------------------------
              如果軟件水平考試網所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系,我們將會及時處理。如轉載本軟件水平考試網內容,請注明出處。
            關于本站  網站聲明  廣告服務  聯(lián)系方式  付款方式  站內導航  客服中心  友情鏈接  考試論壇  網站地圖
            Copyright © 2004-2008 考試吧軟件水平考試網 All Rights Reserved    
            中國科學院研究生院權威支持(北京) 電 話:010-62168566 傳 真:010-62192699
            百度大聯(lián)盟黃金認證  十佳網絡教育機構  經營許可證號:京ICP060677