匯編語言程序設(shè)計(第四版)第1~4章【課后答案】_第1頁
匯編語言程序設(shè)計(第四版)第1~4章【課后答案】_第2頁
匯編語言程序設(shè)計(第四版)第1~4章【課后答案】_第3頁
匯編語言程序設(shè)計(第四版)第1~4章【課后答案】_第4頁
匯編語言程序設(shè)計(第四版)第1~4章【課后答案】_第5頁
已閱讀5頁,還剩94頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

匯編語言程序設(shè)計第四版

【課后習(xí)題答案】

第1章匯編語言基礎(chǔ)知識

〔習(xí)題1.1〕簡述計算機系統(tǒng)的硬件組成及各部分作用。

〔解答〕

CPU:包括運算器、控制器和寄存器組。運算器執(zhí)行所有的算術(shù)和邏輯運算;

控制器負責(zé)把指指令逐條從存儲器中取出,經(jīng)譯碼分析后向機器發(fā)出各種控制命

令,并正確完成程序所要求的功能;寄存器組為處理單元提供所需要的數(shù)據(jù)。

存儲器:是計算機的記憶部件,它用來存放程序以及程序中所涉及的數(shù)據(jù)。

外部設(shè)備:實現(xiàn)人機交換和機間的通信。

〔習(xí)題1.2]明確下列概念或符號:主存和輔存,RAM和ROM,存儲器

地址和I/O端口,KB、MB、GB和TB。

〔解答〕

主存又稱內(nèi)存是主存儲器的簡稱,主存儲器存放當(dāng)前正在執(zhí)行的程序和使用

的數(shù)據(jù),CPU可以直接存取,它由半導(dǎo)體存儲器芯片構(gòu)成其成本高、容量小、

但速度快。輔存是輔助存儲器的簡稱,輔存可用來長期保存大量程序和數(shù)據(jù),

CPU需要通過I/O接口訪問,它由磁盤或光盤構(gòu)成,其成本低、容量大,但速

度慢。

RAM是隨機存取存儲器的英語簡寫,由于CPU可以從RAM讀信息,也可

以向RAM寫入信息,所以RAM也被稱為讀寫存儲器,RAM型半導(dǎo)體存儲器

可以按地址隨機讀寫,但這類存儲器在斷電后不能保存信息;而ROM中的信息

只能被讀出,不能被修改,ROM型半導(dǎo)體通常只能被讀出,但這類存儲器斷電

-1-

后能保存信息。

存儲器由大量存儲單元組成。為了區(qū)別每個單元,我們將它們編號,于是,

每個存儲單元就有了一個存儲地址,1/0接口是由一組寄存器組成,為了區(qū)別它

們,各個寄存器進行了編號,形成I/。地址,通常稱做I/O端口。

KB是千字節(jié)、MB是兆字節(jié)、GB是吉字節(jié)和TB是太字節(jié),它們都是表示

存儲器存儲單元的單位。

〔習(xí)題1.3〕什么是匯編語言源程序、匯編程序、目標(biāo)程序?

〔解答〕

用匯編語言書寫的程序就稱為匯編語言源程序;完成匯編工作的程序就是匯

編程序;由匯編程序編譯通過的程序就是目標(biāo)程序。

〔習(xí)題1.4〕匯編語言與高級語言相比有什么優(yōu)缺點?

〔解答〕

匯編語言與高級語言相比的優(yōu)點:由于匯編語言本質(zhì)就是機器語言,它可以

直接地、有效地控制計算機硬件,因而容易產(chǎn)生運行速度快,指令序列短小的高

效目標(biāo)程序,可以直接控制計算機硬件部件,可以編寫在"時間"和"空間"兩

方面最有效的程序。

匯編語言與高級語言相比的缺點:由于與處理器密切相關(guān)導(dǎo)致通用性差、可

移植性差,匯編語言功能有限,又涉及寄存器、主存單元等硬件細節(jié),編寫匯編

語言比較繁瑣,調(diào)試起來也比較困難,編譯程序產(chǎn)生的目標(biāo)程序往往比較龐大、

程序難以優(yōu)化,運行速度慢。

〔習(xí)題1.5〕將下列十六進制數(shù)轉(zhuǎn)換為二進制和十進制表示

(1)FFH(2)0H(3)5EH

-2-

(4)EFH

(5)2EH(6)1OH(7)1FH(8)

ABH

〔解答〕

(1)FFH11111111B

255D

(2)OHOB

OD

(3)5EH1011110B

94D

(4)EFH11101111B

239D

(5)2EH101110B

46D

(6)1OH10000B

16D

(7)1FH

31D

(8)ABH10101011B

171D

〔習(xí)題1.6〕將下列十進制數(shù)轉(zhuǎn)換為BCD碼表示

(1)12(2)24(3)68

-3-

(4)127

(5)128(6)255(7)1234

(8)2458

〔解答〕

(1)1200010010

(2)2400100100

(3)6801101000

(4)127000100100111

(5)128000100101000

(6)255001001010101

(7)12340001001000110100

