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

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上 第1章 匯編語言基礎(chǔ)知識習(xí)題1.1簡述計算機(jī)系統(tǒng)的硬件組成及各部分作用。解答CPU:包括運(yùn)算器、控制器和寄存器組。運(yùn)算器執(zhí)行所有的算術(shù)和邏輯運(yùn)算;控制器負(fù)責(zé)把指指令逐條從存儲器中取出,經(jīng)譯碼分析后向機(jī)器發(fā)出各種控制命令,并正確完成程序所要求的功能;寄存器組為處理單元提供所需要的數(shù)據(jù)。存儲器:是計算機(jī)的記憶部件,它用來存放程序以及程序中所涉及的數(shù)據(jù)。外部設(shè)備:實(shí)現(xiàn)人機(jī)交換和機(jī)間的通信。習(xí)題1.2明確下列概念或符號: 主存和輔存,RAM和ROM,存儲器地址和I/O端口,KB、MB、GB和TB。解答主存又稱內(nèi)存是主存儲器的簡稱,主存儲器存放當(dāng)前正在執(zhí)行的程序和使用的數(shù)據(jù),

2、CPU可以直接存取,它由半導(dǎo)體存儲器芯片構(gòu)成其成本高、容量小、但速度快。輔存是輔助存儲器的簡稱,輔存可用來長期保存大量程序和數(shù)據(jù),CPU需要通過I/O接口訪問,它由磁盤或光盤構(gòu)成,其成本低、容量大,但速度慢。RAM是隨機(jī)存取存儲器的英語簡寫,由于CPU可以從RAM讀信息,也可以向RAM寫入信息,所以RAM也被稱為讀寫存儲器,RAM型半導(dǎo)體存儲器可以按地址隨機(jī)讀寫,但這類存儲器在斷電后不能保存信息;而ROM中的信息只能被讀出,不能被修改,ROM型半導(dǎo)體通常只能被讀出,但這類存儲器斷電后能保存信息。存儲器由大量存儲單元組成。為了區(qū)別每個單元,我們將它們編號,于是,每個存儲單元就有了一個存儲地址,I

3、/O接口是由一組寄存器組成,為了區(qū)別它們,各個寄存器進(jìn)行了編號,形成I/O地址,通常稱做I/O端口。KB是千字節(jié)、MB是兆字節(jié)、GB是吉字節(jié)和TB是太字節(jié),它們都是表示存儲器存儲單元的單位。習(xí)題1.3什么是匯編語言源程序、匯編程序、目標(biāo)程序? 解答用匯編語言書寫的程序就稱為匯編語言源程序;完成匯編工作的程序就是匯編程序;由匯編程序編譯通過的程序就是目標(biāo)程序。習(xí)題1.4匯編語言與高級語言相比有什么優(yōu)缺點(diǎn)? 解答匯編語言與高級語言相比的優(yōu)點(diǎn):由于匯編語言本質(zhì)就是機(jī)器語言,它可以直接地、有效地控制計算機(jī)硬件,因而容易產(chǎn)生運(yùn)行速度快,指令序列短小的高效目標(biāo)程序,可以直接控制計算機(jī)硬件部件,可以編寫在“

