微型計(jì)算機(jī)原理與應(yīng)用技術(shù)部分復(fù)習(xí)題答案(新)
《微型計(jì)算機(jī)原理及應(yīng)用技術(shù)》習(xí)題答案
為了配合《計(jì)算機(jī)原理及硬件技術(shù)》課程的學(xué)習(xí),特編制此部分習(xí)題答案,以便對(duì)廣大同學(xué)的學(xué)習(xí)能有所幫助。
但由于時(shí)間倉促,難免有錯(cuò)誤之處,請(qǐng)同學(xué)們?cè)趯W(xué)習(xí)中發(fā)現(xiàn)錯(cuò)誤盡快找老師聯(lián)系進(jìn)行更正,可以通過email 郵箱聯(lián)系: gongdajixi@
第一章 微機(jī)基礎(chǔ)知識(shí)
一、選擇題
1.一臺(tái)完整的微機(jī)系統(tǒng)應(yīng)包括( )。 A
A.硬件和軟件 B.運(yùn)算器、控制器和存儲(chǔ)器 C.主機(jī)和外部設(shè)備 D.主機(jī)和實(shí)用程序
2.微機(jī)硬件中最核心的部件是( )。 C
A.運(yùn)算器 B.主存儲(chǔ)器 C.CPU D.輸入/輸出設(shè)備
3.微機(jī)的性能主要取決于( )。 A
A.CPU B.主存儲(chǔ)器 C.硬盤 D.顯示器
4. 帶符號(hào)數(shù)在計(jì)算機(jī)中通常采用( )來表示。 C
A.原碼 B.反碼 C.補(bǔ)碼 D.BCD碼
5.已知某數(shù)為-128,其機(jī)器數(shù)為10000000B,則其機(jī)內(nèi)采用的是( )表示。 C
A.原碼 B.反碼 C.補(bǔ)碼 D.真值
6.在8位二進(jìn)制數(shù)中,采用補(bǔ)碼表示時(shí)數(shù)的真值范圍是( )。 C
A.-127~+127 B.-127~+128 C.-128~+127 D.-128~+128
7.大寫字母“B”的ASCII碼是( )。 B
A. 41H B. 42H C. 61H D. 62H
8.某數(shù)在計(jì)算機(jī)中用8421-BCD碼表示為10010011,其真值為( )。 C
A.10010011B B.93H C.93 D.147
二、填空題:
1. 微機(jī)的硬件主要包括主機(jī)和外設(shè)等部分。
2. 系統(tǒng)軟件主要包括操作系統(tǒng)、語言處理程序和各種實(shí)用程序等。
3. 任何計(jì)數(shù)制都可以采用基數(shù)和位權(quán)來表示,二進(jìn)制的基數(shù)為2,其中第n位的位權(quán)為2n-1。
4. 計(jì)算機(jī)中的數(shù)有_數(shù)值型和非數(shù)值型_兩種表示方法,前者的特點(diǎn)是_表示數(shù)值大小,進(jìn)行算術(shù)運(yùn)算等處理操作_;后者的特點(diǎn)是_表示字符編碼,在計(jì)算機(jī)中描述某種特定的信息。
5. 計(jì)算機(jī)中參加運(yùn)算的數(shù)及運(yùn)算結(jié)果都應(yīng)在用原碼表示的-2n-1 ≤ X < +2n-1范圍內(nèi),若參加運(yùn)算的數(shù)及運(yùn)算結(jié)果-2n-1 > X±Y ≥ +2n-1,稱為數(shù)據(jù)溢出。注:其中n為計(jì)算機(jī)的字長
6. 計(jì)算機(jī)中帶符號(hào)的數(shù)在運(yùn)算處理時(shí)通常采用補(bǔ)碼表示,其好處在于簡化機(jī)器數(shù)的運(yùn)算。
7. ASCII碼可以表示_128_種字符,其中起控制作用的稱為_功能碼_;供書寫程序和描述命令使用的稱為_信息碼_。
8. 已知某數(shù)為61H,若為無符號(hào)數(shù)代表 97D ;若為帶符號(hào)數(shù)代表 +97D ;若為ASCII碼代表a;若為BCD碼代表 61 。
三、判斷題
1.由于物理器件的性能,決定了微機(jī)內(nèi)部的所有信息仍以二進(jìn)制方式表示。 ( )√
2.微機(jī)中數(shù)據(jù)的表示范圍不受計(jì)算機(jī)字長的限制。 ( ) ×
3.微機(jī)地址總線的寬度決定內(nèi)存容量的大小。 ( ) √
4.“0”的原碼和反碼各有不同表示,而“0”的補(bǔ)碼表示是唯一的。 ( )√
5.微機(jī)在運(yùn)算中產(chǎn)生數(shù)據(jù)溢出,其原因是運(yùn)算過程中最高位產(chǎn)生了進(jìn)位。 ( )×
6.微機(jī)鍵盤輸入的各類符號(hào)在計(jì)算機(jī)內(nèi)部均表示為ASCII碼。 ( ) ×
四、數(shù)制轉(zhuǎn)換題
1.將下列十進(jìn)制數(shù)分別轉(zhuǎn)換為二進(jìn)制數(shù)、十六進(jìn)制數(shù)和壓縮BCD碼。
(1)26 (2)47 (3)125 (4)228
答:
(1)
(2)
(3)
(4)
十進(jìn)制數(shù)
26
47
125
228
二進(jìn)制數(shù)
11010
101111
1111101
11100100
十六進(jìn)制數(shù)
1AH
2FH
7DH
E4H
壓縮BCD碼
00100110
01000111
000100100101
001000101000
方法: 轉(zhuǎn)換為二進(jìn)制數(shù):用“除R取余”法
轉(zhuǎn)換為十六進(jìn)制數(shù):將二進(jìn)制數(shù)采用“四合一”法(即每四位分為一段)
轉(zhuǎn)換為壓縮BCD碼:將十進(jìn)制數(shù)采用“一分四”法(即每一位用四位二進(jìn)制數(shù)表示)例如:
26D=0010 0110=26BCD
2.將下列二進(jìn)制數(shù)或十六進(jìn)制數(shù)分別轉(zhuǎn)換為十進(jìn)制數(shù)。
(1)10110110B (2)10100101B (3)A8H (4)B5.62H
答:按位權(quán)展開法進(jìn)行求解。
(1)
(2)
(3)
(4)
10110110B
10100101B
A8H
B5.62H
十進(jìn)制數(shù)
182
165
168
181.3828125
例如:
(1) 10110110B = 1×27+1×25+1×24+1×22+1×21 = 182D
(3) A8H = A×16+8 = 10×16+8 = 168 D
3.寫出下列帶符號(hào)十進(jìn)制數(shù)的原碼、反碼、補(bǔ)碼表示(采用8位二進(jìn)制數(shù))。
(1)+28 (2)+75 (3)-38 (4)-119
答:(1) +28 [28]原=0001 1100 ; [28]反=0001 1100 ; [28]補(bǔ)=0001 1100
(2) +75 [75]原=0100 1011 ; [75]反=0100 1011 ; [75]補(bǔ)=0100 1011
(3) -38 [-38]原=1010 0110 ; [-38]反=1101 1001 ; [-38]補(bǔ)=1101 1010
(4) -119 [-119]原=1111 0111 ; [-119]反=1000 1000 ; [-119]補(bǔ)=1000 1001
4. 已知下列補(bǔ)碼求出其真值。
(1)97H (2)3FH (3)3C2AH (4)8B4CH
答:解法:先用[X]補(bǔ) 最高位確定真值的符號(hào),然后求[X]反,再加1得出X,最后若需要將其轉(zhuǎn)換為十進(jìn)制數(shù),可以將十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)。
(1) [X]補(bǔ) = 97H = 10010111B,符號(hào)位為1,X是負(fù)數(shù),[X]反 =[0010111] 補(bǔ)= [1101000]反,[X] 原=-([X]反+1) = -([1101000]反+1) =([1101001] 原) ,X = -69H = -105D
(2) [X]補(bǔ) = 3FH = 00111111B,符號(hào)位為0,X是正數(shù),X =[X]補(bǔ) = 3FH = 63D
(3) [X]補(bǔ) = 3C2AH = 0011110000101010B,符號(hào)位為0,X是正數(shù),X = 3C2A H
(4) [X]補(bǔ) = 8B4CH = 1000101101001100B,符號(hào)位為1,X是負(fù)數(shù),
[X]原 = -111010010110011B, X = -74B4H
5. 按照字符所對(duì)應(yīng)的ASCII碼值,查表寫出下列字符的ASCII碼。
K、b、good、*、$、 ESC、LF、CR、
答:
K
b
good
*
$
ESC
LF
CR
4BH
62H
676F6F64H
2AH
24H
1BH
0AH
0DH
五、簡答題
1. 常見的微機(jī)硬件結(jié)構(gòu)由哪些部分組成?各部分主要功能和特點(diǎn)是什么?
答:常見的微機(jī)硬件結(jié)構(gòu)組成部分有:中央處理機(jī)、存儲(chǔ)器、系統(tǒng)總線、接口電路、主機(jī)板及I/O設(shè)備等部件。
主要組成部件的功能和特點(diǎn)分析如下:
(1) 中央處理器CPU:是微型計(jì)算機(jī)部件,它包含運(yùn)算器、控制器、寄存器組及總線接口等部件。它負(fù)責(zé)對(duì)系統(tǒng)的各模塊進(jìn)行統(tǒng)一的協(xié)調(diào)和控制。
(2) 主存儲(chǔ)器:是微型計(jì)算機(jī)中存儲(chǔ)程序、原始程序、中間結(jié)果和最終結(jié)果等各種信息的部件??煞譃殡S機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)。
(3) 系統(tǒng)總線:是CPU與其他部件之間傳輸數(shù)據(jù)、地址和控制信息的公共通道。各部件直接用系統(tǒng)總線相連,信號(hào)通過總線相互傳輸。根據(jù)傳輸內(nèi)容不同,可以分成數(shù)據(jù)總線、地址總線和控制總線。
(4) 輸入/輸出接口電路:也成為I/O電路。是微型計(jì)算機(jī)與外部設(shè)備交換信息的橋梁。由寄存器組、專用存儲(chǔ)器和控制電路等組成。
(5) 主機(jī)板:由CPU、RAM、ROM、I/O接口電路及系統(tǒng)總線等部件組成的計(jì)算機(jī)裝置稱為主機(jī)。主機(jī)的主體是主機(jī)板,CPU就安裝在它上面,主機(jī)板上有內(nèi)存插槽、總線擴(kuò)展槽、串行/并行接口、各種跳線和一些輔助電路等硬件。
(6) 外存儲(chǔ)器:使用最多的是磁盤存儲(chǔ)器(軟盤、硬盤)和光盤存儲(chǔ)器。外存儲(chǔ)器容量大,保存的信息不會(huì)丟失。
(7) 輸入/輸入設(shè)備:是微型計(jì)算機(jī)系統(tǒng)與外部進(jìn)行通信聯(lián)系的主要裝置。常用的有鍵盤、鼠標(biāo)、顯示器、打印機(jī)和掃描儀等。
2. 計(jì)算機(jī)中有哪些常用的計(jì)數(shù)制?如何進(jìn)行數(shù)制之間的轉(zhuǎn)換?
答:數(shù)值數(shù)據(jù)經(jīng)常用二進(jìn)制、十進(jìn)制、八進(jìn)制和十六進(jìn)制;字符數(shù)據(jù)使用ASCII碼;表示十進(jìn)制數(shù)字用BCD碼。
(1) 十進(jìn)制轉(zhuǎn)換為二進(jìn)制:整數(shù)部分連續(xù)除以2后“倒取余”,小數(shù)部分連續(xù)乘以2后“正取整”。
(2) 二進(jìn)制轉(zhuǎn)換為十進(jìn)制:將二進(jìn)制數(shù)按權(quán)展開即可。
(3) 二進(jìn)制與八進(jìn)制之間的轉(zhuǎn)換:將3位二進(jìn)制一組對(duì)應(yīng)1位八進(jìn)制數(shù)。
(4) 二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換:將4位二進(jìn)制一組對(duì)應(yīng)1位十六進(jìn)制數(shù)。
3.如何判斷數(shù)據(jù)運(yùn)算的溢出?
答:“溢出”的概念:當(dāng)運(yùn)算結(jié)果超出了結(jié)果單元所能表示的數(shù)值范圍(即用原碼表示的-2n-1 > X±Y ≥ +2n-1范圍)時(shí),會(huì)產(chǎn)生錯(cuò)誤結(jié)果。這種現(xiàn)象稱為“溢出”。
“溢出”與數(shù)的表示方法有關(guān),因而“溢出”的判別方法也不同。在補(bǔ)碼運(yùn)算中,有符號(hào)數(shù)常用“雙進(jìn)位位”法判別(即:最高位與次高位都產(chǎn)生進(jìn)位表明運(yùn)算有“溢出”),無符號(hào)數(shù)值要運(yùn)算有進(jìn)位或借位就表明運(yùn)算有“溢出”。
4. ASCII碼和BCD碼有哪些特點(diǎn)?其應(yīng)用場(chǎng)合是什么?
答:ASCII碼的特點(diǎn)為:每個(gè)字符用7位二進(jìn)制數(shù)表示,總共有128個(gè)字符;ASCII碼表中的英文字母和數(shù)字都是按順序排列;128個(gè)字符包含94種信息碼和34種功能碼兩大類; ASCII碼用于表示英文字母的大小寫、數(shù)字、專用字符和控制字符,ASCII碼的最高位用于奇偶校驗(yàn)等場(chǎng)合。
BCD碼有壓縮BCD碼和非壓縮BCD碼的兩種表示形式。其特點(diǎn)為:它是一種有權(quán)碼,BCD碼采用4位二進(jìn)制數(shù)表示1位十進(jìn)制數(shù),自左至右每一位對(duì)應(yīng)的位權(quán)是:8、4、2、1;簡單直觀,每個(gè)代碼符合二進(jìn)制和十進(jìn)制的轉(zhuǎn)換規(guī)則;不允許出現(xiàn)1010B~1111B 中的任一種6個(gè)代碼。用于進(jìn)行十進(jìn)制數(shù)的表示和計(jì)算等場(chǎng)合。
本章重點(diǎn)題目:
一、4.;2.;6.; 8.
二、3.;7.
三、1.;2.;3.; 6.
四、2.(1).(2).(3).(4);3.(2).(3);4.(1).(2)
五、2.
第2章 典型微處理器
一、選擇題
1. 在執(zhí)行部件EU中實(shí)現(xiàn)數(shù)據(jù)加工與處理的功能部件是( )。 C
A. 數(shù)據(jù)暫存器 B. 數(shù)據(jù)寄存器 C. ALU D.EU控制電路
2. 以下不屬于總線接口部件BIU中功能部件的是( )。 A
A. 地址寄存器 B. 地址加法器 C.段寄存器 D.指令隊(duì)列緩沖器
3. 可用作堆棧指針寄存器的是( )。 C
A. SI B. DI C. SP D. DX
4. 堆棧操作中用于指示棧頂基址的寄存器是( )。 C
A. SS B. SP C. BP D. CS
5. 指令指針寄存器IP中存放的內(nèi)容是( )。 C
A. 指令 B. 操作數(shù) C. 指令地址 D. 操作數(shù)地址
6. 8086最大和最小工作模式的主要差別是( )。 D
A.數(shù)據(jù)總線的位數(shù)不同 B.地址總線的位數(shù)不同
C.I/O端口數(shù)的不同 D.單處理器與多處理器的不同
二、填空題:
1. 8086的內(nèi)部結(jié)構(gòu)由_EU_和_BIU_組成,前者功能是_執(zhí)行指令_,后者功能是_總線操作_。
2. 8086有 20 條地址線,可直接尋址 1MB 容量的內(nèi)存空間,其物理地址范圍是00000H~FFFFFH 。
3. 8086的指令隊(duì)列作用是 預(yù)取指令 ,其長度是 6個(gè) 字節(jié)。
4. 8086標(biāo)志寄存器共有_9_個(gè)標(biāo)志位,分為_6_個(gè)_狀態(tài)_標(biāo)志位和_3_個(gè)_控制_標(biāo)志位。
5. 8086為訪問1MB內(nèi)存空間,將存儲(chǔ)器進(jìn)行_分段_管理;其_物理_地址是唯一的;偏移地址是指_相對(duì)段基地址的偏移量_;邏輯地址常用于_程序中_。
6. 邏輯地址為2100H:0180H時(shí),其物理地址是_21180H_,段地址是_2100H_,偏移量是_0180H_。
7. 時(shí)鐘周期是指_CPU基本時(shí)間計(jì)量單位_,總線周期是指_一次總線操作時(shí)間_,總線操作是指_CPU經(jīng)外部總線對(duì)存儲(chǔ)器或I/O端口進(jìn)行一次信息輸入和輸出的過程_。
8. 8086工作在最大方式時(shí)CPU引腳MN/-MX應(yīng)接_地_;最大和最小工作方式的應(yīng)用場(chǎng)合分別是_多處理器和單處理器系統(tǒng)_。
三、判斷題
1. 8086訪問內(nèi)存的20位物理地址是在BIU中由地址加法器實(shí)現(xiàn)的。 ( )√
2. 若計(jì)算結(jié)果為0,則標(biāo)志寄存器的ZF=0. ( )×
3. IP中存放的是正在執(zhí)行的指令偏移地址。 ( )×
4. 邏輯地址是在書寫匯編程序中用到的操作數(shù)存儲(chǔ)地址。 ( )√
5. 從內(nèi)存單元偶地址開始存放的數(shù)據(jù)稱為規(guī)則字。 ( ) √
6. 指令執(zhí)行中插入T1和TW是為了解決CPU與外設(shè)之間的速度差異。 ( )×
7. 8086系統(tǒng)復(fù)位后重新啟動(dòng)時(shí)從內(nèi)存的FFFF0H地址處開始執(zhí)行。 ( )√
四、簡答題
1. 8086系統(tǒng)中的存儲(chǔ)器分為幾個(gè)邏輯段?每個(gè)段寄存器的作用是什么?
答:8086CPU將1MB的存儲(chǔ)空間分成若干個(gè)邏輯段來進(jìn)行管理:每個(gè)邏輯段最小為16B,最大為64KB。最多可分成64K個(gè)邏輯段,最少可分成16個(gè)邏輯段。
4個(gè)16位的段寄存器用來存放每一個(gè)邏輯段的段起始地址:CS中為代碼段的起始地址;DS中為數(shù)據(jù)段的起始地址;SS中為堆棧段的起始地址;ES中為附加段的起始地址。
2. I/O端口有哪兩種編址方式?8086最大I/O尋址空間是多少?
答:I/O端口的兩種編址方式分別為:統(tǒng)一編址和獨(dú)立編址。8086最大I/O尋址空間是64KB。
3. 8086的最大和最小工作模式的主要區(qū)別是什么?如何進(jìn)行控制?
答:兩種模式的主要區(qū)別是:
8086工作在最小模式時(shí),系統(tǒng)只有一個(gè)微處理器,且系統(tǒng)所有的控制信號(hào)全部由8086 CPU提供;在最大模式時(shí),系統(tǒng)由多個(gè)微處理器/協(xié)處理器構(gòu)成的多機(jī)系統(tǒng),控制信號(hào)通過總線控制器產(chǎn)生,且系統(tǒng)資源由各處理器共享。
8086CPU工作在哪種模式下通過CPU的第33條引腳MN/來控制:MN/=1,系統(tǒng)就處于最小工作模式;MN/=0,系統(tǒng)處于最大工作模式。
5. 簡述Pentium微處理器的內(nèi)部主要部件的功能。
答:Pentium微處理器的主要部件包括總線接口部件、指令高速緩存器、數(shù)據(jù)高速緩存器、指令預(yù)取部件與轉(zhuǎn)移目標(biāo)緩沖器、寄存器組、指令譯碼部件、具有兩條流水線的整數(shù)處理部件(U流水線和V流水線)、以及浮點(diǎn)處理部件FPU等。
各主要部件的功能分析如下:
(1)整數(shù)處理部件:U流水線和V流水線都可以執(zhí)行整數(shù)指令,U流水線還可執(zhí)行浮點(diǎn)指令。因此能夠在每個(gè)時(shí)鐘周期內(nèi)同時(shí)執(zhí)行兩條整數(shù)指令。
(2)浮點(diǎn)處理部件FPU:高度流水線化的浮點(diǎn)操作與整數(shù)流水線集成在一起。微處理器內(nèi)部流水線進(jìn)一步分割成若干個(gè)小而快的級(jí)段。
(3)獨(dú)立的數(shù)據(jù)和指令高速緩存Cache:兩個(gè)獨(dú)立的8KB指令和8KB數(shù)據(jù)Cache可擴(kuò)展到12KB,允許同時(shí)存取,內(nèi)部數(shù)據(jù)傳輸效率更高。兩個(gè)Cache采用雙路相關(guān)聯(lián)的結(jié)構(gòu),每路128個(gè)高速緩存行,每行可存放32B。數(shù)據(jù)高速緩存兩端口對(duì)應(yīng)U、V流水線。
(4)指令集與指令預(yù)?。褐噶铑A(yù)取緩沖器順序地處理指令地址,直到它取到一條分支指令,此時(shí)存放有關(guān)分支歷史信息的分支目標(biāo)緩沖器BTB將對(duì)預(yù)取到的分支指令是否導(dǎo)致分支進(jìn)行預(yù)測(cè)。
(5)分支預(yù)測(cè):指令預(yù)取處理中增加了分支預(yù)測(cè)邏輯,提供分支目標(biāo)緩沖器來預(yù)測(cè)程序轉(zhuǎn)移。
五、分析設(shè)計(jì)題
1. 在內(nèi)存有一個(gè)由10個(gè)字節(jié)組成的數(shù)據(jù)區(qū),起始地址為1200H:0010H。計(jì)算出該數(shù)據(jù)區(qū)在內(nèi)存的首末單元的實(shí)際地址。
答:邏輯地址1200H:0010H對(duì)應(yīng)的物理地址為PA=1200H×10H+0010H= 12010H,即該數(shù)據(jù)區(qū)在內(nèi)存中的首單元的物理地址為12010H;因?yàn)榇鎯?chǔ)空間中每個(gè)字節(jié)單元對(duì)應(yīng)一個(gè)地址,所以10個(gè)字節(jié)對(duì)應(yīng)10個(gè)地址,則該數(shù)據(jù)區(qū)在內(nèi)存中的末單元的物理地址PA = 12010H+10D = 12010H+0AH = 1201AH。
2. 有兩個(gè)16位的字?jǐn)?shù)據(jù)32D7H和2E8FH,在存儲(chǔ)器中的物理地址分別為10210H和10212H,試畫出它們的存儲(chǔ)示意圖。
地址
存儲(chǔ)空間
10210H
D7H
10211H
32H
.
.
.
10212H
8FH
10213H
2EH
答:
3. 內(nèi)存中有一個(gè)程序段,保存位置為(CS)=13A0H,(IP)=0110H,當(dāng)計(jì)算機(jī)執(zhí)行該程序段指令時(shí),實(shí)際啟動(dòng)的物理地址是多少?
答:邏輯地址(CS):(IP)= 13A0H:0110H,計(jì)算出對(duì)應(yīng)物理地址PA= (CS)×10H+(IP)= 13A0H×10H+0110H = 13B10H
本章重點(diǎn)題目:
一、2.;3.;5.;6.
二、4.;8.
四、2.
五、1.
三、2.;3.;5.;6.; 7.
第3章 指令系統(tǒng)和尋址方式
一、選擇題
1. 寄存器間接尋址方式中,要尋找的操作數(shù)位于( )中。 C
A.通用寄存器 B. 段寄存器 C. 內(nèi)存單元 D.堆棧區(qū)
2. 下列傳送指令中正確的是( )。 C
A. MOV AL,BX B. MOV CS,AX C. MOV AL,CL D. MOV [BX],[SI]
3. 下列指令中錯(cuò)誤的是( )。 C
A. MOV AX,1234H B. INC BX C. SAL AX,2 D. PUSH DX
4. 設(shè)(SP)=1010H,執(zhí)行PUSH AX后,SP中的內(nèi)容為( )。 C
A. 1011H B. 1012H C. 1OOEH D. 100FH
5. 將AX清零并使CF位清零,下面指令錯(cuò)誤的是( )。 A
A. SUB AX,BX B. XOR AX,AX C. MOV AX,0 D.AND AX,0OOOH
6. 對(duì)兩個(gè)帶符號(hào)數(shù)A和B進(jìn)行比較,要判斷A是否大于B,應(yīng)采用指令( )。 B
A. JA B. JG C. JNB D. JNA
7. 已知(AL)=80H,(CL)=02H,執(zhí)行指令SHR AL,CL執(zhí)行后的結(jié)果是( )。 B
A. (AL)=40H B. (AL)=20H C. (AL)=C0H D.(AL)=E0H
二、填空題:
1. 計(jì)算機(jī)指令通常由_操作碼字段_和_操作數(shù)字段_兩部分組成;指令對(duì)數(shù)據(jù)操作時(shí).按照數(shù)據(jù)的存放位置可分為_立即數(shù)、寄存器操作數(shù)、存儲(chǔ)器操作數(shù)_。
2. 尋址的含義是指_尋找操作數(shù)的過程_;8086指令系統(tǒng)的尋址方式按照大類可分為_立即數(shù)尋址方式、寄存器尋址方式、存儲(chǔ)器尋址方式和I/O端口尋址方式_;其中尋址速度最快的是_立即數(shù)尋址_。
3. 若指令操作數(shù)保存在存儲(chǔ)器中,操作數(shù)的段地址隱含在 數(shù)據(jù)段 DS寄存器或堆棧段SS寄存器 中;可以采用的尋址方式有 直接尋址方式、寄存器間接尋址方式、寄存器相對(duì)尋址方式、基址變址尋址方式、相對(duì)基址變址尋址方式 。
4. 指令MOV AX,ES:[BX+O1OOH]中,源操作數(shù)位于_物理地址為ES*10H+BX+0100H的存儲(chǔ)單元;讀取的是_附加數(shù)據(jù)ES_段的存儲(chǔ)單元內(nèi)容。
5. 堆棧是一個(gè)特殊的_存儲(chǔ)器區(qū)域_,其操作是以_2字節(jié)單元_為單位按照_先進(jìn)后出_原則來處理;采用_SP_指向棧頂?shù)刂?,入棧時(shí)地址變化為_SP←(SP)-2_。
6. I/O端口的尋址有_直接端口尋址和間接端口尋址_兩種方式;采用8位數(shù)時(shí),可訪問的端口地址為_0~255_;采用16位數(shù)時(shí),可訪問的端口地址為_0~65535_。
三、分析計(jì)算題
1. 設(shè)(DS)=2000H,(ES)= 2100H,(SS)= 1500H,(SI)= 00A0H,(BX)= 0100H,(BP)= 0010H,數(shù)據(jù)段ARY的位移量為0050H,試指出下列各指令中源操作數(shù)的尋址方式,對(duì)于內(nèi)存單元的操作數(shù)計(jì)算出其物理地址。
(1) MOV AX,2345H (2) MOV AX,BX
(3) MOV AX,[1000H] (4) MOV AX,ARY
(5) MOV AX,[BX] (6) MOV AX,ES:[BX]
(7) MOV AX,[BP] (8) MOV AX,20H[BX]
(9) MOV AX,[SI] (10) MOV AX,[BX][SI]
(11) MOV AX,ARY[BP][SI] (12) MOV AX,ES:[BX][SI]
(13) MOV AX,ES:ARY[BX] (14) MOV AX,[BP][SI]
答:
(1) MOV AX,2345H
立即尋址,源操作數(shù)直接放在指令中
(2) MOV AX,BX
寄存器尋址,源操作數(shù)放在寄存器BX中
(3) MOV AX,[0100H]
直接尋址,EA = 0100H,
PA =(DS)×10H+EA = 2000H×10H+0100H = 20100H
(4) MOV AX,ARY
直接尋址,EA = [ARY] = 0050H,
PA =(DS)×10H+EA = 2000H×10H+0050H = 20050H
(5) MOV AX,[BX]
寄存器間接尋址,EA =(BX)= 0100H,
PA =(DS)×10H+EA = 2000H×10H+0100H = 20100H
(6) MOV AX,ES:[BX]
寄存器間接尋址,EA =(BX)= 0100H,
PA =(ES)×10H+EA = 2100H×10H+0100H = 21100H
(7) MOV AX,[BP]
寄存器間接尋址,EA =(BP)= 0010H,
PA =(SS)×10H+EA = 1500H×10H+0010H = 15010H
(8) MOV AX,20H[BX]
寄存器相對(duì)尋址,EA =(BX+20H)= 0100H+20H=0120H,
PA =(DS)×10H+EA = 2000H×10H+0120H = 20120H
(9) MOV AX,[SI]
寄存器間接尋址,EA =(SI)= 00A0H,
PA =(DS)×10H+EA = 2000H×10H+00A0H = 200A0H
(10) MOV AX, [BX][SI]
基址變址尋址,EA =(BX)+(SI) = 0100H+00A0H = 01A0H,
PA =(DS)×10H+EA = 2000H×10H+01A0H = 201A0H
(11) MOV AX,ARY[BP][SI]
相對(duì)基址變址尋址,EA = [ARY]+(BP)+(SI)= 0050H+0010H+00A0H = 0100H,
PA =(SS)×10H+EA = 1500H×10H+0100H = 15100H
(12) MOV AX,ES:[BX][SI]
相對(duì)基址變址尋址,EA =(BX)+(SI)= 0100H+00A0H = 01A0H,
PA =(ES)×10H+EA = 2100H×10H+01A0H = 211A0H
(13) MOV AX,ES:ARY[BX]
相對(duì)基址變址尋址,EA =[ARY]+(BX)=0050H+0100H=0150H,
PA =(ES)×10H+EA =2100H×10H+0150H = 21150H
(14) MOV AX,[BP][SI]
基址變址尋址,EA =(BP)+(SI)= 0010H+00A0H = 00B0H,
PA = (SS)×10H+EA = 1500H×10H+0100H = 15100H
2. 已知寄存器及存儲(chǔ)器單元內(nèi)容:(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(2010lH)=34H,(20102H)=56H,(20103H)=78H,(21200H)=90H,(21201H)=2AH,(21202H)=3BH,(21203H)=4CH。
分析下列指令中源操作數(shù)字段的尋址方式,計(jì)算操作數(shù)存放的物理地址及指令執(zhí)行后AX寄存器中保存的內(nèi)容:
(1) MOV AX,12O0H (2) MOV AX,BX
(3) MOV AX,[1200H] (4) MOV AX,[BX]
(5) MOV AX,1100H[BX] (6) MOV AX,[BX][SI]
答:
(1) MOV AX,1200H ;立即數(shù)尋址。指令執(zhí)行后,(AX)= 1200H
(2) MOV AX,BX ;寄存器尋址。指令執(zhí)行后,(AX)=(BX)= 0100H
(3) MOV AX,[1200H] ;存儲(chǔ)器直接尋址。
EA = 1200H,PA =(DS)×10H+EA = 2000H×10H+1200H = 21200H,
執(zhí)行后,(AX)= 2A90H
(4) MOV AX,[BX] ;寄存器間接尋址。
EA =(BX)= 0100H,
PA =(DS)×10H+EA = 2000H×10H+0100H = 20100H,
執(zhí)行后,(AX)= 3412H
(5) MOV AX,1100H[BX] ;寄存器相對(duì)尋址。
EA =(BX)+1100H = 0100H+1100H = 1200H,
PA =(DS)×10H+EA = 2000H×10H+1200H = 21200H,執(zhí)行后,(AX)=2A90H
(6) MOV AX,[BX][SI] ;基址變址尋址。
EA =(BX)+(SI)= 0100H+0002H = 0102H,
PA =(DS)×10H+EA = 2000H×10H+0102H = 20102H,執(zhí)行后,(AX)= 7856H
4. 下列程序段執(zhí)行完后,BX寄存器中的內(nèi)容是多少?
MOV CL, 3
MOV BX,0B7H
ROL BX,1
ROR BX,CL
答:程序段執(zhí)行中
MOV CL, 3 ;(CL)=3
MOV BX,0B7H ; (BX) = 0B7H = 10110111
ROL BX,1 ; 循環(huán)左移一次,(BX) = 01101111
ROR BX,CL ; 循環(huán)右移三次,(BX) = 11101101 = EDH
程序段執(zhí)行完后,BX寄存器中的內(nèi)容為(BX)=EBH
4. 已知(AX)=75A4H,標(biāo)志位CF=1,分別寫出下列指令執(zhí)行后的結(jié)果:
(1) ADD AX,08FFH (2) INC AX
(3) SUB AX,4455H (4) AND AX,OFFFH
(5) OR AX,0101H (6) SAR AX,1
(7) ROR AX,1 (8) ADC AX,5
答:
(1) ADD AX,08FFH ; (AX)= 7EA3H CF=0
(2) INC AX ; (AX)= 75A5H CF=1
(3) SUB AX,4455H ; (AX)= 314FH CF=0
(4) AND AX,0FFFH ; (AX)= 05A4H CF=0
(5) OR AX,0101H ; (AX)= 75A5H CF=0
(6) SAR AX,1 ; (AX)= 3AD2H CF=0
(7) ROR AX,1 ; (AX)= 3AD2H CF=0
(8) ADC AX,5 ; (AX)= 75AAH CF=0
……
78H
56H
34H
12H
……
5. 給定(SS)=3000H,(SP)=1020H,(AX)=1234H,(DX)=5678H。執(zhí)行下列程序段,分析每條指令執(zhí)行后寄存器的內(nèi)容和堆棧存儲(chǔ)內(nèi)容的變化情況:
SP=101CH
SP=101EH
SP=1020H
DX
5678
AX
1234
BX
5678
CX
1234
PUSH AX
PUSH DX
POP BX
POP CX
答:
壓入堆棧指令PUSH完成的操作是“先移后入”,即先將堆棧指針 SP 減2,然后將操作數(shù)壓入 SP 指定的棧頂中。
彈出堆棧指令 POP完成的操作是“先出后移”,即先將堆棧指針 SP 所指示的棧頂存儲(chǔ)單元的地址彈出到操作數(shù)中,然后將堆棧指針 SP加2。
PUSH AX ;(AX)=1234H,(SP)=101EH,(3101EH)=1234H
PUSH DX ;(DX)=5678H,(SP)=101CH,(3101CH)= 5678H
POP BX ;(BX)=5678H,(SP)=101EH
POP CX ;(CX)=1234H,(SP)=1020H
6. 分析下面程序段的功能,執(zhí)行該程序段后 AX 寄存器中的內(nèi)容是多少?
MOV AX,0102H
MOV BX,0010H
MOV CL,2
SHL BX,CL
ADD AX,BX
答:
MOV AX,0102H ; (AX) = 0102H
MOV BX,0010H ; (BX) = 0010H = 0000 0000 0001 0000
MOV CL,2 ; (CL) = 02H
SHL BX,CL ; 邏輯左移二次,(BX) = 0000 0000 0100 0000 =0040H
ADD AX,BX ; (AX) ← (AX)+(BX) =0102H + 0040H =0142H
執(zhí)行該程序段后 AX 寄存器中的內(nèi)容是0142H。
四、分析設(shè)計(jì)題:
1. 根據(jù)以下要求寫出相應(yīng)的8086指令。
(1)把內(nèi)存區(qū)域BUF數(shù)據(jù)區(qū)的偏移地址送入BX寄存器中。
(2)把BX和AX寄存器的內(nèi)容相加,結(jié)果存入AX寄存器中。
(3)用位移量1200H的直接尋址方式把存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)與立即數(shù)3210H相加,結(jié)果送回該存儲(chǔ)器中。
(4)用寄存器BX和位移量2100H的變址尋址方式把存儲(chǔ)器中的一個(gè)字?jǐn)?shù)據(jù)和CX寄存器中的內(nèi)容相加,結(jié)果送回存儲(chǔ)器。
(5)用BX和SI的基址變址尋址方式,把存儲(chǔ)器中的一個(gè)字節(jié)數(shù)據(jù)與AL內(nèi)容相加,結(jié)果保存在AL寄存器中。
答: (1) LEA BX,BUF
(2) ADD AX,BX
(3) ADD WORD PTR [1200H],3210H
(4) ADD 2100[BX],CX
(5) ADD AL,[BX][SI]
2. 設(shè)堆棧寄存器(SS)=2250H。堆棧指示器(SP)=0140H,若在堆棧中存入5個(gè)字?jǐn)?shù)據(jù),則SS、SP的內(nèi)容各是多少? 如果又取出2個(gè)字?jǐn)?shù)據(jù),SS、SP的內(nèi)容各是多少?
答:堆棧中存入5個(gè)數(shù)據(jù):(SS)=2250H、(SP)=0136H
又取出2個(gè)字?jǐn)?shù)據(jù):(SS)=2250H、(SP)=013AH
3. 設(shè)寄存器AX、BX中保存帶符號(hào)數(shù),寄存器CX、DX中保存無符號(hào)數(shù),寫出實(shí)現(xiàn)以下功能的指令或程序段。
(1) 若(CX)<(DX),程序轉(zhuǎn)移到NEXT1處。
(2) 若(AX)>(BX),程序轉(zhuǎn)移到NEXT2處。
(3) 若(CX)=0,程序轉(zhuǎn)移到NEXT3處。
(4) 若AX中內(nèi)容為負(fù),程序轉(zhuǎn)移到NEXT4處。
答:(1)CMP CX,DX ;將CX中數(shù)據(jù)與DX中數(shù)據(jù)進(jìn)行比較
JB NEXT1 ;若低于則轉(zhuǎn)移到NEXT1
(2)CMP AX,BX ;將AX中數(shù)據(jù)與BX中數(shù)據(jù)進(jìn)行比較
JG NEXT2 ;若大于則轉(zhuǎn)移到NEXT2
(3)CMP CX,0 ;將CX中數(shù)據(jù)與0進(jìn)行比較
JE NEXT3 ;若結(jié)果為0則轉(zhuǎn)移到NEXT3
(或用 JCXZ NEXT3 指令實(shí)現(xiàn))
(4)TEST AX,8000H ;測(cè)試符號(hào)位
JNZ NEXT4 ;若結(jié)果為負(fù)則轉(zhuǎn)移到NEXT4
(或 ADD AX,0
JS NEXT4 實(shí)現(xiàn))實(shí)現(xiàn)方法不唯一。
4. 現(xiàn)有兩個(gè)雙倍精度字?jǐn)?shù)據(jù)1234FEDCH和11238765H,分別存放在數(shù)據(jù)段中從1000H和2000H開始的存儲(chǔ)單元中,低位在前,高位在后。要求兩數(shù)相加之后所得的和放在從1000H開始的內(nèi)存單元中,設(shè)計(jì)該程序段。
答:
程序段設(shè)計(jì)如下:
;3_4_1.ASM
MOV SI,2000H ;SI指向2000H
MOV DI,1000H ;DI指向1000H
CLC ;CF=0
MOV CX,4 ;CX=4,循環(huán)相加4次
LL: MOV AL,[SI] ;取數(shù)
ADC AL,[DI] ;相加
MOV [DI],AL ;保存
INC SI ;SI增1
INC DI ;DI增1
LOOP LL ;CX減1,不為0,轉(zhuǎn)LL
MOV AX,0
ADC AX,0
MOV [DI],AX
(答案不唯一)
本章重點(diǎn)題目:
一、3.;7.
二、5.;6.
三、1.(3).(4).(6).(7);2.(3).(4).(5).(6)
四、3.
第4章 匯編語言程序設(shè)計(jì)
一、選擇題
1. 匯編語言程序中可執(zhí)行的指令位于( )中。 D
A. 數(shù)據(jù)段 B. 附加數(shù)據(jù)段 C. 堆棧段 D. 代碼段
2. 匯編語言語句中標(biāo)號(hào)和變量有規(guī)定的屬性,以下內(nèi)容不是屬性的是( )。 B
A. 段屬性 B. 地址屬性 C. 偏移屬性 D. 類型屬性
4. DOS系統(tǒng)功能調(diào)用的子功能號(hào)存放在寄存器( )中。 C
A. AL B. AH C. DL D. DH
5. DOS系統(tǒng)功能調(diào)用中,從鍵盤讀取一個(gè)字符并回顯的是( )。 A
A. 01H B. 02H C. 09H D. 0AH
6. 循環(huán)程序設(shè)計(jì)的核心問題是( )。 D
A. 循環(huán)的控制 B. 循環(huán)結(jié)構(gòu)的選擇
C. 循環(huán)參數(shù)初始的設(shè)置 D. 循環(huán)控制參數(shù)的修改
二、填空題
1. 完整的匯編語句包括_名字、操作符、操作數(shù)、和注釋_4個(gè)字段。
2. 標(biāo)號(hào)和變量應(yīng)具備的3個(gè)屬性分別是段屬性、偏移屬性和類型屬性。
3. 計(jì)算機(jī)中的指令通??煞譃?CPU指令 、 偽指令 和 宏指令 。
4. DOS功能調(diào)用可完成對(duì)_文件、設(shè)備、內(nèi)存_的管理;BIOS的主要功能是_外設(shè)的控制;如系統(tǒng)加電自檢、引導(dǎo)裝入及對(duì)鍵盤、磁盤、顯示器、打印機(jī)、異步串行通信口等的控制_。
5. 給定以下程序段,在每條指令的右邊寫出指令的含義和操作功能,指出該程序段完成的功能及運(yùn)行結(jié)果:
MOV AX,0 ;AX賦值0
MOV BX,1 ;BX賦值1
MOV CX,5 ;CX賦值5
LP: ADD AX,BX ;AX+BX,結(jié)果送AX
ADD BX,2 ;BX+2,結(jié)果送BX
LOOP LP ;CX-1送CX;若CX≠0,轉(zhuǎn)LP
(1) 程序段完成的功能是_ _。
(2) 程序運(yùn)行后:(AX)=_25_;(BX)= _11_;(CX)= _0_。
三、判斷題
1. 偽指令是在匯編中用于管理和控制計(jì)算機(jī)相關(guān)功能的指令。 ( )×
2. 程序中的“$”可指向下一個(gè)所能分配存儲(chǔ)單元的偏移地址。 ( )√
3. 宏指令的引入是為了增加匯編程序的功能。 ( )√
4. 多重循環(huán)的內(nèi)循環(huán)要完整地包含在外循環(huán)中,可嵌套和并列。 ( )√
5. 子程序結(jié)構(gòu)縮短了程序的長度,節(jié)省了程序的存儲(chǔ)空間。 ( )√
四、簡答題
1. 完整的匯編源程序應(yīng)該由哪些邏輯段組成?各邏輯段的主要作用是什么?
答: 完整的匯編源程序應(yīng)該由數(shù)據(jù)段、堆棧段、代碼段邏輯段組成。各邏輯段的主要作用是存放數(shù)據(jù)變量及其預(yù)置初值、保存中斷和子程序的斷點(diǎn)和參數(shù)傳遞、存放程序執(zhí)行的代碼。
2.簡述在機(jī)器上建立、編輯、匯編、連接、運(yùn)行、調(diào)試匯編語言源程序的過程和步驟。
答: 在機(jī)器上建立:為源程序起一個(gè)有意義的文件名字,并創(chuàng)建成文本文件;匯編:通過匯編程序ASM.EXE或MASN.EXE,將源程序會(huì)變成機(jī)器語言目標(biāo)程序.OBJ;連接:運(yùn)用連接程序LINK.EXE,將目標(biāo)程序.OBJ連接生成執(zhí)行程序.EXE;運(yùn)行:在DOS狀態(tài)下,直接運(yùn)行執(zhí)行程序;調(diào)試:運(yùn)用調(diào)試程序DEBUG.EXE將執(zhí)行程序跳入調(diào)試界面狀態(tài),并進(jìn)行斷點(diǎn)設(shè)置調(diào)試運(yùn)行或單步調(diào)試運(yùn)行操作。
3.什么是偽指令?程序中經(jīng)常使用的偽指令有哪些?簡述其主要功能。
答:偽指令是發(fā)送給匯編程序的命令。
程序中經(jīng)常使用的偽指令有:數(shù)據(jù)定義、符號(hào)定義、段定義、過程定義、結(jié)構(gòu)定義、模塊定義與連接、程序計(jì)數(shù)器$和起點(diǎn)定義ORG。
其主要功能:數(shù)據(jù)定義為變量及其類型分配存儲(chǔ)單元,并賦予初值;符合定義給一個(gè)符號(hào)重新命名;段定義指定邏輯段的名稱、范圍、斷的定位類型、組合類型和類別;過程定義為程序段定義成過程,并賦予過程名字,以便用CALL指令調(diào)用;結(jié)構(gòu)定義用于相互關(guān)聯(lián)的數(shù)據(jù)定義;模塊定義與連接用NAME為源程序匯編后的目標(biāo)程序指定模塊名,以便連接該目標(biāo)模塊,并生成執(zhí)行程序文件;$在匯編過程中,用于存儲(chǔ)單元分配計(jì)數(shù)器,該計(jì)數(shù)器可在指令操作數(shù)表達(dá)式中引用;ORG為數(shù)據(jù)變量和程序段指定起始位置。
4.什么是宏指令?宏指令在程序中如何被調(diào)用?
答: 宏指令是代表某功能的一段源程序。宏指令在程序中在源程序中,通過宏名字(即宏指令名)進(jìn)行調(diào)用。
五、分析設(shè)計(jì)題
1. 內(nèi)存BUF單元中定義有10個(gè)字?jǐn)?shù)據(jù),找出其中的最大值和最小值,并將最大值和最小值存放到指定的存儲(chǔ)單元max和min中,畫出流程圖并編程實(shí)現(xiàn)。
答:按照本題要求,10個(gè)字?jǐn)?shù)據(jù)的首址為BUF內(nèi)存單元,數(shù)據(jù)個(gè)數(shù)為10用CN指向,然后找出其中最大值并保存在max單元中,找出其中最小值并保存在min單元中,采用循環(huán)程序來完成該功能。
主程序流程圖:
START
初始化DS
數(shù)組首地址送SI
數(shù)組元素個(gè)數(shù)送CX
調(diào)用過程QZDZXS(求最大最小數(shù))
END
QZDZXS子程序流程圖:
QZDZXS
保護(hù)現(xiàn)場(chǎng)
取一個(gè)數(shù)組元素送DX
較大數(shù)存入ZD
數(shù)組指針加2調(diào)整
(AX)>(DX)
(AX)<(DX)
較小數(shù)存入ZX
恢復(fù)現(xiàn)場(chǎng)
數(shù)組元素
全部完成?
返回
N
Y
ZDZX2
ZDZX1
Y
ZDZX0
Y
N
N
參考程序設(shè)計(jì)如下:
主程序:
DATA SEGMENT
ARR DW 123,456,67,0,34,90,89,67,0,256
CN EQU ($-ARR)/2
ZD DW 0 ;最大(數(shù)組中任何數(shù)均大于AX內(nèi)容)
ZX DW 0FFFFH ;最小(數(shù)組中任何數(shù)均小于BX內(nèi)容)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX ;初始化DS
MOV SI,OFFSET ARR ;數(shù)組首地址送SI
MOV CX,CN ;數(shù)組元素個(gè)數(shù)送CX
CALL QZDZXS ;調(diào)用近過程QZDZXS(求最大最小數(shù))
MOV AH,4CH
INT 21H ;返回DOS
過程子程序:
;求最大最小數(shù)子程序名:QZDZXS
;子程序功能:求一組字?jǐn)?shù)據(jù)中的最大最小數(shù)
;入口參數(shù):數(shù)組首地址在SI中,數(shù)組個(gè)數(shù)在CX中
;出口參數(shù):最大數(shù)在ZD中,最小數(shù)在ZX中
;使用寄存器:CX、DX、SI及PSW
QZDZXS PROC NEAR
PUSH SI
PUSH DX
PUSH CX ;保護(hù)現(xiàn)場(chǎng)
ZDZX0: MOV DX,[SI] ;取一個(gè)數(shù)組元素送DX
CMP ZD,DX ;AX中內(nèi)容和DX中內(nèi)容比較
JNB ZDZX1 ;(ZD)>(DX),轉(zhuǎn)ZDZX1
MOV ZD,DX ;較大數(shù)存入ZD
ZDZX1: CMP ZX,DX ;AX中內(nèi)容和DX中內(nèi)容比較
JNA ZDZX2 ;(ZX)<(DX),轉(zhuǎn)ZDZX2
MOV ZX,DX ;較小數(shù)存入ZX
ZDZX2: ADD SI,2 ;數(shù)組指針加2調(diào)整
LOOP ZDZX0 ;循環(huán)控制
POP CX
POP DX
POP SI ;恢復(fù)現(xiàn)場(chǎng)
RET ;返回主程序
QZDZXS ENDP ;子程序定義結(jié)束
CODE ENDS ;代碼段結(jié)束
END START ;匯編結(jié)束
2. 編寫程序,計(jì)算下面函數(shù)的值:
答:此程序可采用分支結(jié)構(gòu)實(shí)現(xiàn)。根據(jù)X的取值范圍,來確定轉(zhuǎn)向那個(gè)分支。判斷過程可使用CMP指令與0和10分別進(jìn)行比較,根據(jù)結(jié)果實(shí)現(xiàn)跳轉(zhuǎn)。
X和S是兩個(gè)需要定義的變量,X中是要處理的數(shù)據(jù),S中是要保存運(yùn)算結(jié)果。參考程序段編寫如下:
DATA SEGMENT ;定義數(shù)據(jù)段
X DB 15
S DB ?
DATA ENDS
CODE SEGMENT ;定義代碼段
ASSUME DS:DATA, CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV AL,X ;將X送到AL中
TEST AL,80H ;(AL)<0嗎?
JZ LL0 ; X ≥ 0 轉(zhuǎn)LL0
SAL AL,1 ; X乘以2
JMP LL10 ;無條件轉(zhuǎn)移
LL0: CMP AL,10 ;否,(AX)<10嗎?
JG LL1 ; X ≥ 10 轉(zhuǎn)LL1
MOV BL,AL
SAL AL,1 ; X乘以3
ADD AL,BL
JMP LL10 ;無條件轉(zhuǎn)移
LL1: SAL AL,1 ; X乘以4
SAL AL,1
LL10: MOV S,AL ;將結(jié)果保存至S中
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END START ;匯編結(jié)束
注意,在比較的過程中使用的是針對(duì)帶符號(hào)數(shù)的跳轉(zhuǎn)指令,將變量χ應(yīng)該看作帶符號(hào)數(shù)。程序中還用了移位指令代替了乘法指令實(shí)現(xiàn)乘2的運(yùn)算。
3. 已知內(nèi)存數(shù)據(jù)區(qū)BLOCK單元起存放有20個(gè)帶符號(hào)字節(jié)數(shù)據(jù),分別找出其中正、負(fù)數(shù)放入指定單元保存,并統(tǒng)計(jì)正、負(fù)數(shù)的個(gè)數(shù)。
答: 此程序可采用循環(huán)與分支結(jié)合的結(jié)構(gòu)。再循環(huán)體中完成對(duì)數(shù)據(jù)區(qū)中數(shù)字的判斷,為正數(shù)時(shí),使計(jì)數(shù)器統(tǒng)計(jì)其個(gè)數(shù),而負(fù)數(shù)的個(gè)數(shù)就是數(shù)據(jù)區(qū)的數(shù)據(jù)總數(shù)減去證書的個(gè)數(shù);程序中循環(huán)次數(shù)與數(shù)據(jù)區(qū)中的