(8)24580010010001011000

〔習(xí)題1.7〕將下列BCD碼轉(zhuǎn)換為十進制數(shù)

(1)10010001(2)10001001(3)00110110(4)

10010000

(5)00001000(6)10010111(7)10000001(8)

00000010

〔解答〕

(1)91

(2)89

(3)36

(4)90

-4-

(5)08

(6)97

(7)81

(8)02

〔習(xí)題1.8〕將下列十進制數(shù)分別用8位二進制數(shù)的原碼、反碼和補碼表示

(1)0(2)-127(3)127

(4)-57

(5)126(6)-126(7)-128

(8)68

懈答〕

(1)0+0000000000000000000000000

-0100000001111111100000000

(2)-127111111111000000010000001

(3)127011111110111111101111111

(4)-57101011111101000011010001

(5)126011111100111111001111110

(6)-126111111101000000110000010

(7)-12810000000

(8)68010001000100010001000100

〔習(xí)題1.9)完成下列二進制數(shù)的運算

(1)1011+1001(2)1011-1001(3)1011x1001(4)10111000

+1001

-5-

(5)1011A1001(6)1011vlOOl(7)-1011(8)

1011?1001

〔解答〕

(1)1011+1001=10100

(2)1011-1001=0010

(3)1011x1001=1100011

(4)10111000^1001=10100,余數(shù)1000

(5)1011A1001=1001

(6)1011v1001=1011

(7)-1011=0100

(8)1011?1001=0010(?代表異或)

〔習(xí)題1.10〕數(shù)碼0~9、大寫字母慶~2、小寫字母a~z對應(yīng)的ASCII碼

分別是多少?ASCII碼為Odh、Oah對應(yīng)的是什么字符?

〔解答〕

數(shù)碼0~9:30H~39H

大寫字母A?Z:41H-5AH

小寫字母a~z:61H-7AH

ASCII碼為Odh、Oah分別對應(yīng)回車和換行控制字符。

〔習(xí)題1.11〕計算機中有一個"01100001"編碼,如果把它認為是無符號

數(shù),它是十進制什么數(shù)?如果認為它是BCD碼,則表示什么數(shù)?又如果它是某

個ASCII碼,則代表哪個字符?

〔解答〕

-6-

十進制無符號數(shù):01100001B=61H=97

BCD碼:61

ASCII碼:a

〔習(xí)題1.12]簡述Intel80x86系列微處理器在指令集方面的發(fā)展。

〔解答〕

1978年Intel,正式推出了16位8086CPU,1979年Intel推出了準16

位微處理器8088,隨后,Intel推出了80186/80188,80186/80188指令系統(tǒng)

比8086指令系統(tǒng)新增了若干條實用的指令,涉及堆棧操作、移位指令、過程指

令和邊界檢測及乘法指令,1982年Intel推出80286CPU,80286指令系統(tǒng)

包括全部80186指令及新增的保護指令15條其中有些保護方式在實方式下也

可以使用,1985年,Intel80x86推出微處理器地進入第三代80386CPU,

80386指令系統(tǒng)在兼容原來16位指令系統(tǒng)的基礎(chǔ)上,全面升級為32位,還新

增了有關(guān)位操作、條件設(shè)置指令以及控制、調(diào)試和測試寄存器的傳送指令等,

1989年,Intel推出了80486CPU,80486將浮點處理單元FPU集成進來,還采

用了精簡指令集計算機技術(shù)RISC和指令流水線方式,還新增了用于多處理器和

內(nèi)部Cache操作的6條指令,1993年Intel制成了俗稱586的微處理器,取名

Pentium.Pentium仍為32位結(jié)構(gòu),地址總線為32位,對常用的簡單指令用

硬件實現(xiàn),重新設(shè)計指令的微代碼等,Pentium新增了一條8字節(jié)比較交換指

令和一條處理器識別指令,以及4條系統(tǒng)專用指令,1996年推出了MMX

Pentium,新增了57條多媒休指令,1995年Intel推出PentiumPro新增了3

條指令,1999年推出了Pentiumlll新增了70條SSE指令,2000年推出的

Pentium4新增了76條SSE2指令

-7-

〔習(xí)題1.13〕什么是DOS和ROM-BIOS?

〔解答〕

DOS是DisketteOperatingsystem的縮寫,意思是磁盤操作系統(tǒng),DOS

主要是面向磁盤的系統(tǒng)軟件,說得簡單些,就是人與機器的一座橋梁,是罩在機

器硬件外面的一層"外殼",是1981~1995年的個人電腦上使用的一種主要的

操作系統(tǒng)。BIOS(BasicInput/OutputSystem)即基本輸入輸出系統(tǒng),通常

是固化在只讀存儲器(ROM)中,所以又稱為ROM-BIOS。它直接對計算機

系統(tǒng)中的輸入、輸出設(shè)備進行設(shè)備級、硬件級的控制,是連接軟件程序和硬件設(shè)

備之間的樞紐。ROM-BIOS是計算機系統(tǒng)中用來提供最低級、最直接的硬件控