4、時間”和“空間”兩方面最有效的程序。匯編語言與高級語言相比的缺點(diǎn):由于與處理器密切相關(guān)導(dǎo)致通用性差、可移植性差,匯編語言功能有限,又涉及寄存器、主存單元等硬件細(xì)節(jié),編寫匯編語言比較繁瑣,調(diào)試起來也比較困難,編譯程序產(chǎn)生的目標(biāo)程序往往比較龐大、程序難以優(yōu)化,運(yùn)行速度慢。習(xí)題1.5將下列十六進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制和十進(jìn)制表示 (1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH解答(1)FFH B 255D (2)0H 0B 0D (3)5EH B 94D (4)EFH B 239D(5)2EH B 46D (6)10H 10000B 16D (7

5、)1FH 11111B 31D(8)ABH B 171D習(xí)題1.6將下列十進(jìn)制數(shù)轉(zhuǎn)換為BCD碼表示(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)2458解答(1)12 (2)24 (3)68 (4)127 1(5)128 0 (6)255 1(7)1234 10100(8)2458 11000習(xí)題1.7將下列BCD碼轉(zhuǎn)換為十進(jìn)制數(shù)(1) (2) (3) (4)(5) (6) (7) (8)解答(1)91 (2)89 (3)36 (4)90(5)08 (6)97(7)81 (8)02習(xí)題1.8將下列十進(jìn)制數(shù)分別用8位二進(jìn)制數(shù)的原碼、反碼和補(bǔ)碼表

6、示 (1)0 (2)-127 (3)127 (4)-57(5)126 (6)-126 (7)-128 (8)68解答(1)0 +0 -0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 習(xí)題1.9完成下列二進(jìn)制數(shù)的運(yùn)算 (1)10111001 (2)10111001 (3)1011×1001 (4)÷1001(5)1011 1001 (6)1011 1001 (7)1011 (8)1011 ? 1001解答(1)10111001=10100 (2)10111001=0010 (3)1011×1001= (4)&

7、#247;1001=10100,余數(shù) 1000(5)1011 1001=1001 (6)1011 1001=1011 (7)1011=0100 (8) 1011?1001=0010(?代表異或)習(xí)題1.10數(shù)碼09、大寫字母AZ、小寫字母az對應(yīng)的ASCII碼分別是多少?ASCII碼為0dh、0ah對應(yīng)的是什么字符? 解答數(shù)碼09:30H39H大寫字母AZ:41H5AH小寫字母az:61H7AHASCII碼為0dh、0ah分別對應(yīng)回車和換行控制字符。習(xí)題1.11計算機(jī)中有一個“”編碼,如果把它認(rèn)為是無符號數(shù),它是十進(jìn)制什么數(shù)?如果認(rèn)為它是BCD碼,則表示什么數(shù)?又如果它是某個ASCII碼,則代

8、表哪個字符? 解答十進(jìn)制無符號數(shù):B61H97BCD碼:61ASCII碼:a習(xí)題1.12簡述Intel 80x86系列微處理器在指令集方面的發(fā)展。 解答1978年Intel,正式推出了16位8086CPU,1979年Intel推出了準(zhǔn)16位微處理器8088,隨后,Intel推出了80186/80188,80186/80188指令系統(tǒng)比8086指令系統(tǒng)新增了若干條實(shí)用的指令,涉及堆棧操作、移位指令、過程指令和邊界檢測及乘法指令,1982年Intel推出80286 CPU, 80286指令系統(tǒng)包括全部80186指令及新增的保護(hù)指令15條,其中有些保護(hù)方式在實(shí)方式下也可以使用,1985年,Intel

9、80x86推出微處理器地進(jìn)入第三代80386 CPU, 80386指令系統(tǒng)在兼容原來16位指令系統(tǒng)的基礎(chǔ)上,全面升級為32位,還新增了有關(guān)位操作、條件設(shè)置指令以及控制、調(diào)試和測試寄存器的傳送指令等,1989年,Intel推出了80486CPU,80486將浮點(diǎn)處理單元FPU集成進(jìn)來,還采用了精簡指令集計算機(jī)技術(shù)RISC和指令流水線方式,還新增了用于多處理器和內(nèi)部Cache操作的6條指令,1993年Intel制成了俗稱586的微處理器,取名Pentium。Pentium仍為32位結(jié)構(gòu),地址總線為32位,對常用的簡單指令用硬件實(shí)現(xiàn),重新設(shè)計指令的微代碼等,Pentium新增了一條8字節(jié)比較交換指令

10、和一條處理器識別指令,以及4條系統(tǒng)專用指令,1996年推出了MMX Pentium,新增了57條多媒休指令,1995年Intel推出Pentium Pro新增了3條指令,1999年推出了Pentium新增了70條SSE指令,2000年推出的Pentium4新增了76條SSE2指令習(xí)題1.13什么是DOS和ROM-BIOS? 解答DOS是Diskette Operating system的縮寫,意思是磁盤操作系統(tǒng),DOS主要是面向磁盤的系統(tǒng)軟件,說得簡單些,就是人與機(jī)器的一座橋梁,是罩在機(jī)器硬件外面的一層“外殼”,是19811995年的個人電腦上使用的一種主要的操作系統(tǒng)。BIOS(Basic I

11、nputOutput System)即基本輸入輸出系統(tǒng),通常是固化在只讀存儲器(ROM)中,所以又稱為ROMBIOS。它直接對計算機(jī)系統(tǒng)中的輸入、輸出設(shè)備進(jìn)行設(shè)備級、硬件級的控制,是連接軟件程序和硬件設(shè)備之間的樞紐。ROMBIOS是計算機(jī)系統(tǒng)中用來提供最低級、最直接的硬件控制的程序。習(xí)題1.14簡述PC機(jī)最低1MB主存空間的使用情況。 解答(1)基本RAM區(qū)(00000H9FFFFH)該區(qū)共640KB,由DOS進(jìn)行管理。在這個區(qū)域中操作系統(tǒng)要占用掉一部分低地址空間,其它則向用戶程序開放。(2)保留區(qū)RAM(A0000H-BFFFFFH)該區(qū)為系統(tǒng)安排的“顯示緩沖存儲區(qū)”,共126KB,是顯卡上

12、的芯片提供支持,用于存放屏幕顯示信息。但這部分地址空間實(shí)際上并沒有全部使用。(3)擴(kuò)展區(qū)ROM(C0000H-DFFFFH)該區(qū)128KB,由接口卡上的芯片提供支持,用于為系統(tǒng)不直接支持的外設(shè)安排設(shè)備驅(qū)動程序。用戶固化的程序就可安排在這一段,系統(tǒng)的會對它進(jìn)行確認(rèn)和連接。(4)系統(tǒng)區(qū)ROM(E0000H-FFFFFH)該區(qū)共128KB,由系統(tǒng)占用,它主要提供ROM-BIOS程序,基本輸入輸出程序BIOS,是操作系統(tǒng)的重要組成部分,主要用來驅(qū)動輸入輸出設(shè)備,也負(fù)責(zé)系統(tǒng)的上電檢測,磁盤引導(dǎo)等初始化操作,在ROM-BIOS中還有CMOS微機(jī)設(shè)置程序以及使用的字符圖符信息等內(nèi)容。習(xí)題1.15羅列8086

13、CPU的8個8位和16位通用寄存器,并說明各自的作用。 解答(1)數(shù)據(jù)寄存器:AX稱為累加器,使用頻度最高,用于算術(shù)、邏輯運(yùn)算以及與外設(shè)傳送信息等;BX稱為基址寄存器,常用做存放存儲器地址;CX稱為計數(shù)器,作為循環(huán)和串操作等指令中的隱含計數(shù)器;DX稱為數(shù)據(jù)寄存器,常用來存放雙字長數(shù)據(jù)的高16位,或存放外設(shè)端口地址。(2)指針及變址寄存器包括SI,DI,BP,S P,四個寄存器,常用于存儲器尋址時提供地址。SI是源變址寄存器,DI是目的變址寄存器,一般與DS聯(lián)用確定數(shù)據(jù)段和附加段中某一存儲單元地址,在串指令中,SI與DS聯(lián)用、DI和ES聯(lián)用,分別尋址數(shù)據(jù)段和附加段;同時,在串指令中,SI和DI還

14、都具有自動增量或減量的功能。S P,為堆棧指針寄存器,指示棧頂?shù)钠频刂罚籅P為基地址指針寄存器,表示堆棧段中的基地址。S P與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)用來記錄運(yùn)行的結(jié)果的狀態(tài)信息,許多指令的執(zhí)行都將相應(yīng)地設(shè)置它,控制標(biāo)志位可由程序根據(jù)需要用指令設(shè)置,用來控制處理器執(zhí)行指令的方式。 CF是進(jìn)位標(biāo)志;ZF 是零標(biāo)志;SF是符號標(biāo)志;PF奇

