




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東梅州職業(yè)技術(shù)學(xué)院《交通規(guī)劃課程設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱商業(yè)大學(xué)《物理化學(xué)實驗(上)》2023-2024學(xué)年第二學(xué)期期末試卷
- 黑龍江藝術(shù)職業(yè)學(xué)院《地理專業(yè)》2023-2024學(xué)年第二學(xué)期期末試卷
- 14保護呼吸器官(教學(xué)設(shè)計)-2024-2025學(xué)年科學(xué)三年級上冊人教鄂教版
- 河南輕工職業(yè)學(xué)院《嵌入式綜合實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 中南林業(yè)科技大學(xué)《生命科學(xué)進展》2023-2024學(xué)年第二學(xué)期期末試卷
- 宜賓學(xué)院《天然產(chǎn)物》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱商業(yè)大學(xué)《流體力學(xué)B》2023-2024學(xué)年第二學(xué)期期末試卷
- 瀘州四川瀘州瀘縣氣象局見習(xí)基地招收見習(xí)人員2人筆試歷年參考題庫附帶答案詳解
- 大連軟件職業(yè)學(xué)院《數(shù)據(jù)結(jié)構(gòu)實驗》2023-2024學(xué)年第二學(xué)期期末試卷
- 異位妊娠護理查房版本
- 人教版 八年級數(shù)學(xué)下冊 第19章 單元綜合測試卷(2025年春)
- 2024年美發(fā)師(高級技師)職業(yè)鑒定考試題庫(含答案)
- 2025年山東藥品食品職業(yè)學(xué)院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 2024年05月湖南招商銀行長沙分行長期社會招考筆試歷年參考題庫附帶答案詳解
- 滬科版(2024新版)數(shù)學(xué)七年級下冊第6章 實數(shù) 單元測試卷(含答案)
- 2025新人教版英語七年級下單詞英譯漢默寫表(小學(xué)部分)
- 電子物料基礎(chǔ)知識
- 外科疝氣的個案護理
- 2025屆江蘇省南京市鹽城市高三一模考試語文試題 課件
- 幼兒園保育教育質(zhì)量自評指導(dǎo)手冊(試行)
評論
0/150
提交評論