制的程序。

〔習(xí)題1.14]簡述PC機最低1MB主存空間的使用情況。

〔解答〕

(1)基本RAM區(qū)(00000H—9FFFFH)該區(qū)共640KB,由DOS進行管理。

在這個區(qū)域中操作系統(tǒng)要占用掉一部分低地址空間,其它則向用戶程序開放。

(2)保留區(qū)RAM(A0000H-BFFFFFH)該區(qū)為系統(tǒng)安排的"顯示緩沖存

儲區(qū)",共126KB,是顯卡上的芯片提供支持,用于存放屏幕顯示信息。但這部

分地址空間實際上并沒有全部使用。

(3)擴展區(qū)ROM(C0000H-DFFFFH)該區(qū)128KB,由接口卡上的芯片

提供支持,用于為系統(tǒng)不直接支持的外設(shè)安排設(shè)備驅(qū)動程序。用戶固化的程序就

可[安排在這一段,系統(tǒng)的會對它進行確認和連接。

(4)系統(tǒng)區(qū)ROM(EOOOOH-FFFFFH)該區(qū)共128KB,由系統(tǒng)占用,它

主要提供ROM-BIOS程序,基本輸入輸出程序BIOS,是操作系統(tǒng)的重要組成

-8-

部分,主要用來驅(qū)動輸入輸出設(shè)備,也負責(zé)系統(tǒng)的上電檢測,磁盤引導(dǎo)等初始化

操作,在ROM-BIOS中還有CMOS微機設(shè)置程序以及使用的字符圖符信息等

內(nèi)容。

〔習(xí)題1.15]羅列8086CPU的8個8位和16位通用寄存器,并說明各自

的作用。

〔解答〕

(1)數(shù)據(jù)寄存器:AX稱為累加器,使用頻度最高,用于算術(shù)、邏輯運算

以及與外設(shè)傳送信息等;BX稱為基址寄存器,常用做存放存儲器地址;CX稱為

計數(shù)器,作為循環(huán)和串操作等指令中的隱含計數(shù)器;DX稱為數(shù)據(jù)寄存器,常用

來存放雙字長數(shù)據(jù)的高16位,或存放外設(shè)端口地址。

(2)指針及變址寄存器包括SLDLBRSR四個寄存器,常用于存儲器尋址時

提供地址。SI是源變址寄存器,DI是目的變址寄存器,一般與DS聯(lián)用確定數(shù)

據(jù)段和附加段中某一存儲單元地址,在串指令中,SI與DS聯(lián)用、DI和ES聯(lián)用,

分別尋址數(shù)據(jù)段和附加段;同時,在串指令中,SI和DI還都具有自動增量或減

量的功能。SR為堆棧指針寄存器,指示棧頂?shù)钠频刂?;BP為基地址指針寄存

器,表示堆棧段中的基地址。SP與BP寄存器均可與SS段寄存器聯(lián)合使用以

確定堆棧段中的存儲單元地址。

〔習(xí)題1.16〕什么是標(biāo)志,它有什么用途?狀態(tài)標(biāo)志和控制標(biāo)志有什么區(qū)

別?畫出標(biāo)志寄存器FLAGS,說明各個標(biāo)志的位置和含義。

〔解答〕

標(biāo)志用于反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式。它是匯編語言程序設(shè)計中

必須特別注意的一個方面,狀態(tài)用來記錄運行的結(jié)果的狀態(tài)信息,許多指令的執(zhí)

-9-

行都將相應(yīng)地設(shè)置它,控制標(biāo)志位可由程序根據(jù)需要用指令設(shè)置,用來控制處理

器執(zhí)行指令的方式。

.15.14.13.「12.11.10.9.8.7.6.5.4.3.2.1

||OF“|DF~|IF“|TFa|SFQ|ZF.、|“|AF-'|r|SF-|a|CF.1

CF是進位標(biāo)志;ZF是零標(biāo)志;SF是符號標(biāo)志;PF奇偶標(biāo)志;OF溢出標(biāo)

志;AF輔助進位標(biāo)志;DF方向標(biāo)志;IF中斷允許標(biāo)志;TF陷阱標(biāo)志。

〔習(xí)題1.17〕舉例說明CF和OF標(biāo)志的差異。

〔解答〕

溢出標(biāo)志OF和進位標(biāo)志CF是兩個意義不同的標(biāo)志。

進位標(biāo)志表示無符號數(shù)運算結(jié)果是否超出范圍,運算結(jié)果仍然正確;溢出標(biāo)

志表示有符號數(shù)運算結(jié)果是否超出范圍,運算結(jié)果已經(jīng)不正確。

例1:3AH+7CH=B6H

無符號數(shù)運算:58+124=182,范圍內(nèi),無進位

有符號數(shù)運算:58+124=182,范圍外,有溢出

例2:AAH+7CH=(1)26H

無符號數(shù)運算:170+124=294,范圍外,有進位

有符號數(shù)運算:-86+124=28,范圍內(nèi),無溢出