15、偶標(biāo)志;OF溢出標(biāo)志;AF輔助進(jìn)位標(biāo)志;DF方向標(biāo)志;IF中斷允許標(biāo)志;TF陷阱標(biāo)志。習(xí)題1.17舉例說明CF和OF標(biāo)志的差異。 解答溢出標(biāo)志OF和進(jìn)位標(biāo)志CF是兩個意義不同的標(biāo)志。進(jìn)位標(biāo)志表示無符號數(shù)運(yùn)算結(jié)果是否超出范圍,運(yùn)算結(jié)果仍然正確;溢出標(biāo)志表示有符號數(shù)運(yùn)算結(jié)果是否超出范圍,運(yùn)算結(jié)果已經(jīng)不正確。例1:3AH + 7CHB6H無符號數(shù)運(yùn)算:58124182,范圍內(nèi),無進(jìn)位有符號數(shù)運(yùn)算: 58124182 ,范圍外,有溢出例2:AAH + 7CH(1)26H無符號數(shù)運(yùn)算:170124294,范圍外,有進(jìn)位有符號數(shù)運(yùn)算:8612428 ,范圍內(nèi),無溢出習(xí)題1.18字和雙字在存儲器中如何存放,

16、什么是“小端方式”?對字和雙字存儲單元,什么是它們的對齊地址?為什么要對齊地址? 解答字或雙字在存儲器中占相鄰的2個或4個存儲單元;存放時,低字節(jié)存入低地址,高字節(jié)存入高地址;字或雙字單元的地址用它的低地址來表示。80x86處理器采用的這種“低對低,高對高”的存儲形式,被稱為“小端方式”;將字單元安排在偶地址,雙字節(jié)單元安排在模4地址,被稱為“地址對齊方式”因?yàn)閷τ诓粚R地址的數(shù)據(jù),處理器訪問時,需要額外的訪問時間,所以通常應(yīng)該將數(shù)據(jù)的地址對齊,以取得較高的存取速度。習(xí)題1.19什么是8086中的邏輯地址和物理地址?邏輯地址如何轉(zhuǎn)換成物理地址?請將如下邏輯地址用物理地址表達(dá): (1)FFFFh