〔習(xí)題1.18]字和雙字在存儲器中如何存放,什么是"小端方式"?對字

和雙字存儲單元,什么是它們的對齊地址?為什么要對齊地址?

〔解答〕

字或雙字在存儲器中占相鄰的2個或4個存儲單元;存放時,低字節(jié)存入

低地址,高字節(jié)存入高地址;字或雙字單元的地址用它的低地址來表示。80x86

處理器采用的這種"低對低,高對高"的存儲形式,被稱為“小端方式";將字

-10-

單元安排在偶地址,雙字節(jié)單元安排在模4地址,被稱為“地址對齊方式"因為

對于不對齊地址的數(shù)據(jù),處理器訪問時,需要額外的訪問時間,所以通常應(yīng)該將

數(shù)據(jù)的地址對齊,以取得較高的存取速度。

〔習(xí)題1.19〕什么是8086中的邏輯地址和物理地址?邏輯地址如何轉(zhuǎn)換成

物理地址?請將如下邏輯地址用物理地址表達:

(1)FFFFh:0(2)40h:17h(3)2000h:4500h(4)B821h:4567h

〔解答〕

在8086處理器中,對應(yīng)每個物理存儲單元都有一個唯一的20位編號,就

是物理地址,從

00000H~FFFFFHO

在8086內(nèi)部和用戶編程時采用的段基地址:段內(nèi)偏移地址形式稱為邏輯

地址。

將邏輯地址中的段地址左移二進制4位(對應(yīng)16進制是一位,即乘以16),

加上偏移地址就得到20位物理地址

如下邏輯地址用物理地址表達:

(1)FFFFh:0=FFFF0H

(2)40h:17h=00417H

(3)2000h:4500h=24500H

(4)B821h:4567h=BC777H(不要算錯)

〔習(xí)題1.20]8086有哪4種邏輯段,各種邏輯段分別是什么用途?

〔解答〕

代碼段(CodeSegment)用來存放程序的指令序列。處理器利用CS:IP

取得下一條要執(zhí)行的指令。

-11-

堆棧段(StackSegment)確定堆棧所在的主存區(qū)域。處理器利用SS:SP

操作堆棧中的數(shù)據(jù)。

數(shù)據(jù)段(DataSegment)存放當(dāng)前運行程序所用的數(shù)據(jù)。處理器利用DS:

EA存取數(shù)據(jù)段中的數(shù)據(jù)。

附加段(ExtraSegment)是附加的數(shù)據(jù)段,也用于數(shù)據(jù)的保存。處理器利

用ES:EA存取數(shù)據(jù)段中的數(shù)據(jù)

〔習(xí)題1.21〕數(shù)據(jù)的默認段是哪個,是否允許其他段存放數(shù)據(jù)?如果允許,

如何實現(xiàn),有什么要求?

〔解答〕

數(shù)據(jù)的默認段是安排在數(shù)據(jù)段,也經(jīng)常安排在附加段,尤其是串操作的目的

區(qū)必須是附加段,允許其它段存放數(shù)據(jù),數(shù)據(jù)的存放比較靈活的,實際上可以存

放在任何一種邏輯段中,這時,只要明確指明是哪個邏輯段就可以了。

〔習(xí)題1.22〕什么是操作碼、操作數(shù)和尋址方式?有哪三種給出操作數(shù)的

方法?

〔解答〕

操作碼說明計算機要執(zhí)行哪種操作,它是指令中不可缺少的組成部分,操作

數(shù)是指令執(zhí)行的參與者,也是各種操作的對象,我們把尋找數(shù)的方式叫做操作數(shù)

的尋址方式。給出操作數(shù)的三種方法是直接給出,間接給出,隱藏操作數(shù)方式給

出。

〔習(xí)題1.23]什么是有效地址EA?8086的操作數(shù)如果在主存中,有哪些

尋址方式可以存取它?

〔解答〕

-12-

DS存放數(shù)據(jù)段的段地址,存儲器中操作數(shù)的偏移地址則由各種主存方式得

到,稱之為有效地址EA。8086的操作數(shù)如果在主存中,可以存取它的尋址方式

有直接尋址方式、寄存器間接尋址方式、寄存器相對尋址方式、基址變址尋址方

式、相對基址變址尋址方式。

〔習(xí)題1.24]說明下列指令中源操作數(shù)的尋址方式?如果BX=2000H,

DI=40H,給出DX的值或有效地址EA的值。

(1)movdx,[1234h]

(2)movdx,1234h

(3)movdx,bx

(4)movdx,[bx]

(5)movdx,[bx+1234h]

(6)movdx,[bx+di]

(7)movdx,[bx+di+1234h]

〔解答〕

(1)直接尋址,EA=1234H

(2)立即數(shù)尋址,DX=1234H

(3)寄存器尋址,DX=2000H

(4)間接尋址,EA=2000H

(5)相對尋址,EA=3234H

(6)基址變址尋址,EA=2040H

(7)相對基址變址尋址,EA=3274H

第2章8086的指令系統(tǒng)

-13-

〔習(xí)題2.1〕已知DS=2000HBX=0100H51=0002乩存儲單元[20100印

~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4CB7

65H,說明下列每條指令執(zhí)行完后AX寄存器的內(nèi)容。

(1)movax,1200h

(2)movax,bx

(3)movax,[1200h]

(4)movax,[bx]

(5)movax,[bx+1100h]

(6)movax,[bx+si]

(7)movax,[bx][si+1100h]

〔解答〕

(1)AX=1200H

(2)AX=O1OOH

(3)AX=4C2AH;偏移地址4=0100卜

(4)AX=3412H偏移地址巧*=0100卜

(5)AX=4C2AH偏移地址=bx+1100h=1200h

(6)AX=7856H偏移地址巧*+51=0100卜+0002卜=0102卜

-14-

7)AX65B7H偏移地址

=bx+si+1100h=0100h+0002h+1100h=1202h

〔習(xí)題2.2〕指出下列指令的錯誤

(1)movcx,dl

(2)movip,ax

(3)moves,1234h

(4)moves,ds

(5)moval,300

(6)mov[sp],ax

(7)movax,bx+di

(8)mov20h,ah

〔解答〕

(1)兩操作數(shù)類型不匹配

(2)IP指令指針禁止用戶訪問

(3)立即數(shù)不允許傳給段寄存器

(4)段寄存器之間不允許傳送

(5)兩操作數(shù)類型不匹配

-15-

(6)目的操作數(shù)應(yīng)為[SI]

(7)源操作數(shù)應(yīng)為[BX+DI]

(8)立即數(shù)不能作目的操作數(shù)

〔習(xí)題2.3〕已知數(shù)字0?9對應(yīng)的格雷碼依次為:18H34H、05H06H、

09KOAKOCH、UK12H、14H,它存在于以table為首地址(設(shè)為200H)

的連續(xù)區(qū)域中。請為如下程序段的每條指令加上注釋,說明每條指令的功能和執(zhí)

行結(jié)果。

leabx,table

moval,8

xlat

〔解答〕

leabx,table;獲取table的首地址,BX=200H

moval,8"專送欲轉(zhuǎn)換的數(shù)字,AL=8

xlat;轉(zhuǎn)換為格雷碼,AL=12HP35

〔習(xí)題2.4〕什么是堆棧,它的工作原則是什么,它的基本操作有哪兩個,

對應(yīng)哪兩種指令?

〔解答〕

-16-

堆棧是一種按"先進后出"原則存取數(shù)據(jù)的存儲區(qū)域,位于堆棧段中,使用

SS段寄存器記錄其段地址;它的工作原則是先進后出;堆棧的兩種基本操作是

壓棧和出棧,對應(yīng)的指令是PUSH和POP。

〔習(xí)題2.5〕已知SS=2200H、SP=00B0H,畫圖說明執(zhí)行下面指令序

列時,堆棧區(qū)和SP的內(nèi)容如何變化?

movax,8057h

pushax

movax,0f79h

pushax

popbx

pop[bx]

〔解答〕

movax,8057h

pushax

movax,0f79h

pushax

popbx;bx=0f79h

pop[bx];DS:[0f79h]=8057h

-17-

SP=OOBOH”

SS=2200H?

〔習(xí)題2.6〕給出下列各條指令執(zhí)行后AL值,以及CF、ZF、SF、OF和PF的

狀態(tài):

moval,89h

addal,al

addal,9dh

cmpal,0bch

subal,al

decal

incal

〔解答〕

-18-

moval,89h;AL=89hCFZFSFOFPF

addal,al;AL=12h10011

;10001001

+10001001

100010010

addal,9dh;AL=Oafh00101

;00010010

+10011101

10101111

cmpal,0bch;AL=Oafh10101

;10101111

-10111100

*01000011

subal,al;AL=00h01001

-19-

decal;AL=Offh00101

;00000000

-00000001

*11111111

incal;AL=00h01001

;11111111

+00000001

*11111111

〔習(xí)題2.7〕設(shè)X、Y、Z均為雙字數(shù)據(jù),分別存放在地址為X、X+2;Y、Y+2;

Z、Z+2的存儲單元中,它們的運算結(jié)果存入W單元。閱讀如下程序段,給出

運算公式。

movax,X

movdx,X+2

addax,Y

adcdx,Y+2

-20-

addax,24

adcdx,0

subax,Z

sbbdx,Z+2

movW,ax

movW+2,dx

〔解答〕

W=X+Y+24-Z

〔習(xí)題2.8〕請分別用一條匯編語言指令完成如下功能:

(1)把BX寄存器和DX寄存器的內(nèi)容相加,結(jié)果存入DX寄存器。

(2)用寄存器BX和SI的基址變址尋址方式把存儲器的一個字節(jié)與AL寄

存器的內(nèi)容相加,并把結(jié)果送到AL中。

(3)用BX和位移量OB2H的寄存器相對尋址方式把存儲器中的一個字和

CX寄存器的內(nèi)容相加,并把結(jié)果送回存儲器中。