17、:0 (2)40h:17h (3)2000h:4500h (4)B821h:4567h解答在8086處理器中,對應(yīng)每個物理存儲單元都有一個唯一的20位編號,就是物理地址,從00000HFFFFFH。在8086內(nèi)部和用戶編程時,采用的段基地址 : 段內(nèi)偏移地址形式稱為邏輯地址。將邏輯地址中的段地址左移二進(jìn)制4位(對應(yīng)16進(jìn)制是一位,即乘以16),加上偏移地址就得到20位物理地址如下邏輯地址用物理地址表達(dá):(1)FFFFh:0FFFF0H(2)40h:17h00417H(3)2000h:4500h24500H(4)B821h:4567hBC777H (不要算錯)習(xí)題1.208086有哪4種邏輯段,

18、各種邏輯段分別是什么用途? 解答代碼段(Code Segment)用來存放程序的指令序列。處理器利用CS : IP取得下一條要執(zhí)行的指令。堆棧段(Stack Segment)確定堆棧所在的主存區(qū)域。處理器利用SS : SP操作堆棧中的數(shù)據(jù)。數(shù)據(jù)段(Data Segment)存放當(dāng)前運(yùn)行程序所用的數(shù)據(jù)。處理器利用DS : EA存取數(shù)據(jù)段中的數(shù)據(jù)。附加段(Extra Segment)是附加的數(shù)據(jù)段,也用于數(shù)據(jù)的保存。處理器利用ES : EA存取數(shù)據(jù)段中的數(shù)據(jù)習(xí)題1.21數(shù)據(jù)的默認(rèn)段是哪個,是否允許其他段存放數(shù)據(jù)?如果允許,如何實(shí)現(xiàn),有什么要求?解答數(shù)據(jù)的默認(rèn)段是安排在數(shù)據(jù)段,也經(jīng)常安排在附加段,尤

19、其是串操作的目的區(qū)必須是附加段,允許其它段存放數(shù)據(jù),數(shù)據(jù)的存放比較靈活的,實(shí)際上可以存放在任何一種邏輯段中,這時,只要明確指明是哪個邏輯段就可以了。習(xí)題1.22什么是操作碼、操作數(shù)和尋址方式?有哪三種給出操作數(shù)的方法? 解答操作碼說明計算機(jī)要執(zhí)行哪種操作,它是指令中不可缺少的組成部分,操作數(shù)是指令執(zhí)行的參與者,也是各種操作的對象,我們把尋找數(shù)的方式叫做操作數(shù)的尋址方式。給出操作數(shù)的三種方法是直接給出,間接給出,隱藏操作數(shù)方式給出。習(xí)題1.23什么是有效地址EA?8086的操作數(shù)如果在主存中,有哪些尋址方式可以存取它? 解答DS存放數(shù)據(jù)段的段地址,存儲器中操作數(shù)的偏移地址則由各種主存方式得到,稱

20、之為有效地址EA。8086的操作數(shù)如果在主存中,可以存取它的尋址方式有直接尋址方式、寄存器間接尋址方式、寄存器相對尋址方式、基址變址尋址方式、相對基址變址尋址方式。習(xí)題1.24說明下列指令中源操作數(shù)的尋址方式?如果BX2000H,DI40H,給出DX的值或有效地址EA的值。 (1) mov dx,1234h(2) mov dx,1234h(3) mov dx,bx(4) mov dx,bx(5) mov dx,bx+1234h(6) mov dx,bx+di(7) mov dx,bx+di+1234h解答(1)直接尋址,EA1234H(2)立即數(shù)尋址,DX1234H(3)寄存器尋址,DX200

21、0H(4)間接尋址,EA2000H(5)相對尋址,EA3234H(6)基址變址尋址,EA2040H(7)相對基址變址尋址,EA3274H第2章 8086的指令系統(tǒng)習(xí)題2.1已知DS2000H、BX0100H、SI0002H,存儲單元20100H20103H依次存放12 34 56 78H,21200H21203H依次存放2A 4C B7 65H,說明下列每條指令執(zhí)行完后AX寄存器的內(nèi)容。(1) mov ax,1200h(2) mov ax,bx(3) mov ax,1200h(4) mov ax,bx(5) mov ax,bx+1100h(6) mov ax,bx+si(7) mov ax,b

22、xsi+1100h解答(1)AX1200H(2)AX0100H(3)AX4C2AH   ;偏移地址=bx=0100h(4)AX3412H    ;偏移地址=bx=0100h(5)AX4C2AH   ;偏移地址=bx+1100h=1200h(6)AX7856H    ;偏移地址=bx+si=0100h+0002h=0102h(7)AX65B7H    ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h 習(xí)題2.2指出下列指令的

23、錯誤(1) mov cx,dl(2) mov ip,ax(3) mov es,1234h(4) mov es,ds(5) mov al,300(6) mov sp,ax(7) mov ax,bx+di(8) mov 20h,ah解答(1)兩操作數(shù)類型不匹配(2)IP指令指針禁止用戶訪問(3)立即數(shù)不允許傳給段寄存器(4)段寄存器之間不允許傳送(5)兩操作數(shù)類型不匹配(6)目的操作數(shù)應(yīng)為 SI (7)源操作數(shù)應(yīng)為 BX+DI  (8)立即數(shù)不能作目的操作數(shù)習(xí)題2.3已知數(shù)字0 9對應(yīng)的格雷碼依次為:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于

24、以table為首地址(設(shè)為200H)的連續(xù)區(qū)域中。請為如下程序段的每條指令加上注釋,說明每條指令的功能和執(zhí)行結(jié)果。            lea bx,table           mov al,8           xlat解答     

25、60;     lea bx,table          ;獲取table的首地址,BX200H           mov al,8               ;傳送欲轉(zhuǎn)換的數(shù)字,AL8   &

26、#160;       xlat                       ;轉(zhuǎn)換為格雷碼,AL12H  P35習(xí)題2.4什么是堆棧,它的工作原則是什么,它的基本操作有哪兩個,對應(yīng)哪兩種指令? 解答堆棧是一種按“先進(jìn)后出”原則存取數(shù)據(jù)的存儲區(qū)域,位于堆棧段中,使用SS段寄存器記錄其段地址;它的工作原則是先進(jìn)

27、后出;堆棧的兩種基本操作是壓棧和出棧,對應(yīng)的指令是PUSH和POP。習(xí)題2.5已知SS = 2200H、SP = 00B0H,畫圖說明執(zhí)行下面指令序列時,堆棧區(qū)和SP的內(nèi)容如何變化?            mov ax,8057h           push ax           mov ax

28、,0f79h             push ax           pop bx           pop bx解答           mov ax,8057h 

29、0;         push ax           mov ax,0f79h           push ax           pop bx     

30、0;          ;bx=0f79h           pop bx              ;DS:0f79h=8057h 習(xí)題2.6給出下列各條指令執(zhí)行后AL值,以及CF、ZF、SF、OF和PF的狀態(tài):    

31、60;      mov al,89h           add al,al           add al,9dh           cmp al,0bch       &

32、#160;   sub al,al           dec al           inc al解答mov al,89h           ; AL=89h   CF  ZF  SF  OF  PFadd al,

33、al               ; AL=12h   1   0   0   1   1; 1000 1001+1000 1001 10001 0010  add al,9dh              ; AL=0afh  0

34、   0   1   0   1; 0001 0010+ 1001 1101  1010 1111  cmp al,0bch          ; AL=0afh  1   0   1   0   1; 1010 1111-1011 1100* 0100 0011 sub al,al  &

35、#160;             AL=00h   0   1   0   0   1 dec al                   ; AL=0ffh  0   0

36、0;  1   0   1; 0000 0000- 0000 0001 *1111 1111 inc al                    ; AL=00h   0   1   0   0   1;1111 1111+0000 000

37、1*1111 1111 習(xí)題2.7設(shè)X、Y、Z均為雙字?jǐn)?shù)據(jù),分別存放在地址為X、X+2;Y、Y+2;Z、Z+2的存儲單元中,它們的運(yùn)算結(jié)果存入W單元。閱讀如下程序段,給出運(yùn)算公式。            mov ax,X           mov dx,X+2          

38、0; add ax,Y           adc dx,Y+2            add ax,24           adc dx,0            sub ax

39、,Z           sbb dx,Z+2            mov W,ax           mov W+2,dx 解答        WX+Y+24-Z習(xí)題2.8請分別用一條匯編語言指令完成如下

40、功能: (1)把BX寄存器和DX寄存器的內(nèi)容相加,結(jié)果存入DX寄存器。(2)用寄存器BX和SI的基址變址尋址方式把存儲器的一個字節(jié)與AL寄存器的內(nèi)容相加,并把結(jié)果送到AL中。(3)用BX和位移量0B2H的寄存器相對尋址方式把存儲器中的一個字和CX寄存器的內(nèi)容相加,并把結(jié)果送回存儲器中。(4)用位移量為0520H的直接尋址方式把存儲器中的一個字與數(shù)3412H相加,并把結(jié)果送回該存儲單元中。(5)把數(shù)0A0H與AL寄存器的內(nèi)容相加,并把結(jié)果送回AL中。解答(1)ADD DX,BX(2)ADD AL,BX+SI(3)ADD BX+0B2H,CX(4)ADD WORD PTR 0520H,3412H(

41、5)ADD AL,0A0H習(xí)題2.9設(shè)X、Y、Z、V均為16位帶符號數(shù),分別裝在X、Y、Z、V存儲單元中,閱讀如下程序段,得出它的運(yùn)算公式,并說明運(yùn)算結(jié)果存于何處。            mov ax,X     ;ax=X           imul Y       ;DX.AX=X*Y