(4)用位移量為0520H的直接尋址方式把存儲器中的一個字與數(shù)3412H

相加,并把結(jié)果送回該存儲單元中。

(5)把數(shù)0A0H與AL寄存器的內(nèi)容相加,并把結(jié)果送回AL中。

-21-

〔解答〕

(1)ADDDX,BX

(2)ADDAL,[BX+SI]

(3)ADD[BX+0B2H],CX

(4)ADDWORDPTR[0520H],3412H

(5)ADDAL,0A0H

〔習(xí)題2.9〕設(shè)X、Y、Z、V均為16位帶符號數(shù),分別裝在X、Y、Z、'

存儲單元中,閱讀如下程序段,得出它的運算公式,并說明運算結(jié)果存于何處。

movax,X;ax=X

imulY;DX.AX=X*Y

movex,ax;cx=X*Y的低16位

moxbx,dx;bx=X*Y的高16位

movax,Z;ax=Z

cwd

addex,ax;cx=Z的低16位+X*Y的低16位

adcbx,dx;bx=Z的高16位+X*Y的高16位+低位進位

-22-

subex,540;cx=Z的低16位+X*Y的低16位-540

sbbbx,0;bx=Z的高16位+X*Y的高16位+低位進位-低位借

movax,V;ax=V

cwd

subax,ex;ax=V的低16位<Z的低16位+X*Y的低16位-540)

sbbdx,bx;dx=V的高16位-(Z的高16位+X*Y的高16位+

低位進位-低位借位)-低位借位

idivX;/X

〔解答〕

[V-(X*Y+Z-540)]/X

AX存商,DX存余數(shù)

〔習(xí)題2.10〕指出下列指令的錯誤:

(1)xchg[si],30h

(2)popcs

-23-

(3)sub[si],[di]

(4)pushah

(5)adcax,ds

(6)add[si],80h

(7)inal,3fch

(8)outdx,ah

〔解答〕

(1)xchg的操作數(shù)不能是立即數(shù)

(2)不應(yīng)對CS直接賦值

(3)兩個操作數(shù)不能都是存儲單元

(4)堆棧的操作數(shù)不能是字節(jié)量

(5)adc的操作數(shù)不能是段寄存器

(6)沒有確定是字節(jié)還是字操作

(7)in不支持超過FFH的直接尋址

(8)out只能以AL/AX為源操作數(shù)

〔習(xí)題2.11]給出下列各條指令執(zhí)行后的結(jié)果,以及狀態(tài)標(biāo)志CF、OF、

SF、ZF、PF的狀態(tài)。

movax,1470h

-24-

andax,ax

orax,ax

xorax,ax

notax

testax,OfOfOh

〔解答〕

movax,1470h;AX=1470HCFZFSFOFPF

andax,ax;AX=1470H00000

;0001010001110000

orax,ax;AX=1470H00000

xorax,ax;AX=0000H01001

notax;AX=FFFFH01001

testax,0f0f0h;AX=FFFFH00101

注意:MOV和NOT指令不影響標(biāo)志位;其他邏輯指令使CF=OF=0,根

據(jù)結(jié)果影響其他標(biāo)志位。

-25-

〔習(xí)題2.12)假設(shè)例題2.34的程序段中,AX=08H,BX=10H,請說明

每條指令執(zhí)行后的結(jié)果和各個標(biāo)志位的狀態(tài)。

〔解答〕

指令;執(zhí)行結(jié)果CFOFSFZFPF

movsi,ax;SI=AX=0008H

shlsi,l;SI=2*AX=0010H00000

addsi,ax;SI=3*AX=0018H00001

movdx,bx;DX=BX=0010H00001

movcl,O3h;CL=O3H00001

shldx,cl;DX=8*BX=0080H0u000

subdx,bx;DX=7*BX=0070H00000

adddx,si;DX=7*BX+3*AX=0088H00001

注意:邏輯左移N次相當(dāng)于無符號整數(shù)乘以2的N次方,邏輯右移N次相

當(dāng)于無符號整數(shù)除以2的N次方。移位指令根據(jù)移位的數(shù)據(jù)設(shè)置CF,根據(jù)移位

后的結(jié)果影響SF,ZF,PFO在進行一位移位時,根據(jù)最高符號位是否改變設(shè)置

OF,如改變則OF=1。另外,程序注釋用"u"表示標(biāo)志無定義(不確定),

表示無影響。

〔習(xí)題2.13〕編寫程序段完成如下要求:

(1)用位操作指令實現(xiàn)AL(無符號數(shù))乘以10

-26-

(2)用邏輯運算指令實現(xiàn)數(shù)字0~9的ASCII碼與非壓縮BCD碼的互相

轉(zhuǎn)換

(3)把DX.AX中的雙字右移4位

〔解答〕

(1);不考慮進位

movbl,al

movcl,3

shlal,cl;*8

addal,bl;shlbl,l

addal,bl

;考慮進位

xorah,ah

movbx,ax

movcl,3

shlax,cl

addax,bx;shlbx,l

addax,bx

(2)數(shù)字0~9的ASCH碼是:30h~39h