42、0;           mov cx,ax    ;cx=X*Y的低16位           mox bx,dx    ;bx=X*Y的高16位            mov ax,Z   

43、60;  ax=Z           cwd           add cx,ax    ;cx=Z的低16位+X*Y的低16位           adc bx,dx    bx=Z的高16位+X*Y的高16位+低位進(jìn)位&#

44、160;           sub cx,540   ;cx=Z的低16位+X*Y的低16位-540           sbb bx,0       bx=Z的高16位+X*Y的高16位+低位進(jìn)位-低位借位         &

45、#160;  mov ax,V      ;ax=V           cwd           sub ax,cx     ax=V的低16位-(Z的低16位+X*Y的低16位-540)          sbb

46、dx,bx     dx=V的高16位-(Z的高16位+X*Y的高16位+低位進(jìn)位-低位借位)-低位借位           idiv X ;/X解答       V-(X*Y+Z-540)/X       AX存商,DX存余數(shù) 習(xí)題2.10指出下列指令的錯誤: (1) xchg si,30h(2) pop cs(3) sub si,di

47、(4) push ah(5) adc ax,ds(6) add si,80h(7) in al,3fch(8) out dx,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)。          

48、0; mov ax,1470h           and ax,ax           or ax,ax           xor ax,ax           not ax 

49、60;         test ax,0f0f0h解答                                      

50、0;                   mov ax,1470h          ;AX1470H CF  ZF  SF  OF  PF             &#

51、160;                                                 and ax,ax

52、60;                ;AX1470H 0   0   0   0   0            ;0001 0100 0111 0000         

53、0;  or ax,ax                   ;AX1470H 0   0   0   0   0           xor ax,ax       &

54、#160;         ;AX0000H 0   1   0   0   1           not ax                    

55、60; ;AXFFFFH 0   1   0   0   1           test ax,0f0f0h         ;AXFFFFH 0   0   1   0   1注意:MOV和NOT指令不影響標(biāo)志位;其他邏輯指令使CFOF0,根據(jù)結(jié)果影響其他標(biāo)志位。習(xí)

56、題2.12假設(shè)例題2.34的程序段中,AX = 08H,BX = 10H,請說明每條指令執(zhí)行后的結(jié)果和各個標(biāo)志位的狀態(tài)。 解答           指令               執(zhí)行結(jié)果               

57、      CF OF SF ZF PF           mov si,ax    ; SI=AX=0008H                -     -      - &#

58、160; -     -           shl si,1        ; SI=2*AX=0010H             0    0    0    0 &

59、#160;  0           add si,ax     ; SI=3*AX=0018H             0    0    0    0    1     

60、60;      mov dx,bx    DX=BX=0010H              0    0    0    0    1            mov cl,03h

61、   CL=03H                         0    0    0    0    1         &

62、#160;  shl dx,cl       ; DX=8*BX=0080H          0    u    0    0    0            sub dx,bx    ; DX=7*BX=0

63、070H           0    0    0    0    0           add dx,si      DX=7*BX+3*AX=0088H  0    0 &

64、#160;  0    0    1注意:邏輯左移N次相當(dāng)于無符號整數(shù)乘以2的N次方,邏輯右移N次相當(dāng)于無符號整數(shù)除以2的N次方。移位指令根據(jù)移位的數(shù)據(jù)設(shè)置CF,根據(jù)移位后的結(jié)果影響SF,ZF,PF。在進(jìn)行一位移位時,根據(jù)最高符號位是否改變設(shè)置OF,如改變則OF1。另外,程序注釋用“u”表示標(biāo)志無定義(不確定),“-”表示無影響。習(xí)題2.13編寫程序段完成如下要求: (1)用位操作指令實(shí)現(xiàn)AL(無符號數(shù))乘以10(2)用邏輯運(yùn)算指令實(shí)現(xiàn)數(shù)字0 9的ASCII碼與非壓縮BCD碼的互相轉(zhuǎn)換(3)把DX.AX中的雙字右移4位解答(

65、1) 不考慮進(jìn)位                   mov bl,al           mov cl,3           shl al,cl      

66、;         ;*8           add al,bl             ;shl bl,1             add al,bl   

67、        ;考慮進(jìn)位           xor ah,ah           mov bx,ax           mov cl,3       &

68、#160;   shl ax,cl           add ax,bx             ;shl bx,1           add ax,bx(2)數(shù)字09的ASCII碼是:30h39h     

69、;   非壓縮BCD碼的09是:00h09h方法一:           and al,0fh            ;實(shí)現(xiàn)ASCII到非壓縮BCD碼的轉(zhuǎn)換           or al,30h      &

70、#160;      ;實(shí)現(xiàn)非壓縮BCD碼到ASCII的轉(zhuǎn)換方法二:           xor al,30h            ;求反D5D4位,其他不變           ;即高4位為3,則變?yōu)?;高4位為0,則變?yōu)?(3)

71、60;  mov cl,4again:  shr dx,1              ;實(shí)現(xiàn)邏輯右移                            &#

72、160;            ;采用“sar dx,1”,則實(shí)現(xiàn)算術(shù)右移             rcr ax,1             dec cl       &

73、#160;     jnz again習(xí)題2.14已知AL = F7H(表示有符號數(shù)-9),分別編寫用SAR和IDIV指令實(shí)現(xiàn)的除以2的程序段,并說明各自執(zhí)行后,所得的商是什么? 解答(1)用sar編寫           mov al,0f7h           ; -9送AL 1111 1001     

74、0;     sar al,1              ; 結(jié)果:AL=1111 1100B=0FBH  即-5(2)用idiv編寫           mov al,0f7h           ; -9送al

75、60;          cbw                   ; 字節(jié)符號擴(kuò)展位字           mov bl,2        

76、60;     ; 注意除數(shù)不可為立即數(shù)           idiv bl               ; 結(jié)果:商為al=fch  (-4)              

77、;                  ; 余數(shù):ah=ffh (-1) 結(jié)論:符號數(shù)的除法用idiv 準(zhǔn)確。  習(xí)題2.15指令指針I(yè)P是通用寄存器還是專用寄存器?有指令能夠直接它賦值嗎?哪類指令的執(zhí)行會改變它的值? 解答指令指針I(yè)P不是通用寄存器,不可直接賦值,屬于專用寄存器。有且僅有循環(huán)、轉(zhuǎn)移、子程序調(diào)用和返回、中斷類等指令可以改變它的值。習(xí)題2.16控制轉(zhuǎn)移類指令中有哪三種尋址方式? 解答控制轉(zhuǎn)移類指令的尋址方

78、式:相對尋址、直接尋址方式和間接尋址方式(又可以分成寄存器和存儲器間接尋址)。習(xí)題2.17什么是短轉(zhuǎn)移short jump、近轉(zhuǎn)移near jump和遠(yuǎn)轉(zhuǎn)移far jump?什么是段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移?8086有哪些指令可以實(shí)現(xiàn)段間轉(zhuǎn)移? 解答短轉(zhuǎn)移:指段內(nèi)128127之間的轉(zhuǎn)移,位移量用一個字節(jié)表示近轉(zhuǎn)移:指段內(nèi)±32K之間的轉(zhuǎn)移,位移量用一個字表示遠(yuǎn)轉(zhuǎn)移:指段間1MB范圍的轉(zhuǎn)移段內(nèi)轉(zhuǎn)移:指在同一個代碼段內(nèi)的轉(zhuǎn)移,可以是短轉(zhuǎn)移或者近轉(zhuǎn)移段間轉(zhuǎn)移:指轉(zhuǎn)移到另外一個代碼段,就是遠(yuǎn)轉(zhuǎn)移8086/8088CPU的JMP、CALL和INT n指令可以實(shí)現(xiàn)段間轉(zhuǎn)移習(xí)題2.188086的條件轉(zhuǎn)移指