-27-

非壓縮BCD碼的0~9是:OOh~09h

方法一:

andal,Ofh;實現(xiàn)ASCII到非壓縮BCD碼的轉(zhuǎn)換

oral,30h;實現(xiàn)非壓縮BCD碼至ljASCII的轉(zhuǎn)換

方法二:

xoral,30h;求反D5D4位,其他不變

;即高4位為3,則變?yōu)?;高4位為0,則變?yōu)?

(3)movcl,4

again:shrdx,l;實現(xiàn)邏輯右移

;采用"sardx,l",則實現(xiàn)算術(shù)右移

rcrax,l

deccl

jnzagain

〔習(xí)題2.14〕已知AL=F7H(表示有符號數(shù)-9),分別編寫用SAR和IDIV

指令實現(xiàn)的除以2的程序段,并說明各自執(zhí)行后,所得的商是什么?

〔解答〕

(1)用sar編寫

moval,0f7h;-9送AL11111001

-28-

saral,l;結(jié)果:AL=11111100B=0FBH即-5

(2)用idiv編寫

moval,0f7h;-9送al

cbw;字節(jié)符號擴展位字

movbl,2;注意除數(shù)不可為立即數(shù)

idivbl;結(jié)果:商為al=fch(-4)

;余數(shù):ah=ffh(-1)

結(jié)論:符號數(shù)的除法用idiv準確。

〔習(xí)題2.15]指令指針I(yè)P是通用寄存器還是專用寄存器?有指令能夠直接它賦

值嗎?哪類指令的執(zhí)行會改變它的值?

〔解答〕

指令指針I(yè)P不是通用寄存器,不可直接賦值,屬于專用寄存器。有且僅有

循環(huán)、轉(zhuǎn)移、子程序調(diào)用和返回、中斷類等指令可以改變它的值。

〔習(xí)題2.16〕控制轉(zhuǎn)移類指令中有哪三種尋址方式?

〔解答〕

控制轉(zhuǎn)移類指令的尋址方式:相對尋址、直接尋址方式和間接尋址方式(又

可以分成寄存器和存儲器間接尋址)。

-29-

〔習(xí)題2.17〕什么是短轉(zhuǎn)移shortjump、近轉(zhuǎn)移nearjump和遠轉(zhuǎn)移far

jump?什么是段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移?8086有哪些指令可以實現(xiàn)段間轉(zhuǎn)移?

〔解答〕

短轉(zhuǎn)移:指段內(nèi)-128~127之間的轉(zhuǎn)移,位移量用一個字節(jié)表示

近轉(zhuǎn)移:指段內(nèi)±32K之間的轉(zhuǎn)移,位移量用一個字表示

遠轉(zhuǎn)移:指段間1MB范圍的轉(zhuǎn)移

段內(nèi)轉(zhuǎn)移:指在同一個代碼段內(nèi)的轉(zhuǎn)移,可以是短轉(zhuǎn)移或者近轉(zhuǎn)移

段間轉(zhuǎn)移:指轉(zhuǎn)移到另外一個代碼段,就是遠轉(zhuǎn)移

8086/8088CPU的JMP、CALL和INTn指令可以實現(xiàn)段間轉(zhuǎn)移

〔習(xí)題2.18]8086的條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍有多大?實際編程時,你如

何處理超出范圍的條件轉(zhuǎn)移?

〔解答〕

8086的條件轉(zhuǎn)移的轉(zhuǎn)移范圍:在當(dāng)前指令地址的+127—128之內(nèi)。

如條件轉(zhuǎn)移的轉(zhuǎn)移范圍超出此范圍,可在此范圍內(nèi)安排一條無條件轉(zhuǎn)移,再

轉(zhuǎn)移到范圍外的目標(biāo)地址。

〔習(xí)題2.19)假設(shè)DS=2000H,BX=1256H,SI=528FH,位移量

TABLE=2OA1H,[232F7H]=3280H,[264E5H]=2450H,試問執(zhí)行下列段內(nèi)

間接尋址的轉(zhuǎn)移指令后,轉(zhuǎn)移的有效地址是什么?

(1)JMPBX

-30-

(2)JMPTABLE[BX]

(3)JMP[BX][SI]

〔解答〕

(1)轉(zhuǎn)移的有效地址EA=BX=1256H

(2)轉(zhuǎn)移的有效地址EA=[DS:20AlH+1256H]=[232F7]=3280H

(3)轉(zhuǎn)移的有效地址EA=[DS:1256H+528FH]=264E5H=2450H

〔習(xí)題2.20〕判斷下列程序段跳轉(zhuǎn)的條件

(1)xorax,leleh

jeequal

(2)testal,10000001b

jnzthere

(3)cmpcx,64h

jbthere

〔解答〕

(l)AX=leleh(異或后為0)

(2)AL的DO或D7至少有一位為1

(3)CX(無符號數(shù))<64h

〔習(xí)題2.21)設(shè)置CX=0,則LOOP指令將循環(huán)多少次?例如:

-31-

movcx,0

delay:loopdelay

〔解答〕

216次。

〔習(xí)題2.22]假設(shè)AX和SI存放的是有符號數(shù),DX和DI存放的是無符號

數(shù),請用比較指令和條件轉(zhuǎn)移指令實現(xiàn)以下判斷:

(:L)若DX>DI,轉(zhuǎn)至!Jab。ve執(zhí)行;

(2)若AX>SI,轉(zhuǎn)至ijgreater執(zhí)行;

(3)若CX=0,轉(zhuǎn)至ijzer。執(zhí)行;

(4)若AX-SI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;

(5)若SI<AX,轉(zhuǎn)到less_eq執(zhí)行;

(6)若DI4DX,轉(zhuǎn)到below_eq執(zhí)行。

〔解答〕

(l)若DX>DI,轉(zhuǎn)至lJab。ve執(zhí)行

cmpdx,di

jaabove;=jnbeabove

(2)若AX>SI,轉(zhuǎn)至^greater執(zhí)行

cmpax,si

-32-

jggreater;=jnlegreater

(3)若CX=O,轉(zhuǎn)至!Jzer。執(zhí)行

cmpcx,0

jzzero;=jcxzzero

(4)若AX-SI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;

cmpax,si

jooverflow

(5)若SI<AX,轉(zhuǎn)到less_eq執(zhí)行;

cmpsi,ax;cmpax,si

jleless_eq;jgeless_eq

(6)若DISDX,轉(zhuǎn)到below_eq執(zhí)行。

cmpdi,dx;cmpdx,di

jbebelow_eqJaebelow_eq

〔習(xí)題2.23〕有一個首地址為array的20個字的數(shù)組,說明下列程序段的

功能。

movcx,20

movax,0

movsi,ax

-33-

sumjoop:addax,array[si]

addsi,2

loopsumjoop

movtotal,ax

〔解答〕

將首地址為array得20個字的數(shù)組求和,并將結(jié)果存入total單元中。

〔習(xí)題2.24〕按照下列要求,編寫相應(yīng)的程序段:

(1)起始地址為string的主存單元中存放有一個字符串(長度大于6),

把該字符串中的第1個和第6個字符(字節(jié)量)傳送給DX寄存器。

(2)從主存buffer開始的4個字節(jié)中保存了4個非壓縮BCD碼,現(xiàn)按低

(高)地址對低(高)位的原則,將它們合并到DX中。

(3)編寫一個程序段,在DX高4位全為。時,使AX=0;否則使AX=

-

lo

(4)有兩個64位數(shù)值,按"小端方式"存放在兩個緩沖區(qū)bufferl和

buffer2中,編寫程序段完成bufferl-buffer2功能。

(5)假設(shè)從B800h:0開始存放有100個16位無符號數(shù),編程求它們的

和,并把32位的和保存在DX.AX中。

(6)已知字符串string包含有32KB內(nèi)容,將其中的‘$,符號替換成空

格。

-34-

(7)有一個100個字節(jié)元素的數(shù)組,其首地址為array,將每個元素減1

(不考慮溢出)存于原處。

(8)統(tǒng)計以‘$,結(jié)尾的字符串srting的字符個數(shù)。

〔解答〕

(1)解答:

movsi,0

movdl,string[si];第1個字符送dl寄存器:movdl,stirng[O]

movsi,5

movdh,string[si];第6個字符送dh寄存器:movdl,stirng[5]

(2)解答:

xorsi,si;si清零

moval,buffer[si];第一字節(jié)

incsi

movah,buffer[si];第二字節(jié)

movcl,4

shlah,cl;BCD碼移到高半字節(jié)

oral,ah;組合成壓縮BCD碼

movdl,al;存入dl寄..

-35-

incsi

moval,buffer[si];第三字節(jié)

incsi

movah,buffer[si];第四字節(jié)

movcl,4

shlah,cl;BCD碼移到高半字節(jié)

oral,ah;組合成壓縮BCD碼

movdh,al;存入dh寄..

(3)解答:

testdx,OfOOOh;testdh,OfOh

jznext;jnznext

movax,-l;movax,0

jmpagain

next:movax,0;movax,Offffh

again:...

(4)解答:

movax,wordptrbufferl

subax,wordptrbuffer2;先減低16位

-36-

movdx,wordptrbufferl+2

sbbdx,wordptrbuffer2+2;后減高16位,需減低16位的借

(5)解答:

movax,0b800h

movds,ax;段地址

xorsi,si;地址偏移量si=0

xordx,dx;和的高字dx=0

movex,99;加的次數(shù)

movax,[si];第一個數(shù)

again:incsi;指向下一個字單元

incsi

addax,[si];加下一個數(shù)

jncnoc;無進位轉(zhuǎn)

incdx;有進位dx=dx+l

noc:decex;次數(shù)-1

jnzex,again;非0繼續(xù)加

(6)解答1:不使用串操作指令(更好)

-37-

movsi,offsetstring

movcx,8000h;32k=2A15=8000h

again:cmpbyteptr[si],,$'

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論