79、令的轉(zhuǎn)移范圍有多大?實(shí)際編程時,你如何處理超出范圍的條件轉(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=20A1H,232F7H=3280H,264E5H=2450H,試問執(zhí)行下列段內(nèi)間接尋址的轉(zhuǎn)移指令后,轉(zhuǎn)移的有效地址是什么? (1) JMP BX(2) JMP TABLEBX(3) JMP BXSI解答(1)轉(zhuǎn)移的有效地址EA= BX=1256H(2)轉(zhuǎn)移的有效地址EA= DS:2

80、0A1H+1256H=232F7=3280H(3)轉(zhuǎn)移的有效地址EA= DS:1256H+528FH=264E5H=2450H習(xí)題2.20判斷下列程序段跳轉(zhuǎn)的條件            (1) xor ax,1e1eh                       je equal 

81、;          (2)test al,b                     jnz there           (3)cmp cx,64h     

82、60;               jb there解答(1)AX1e1eh(異或后為0)(2)AL的D0或D7至少有一位為1(3)CX(無符號數(shù)) 64h習(xí)題2.21設(shè)置CX = 0,則LOOP指令將循環(huán)多少次?例如:              mov cx,0delay:   loop dela

83、y解答   216次。習(xí)題2.22假設(shè)AX和SI存放的是有符號數(shù),DX和DI存放的是無符號數(shù),請用比較指令和條件轉(zhuǎn)移指令實(shí)現(xiàn)以下判斷: (1)若DX > DI,轉(zhuǎn)到above執(zhí)行;(2)若AX > SI,轉(zhuǎn)到greater執(zhí)行;(3)若CX = 0,轉(zhuǎn)到zero執(zhí)行;(4)若AXSI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;(5)若SIAX,轉(zhuǎn)到less_eq執(zhí)行;(6)若DIDX,轉(zhuǎn)到below_eq執(zhí)行。解答(1)若DX > DI,轉(zhuǎn)到above執(zhí)行         &

84、#160; cmp dx,di           ja above              ;jnbe above(2)若AX > SI,轉(zhuǎn)到greater執(zhí)行           cmp ax,si     

85、      jg greater            ;jnle greater(3)若CX = 0,轉(zhuǎn)到zero執(zhí)行           cmp cx,0           jz zero    

86、;           ; jcxz zero   (4)若AXSI產(chǎn)生溢出,轉(zhuǎn)到overflow執(zhí)行;           cmp ax,si           jo overflow(5)若SIAX,轉(zhuǎn)到less_eq執(zhí)行;    &

87、#160;      cmp si,ax             ; cmp ax,si           jle less_eq           ; jge less_eq(6)若DIDX,轉(zhuǎn)到below_eq執(zhí)行。

88、60;          cmp di,dx             ; cmp dx,di           jbe below_eq          ; jae below_eq習(xí)題2.23有

89、一個首地址為array的20個字的數(shù)組,說明下列程序段的功能。            mov cx,20           mov ax,0           mov si,axsum_loop:  add ax,arraysi     

90、;      add si,2           loop sum_loop           mov total,ax解答將首地址為array得20個字的數(shù)組求和,并將結(jié)果存入 total 單元中。習(xí)題2.24按照下列要求,編寫相應(yīng)的程序段: (1)起始地址為string的主存單元中存放有一個字符串(長度大于6),把該字符串中的第1個和第6個

91、字符(字節(jié)量)傳送給DX寄存器。(2)從主存buffer開始的4個字節(jié)中保存了4個非壓縮BCD碼,現(xiàn)按低(高)地址對低(高)位的原則,將它們合并到DX中。(3)編寫一個程序段,在DX高4位全為0時,使AX = 0;否則使AX = -1。(4)有兩個64位數(shù)值,按“小端方式”存放在兩個緩沖區(qū)buffer1和buffer2中,編寫程序段完成buffer1buffer2功能。(5)假設(shè)從B800h : 0開始存放有100個16位無符號數(shù),編程求它們的和,并把32位的和保存在DX.AX中。(6)已知字符串string包含有32KB內(nèi)容,將其中的$符號替換成空格。(7)有一個100個字節(jié)元素的數(shù)組,其首

92、地址為array,將每個元素減1(不考慮溢出)存于原處。(8)統(tǒng)計以 $ 結(jié)尾的字符串srting的字符個數(shù)。解答(1)解答:           mov si,0           mov dl,stringsi   ;第1個字符送dl寄存器:mov dl,stirng0        

93、0;  mov si,5           mov dh,stringsi   ;第6個字符送dh寄存器:mov dl,stirng5(2)解答:           xor si,si           ;si清零    &

94、#160;      mov al,buffersi   ;第一字節(jié)           inc si           mov ah,buffersi   ;第二字節(jié)           mov cl,4&

95、#160;          shl ah,cl             ;BCD碼移到高半字節(jié)           or al,ah             

96、 ;組合成壓縮BCD碼           mov dl,al                   ;存入dl寄.           inc si      

97、     mov al,buffersi   ;第三字節(jié)           inc si           mov ah,buffersi   ;第四字節(jié)           mov cl,4  

98、         shl ah,cl             ;BCD碼移到高半字節(jié)           or al,ah              ;組合成壓縮BCD碼

99、           mov dh,al             ;存入dh寄.(3)解答:           test dx,0f000h        ; test dh,0f0h  

100、         jz next               ; jnz next           mov ax,-1             ; mov

101、ax,0           jmp againnext:  mov ax,0              ; mov ax,0ffffhagain:     .(4)解答:           mov ax, word ptr buffer1           sub ax, word ptr buffer2     ;先減低16位      

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論