版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第1章習題參考解答1.1.填空和選擇(1)運算器和控制器合在一起稱為中央處理器,中央處理器和存儲器、I/O接口、總線及電源合在一起被稱為主機。(2)計算機的軟件一般分為兩大類:一類叫系統(tǒng)軟件軟件,一類叫應用軟件軟件。數(shù)據庫管理系統(tǒng)屬于系統(tǒng)軟件軟件,計算機輔助教學軟件屬于應用軟件軟件。(3)用來管理計算機系統(tǒng)的資源并調度用戶的作業(yè)程序的軟件稱為操作系統(tǒng);負責將高級語言的源程序翻譯成目的程序的軟件稱為編譯程序。(4)計算機系統(tǒng)中的存儲器分為外存儲器和內存儲器。在CPU執(zhí)行指令時,必須將指令存放在內存儲器中。(5)計算機存儲數(shù)據的最小單位是字節(jié)。1KB容量的存儲器能夠存儲1024個這樣的基本單位。(6)在計算機系統(tǒng)中,多個系統(tǒng)部件之間信息傳送的公共通道稱為總線。就其傳送的信息的性質而言,在公共通道上傳送的信息包括控制和數(shù)據信息。(7)采用2的補碼形式表示的8位二進制整數(shù),其可表示的數(shù)的范圍為(A)。A.-128~+127 B.-2-127~+2-127C.-2-128~2+127 D.-127~+128(8)在定點數(shù)運算中產生溢出的原因是(C)。A.運算過程中最高位產生了進位或借位B.參加運算的操作數(shù)超出了機器的表示范圍C.運算的結果超出了結果單元的表示范圍D.寄存器的位數(shù)太少,不得不舍棄最低有效位(9)下列邏輯部件中,不屬于運算器的是(A)。A.指令寄存器 B.ALUC.累加器 D.狀態(tài)條件寄存器2.說明微型計算機的基本硬件構成和各部分功能。微型計算機硬件一般由微處理器、內存儲器、外存儲器、系統(tǒng)總線、接口電路、輸入/輸出設備等部件組成。主要組成部件的功能和特點分析如下:(1)微處理器:是微型計算機的核心部件,由運算單元ALU、控制單元、寄存器組以及總線接口部件等組成,其功能是負責統(tǒng)一協(xié)調、管理和控制系統(tǒng)中的各個部件有機地工作。(2)內存儲器:用來存放計算機工作過程中需要的操作數(shù)據和程序。可分為隨機存儲器RAM和只讀存儲器ROM。RAM存放當前參與運行的各種程序和數(shù)據,特點是信息可讀可寫,存取方便,但信息斷電后會丟失;ROM用于存放各種固定的程序和數(shù)據,特點是信息固定不變,關機后原存儲的信息不會丟失。(3)系統(tǒng)總線:是CPU與其它部件之間傳送數(shù)據、地址和控制信息的公共通道??煞殖蓴?shù)據總線DB、地址總線AB、控制總線CB。(4)輸入/輸出接口電路:完成微型計算機與外部設備之間的信息交換。由寄存器組、專用存儲器和控制電路等組成。(5)輸入/輸入設備:是微型計算機系統(tǒng)與外部進行通信聯(lián)系的主要裝置。常用的有鍵盤、鼠標、顯示器、打印機和掃描儀等。3.說明微型計算機系統(tǒng)的基本構成。微型計算機系統(tǒng)包括硬件系統(tǒng)和軟件系統(tǒng)兩大部分。一、計算機硬件系統(tǒng)硬件是指組成計算機的各種物理設備,它包括計算機的主機和外部設備。具體由五大功能部件組成,即:運算器、控制器、存儲器、輸入設備和輸出設備。這五大部分相互配合,協(xié)同工作。二、計算機軟件系統(tǒng)計算機軟件系統(tǒng)包括系統(tǒng)軟件和應用軟件兩大類。1.系統(tǒng)軟件系統(tǒng)軟件是指控制和協(xié)調計算機及其外部設備,支持應用軟件的開發(fā)和運行的軟件。其主要的功能是進行調度、監(jiān)控和維護系統(tǒng)等等。2.應用軟件應用軟件是用戶為解決各種實際問題而編制的計算機應用程序及其有關資料。三、硬件和軟件的關系1.硬件與軟件是相輔相成的,硬件是計算機的物質基礎,沒有硬件就無所謂計算機。2.軟件是計算機的靈魂,沒有軟件,計算機的存在就毫無價值。3.硬件系統(tǒng)的發(fā)展給軟件系統(tǒng)提供了良好的開發(fā)環(huán)境,而軟件系統(tǒng)發(fā)展又給硬件系統(tǒng)提出了新的要求。7.把+進制數(shù)2000變成二進制數(shù)、八進制數(shù)和+六進制數(shù)。2000=7D0H=3720Q=11111010000B8.把0.213變成二進制數(shù)、+六進制數(shù)(精確到小數(shù)點后4位)。0.213=0.3687H=0.1550Q=0.001lB9.用4位運算器完成如下計算,并解釋所得結果:(1)無符號數(shù) 6+4 (2)無符號數(shù) 3-4(3)符號數(shù) 3+4 (4)符號數(shù) 3-4(5)符號數(shù) -3-4 (6)符號數(shù) -5-4(1)無符號數(shù)6+4 1010 C=0,結果正確(2)無符號數(shù)3-4 1111 C=1,結果不正確(3)符號數(shù) 3+4 0111 V=0,N=0,正數(shù),結果正確(4)符號數(shù) 3-4 1111 V=0,N=1,負數(shù),結果正確(5)符號數(shù) -3-4 1001 V=0,N=1,負數(shù),結果正確(6)符號數(shù) -5-4 0111 V=l,N=0,負溢出,結果不正確10.計算機內是如何表示+進制數(shù)的?它有哪幾種表示方法?用4位二進制數(shù)表示1位+進制數(shù),其中有6種非法代碼(比如8421碼中的1010B~1111B)不用。壓縮的BCD數(shù),及非壓縮的BCD數(shù)(包括ASCII數(shù))。l3.用+進制BCD碼計算X=35+46,Y=35-46,Z=45+57,說明運算過程并解釋結果。35 35 45+46 - 46 +577B EF 9C+06 -66 +66(+進制修正)81 89 02C=0,正確 C=1,溢出 C=1,溢出14.與用2的補碼[X]補+[-Y]補來計算[X-Y]補一樣,試用“+的補碼”來計算1.13中的Y,并解釋所得結果。因為-46的“+的補碼”是54(=100-46),所以35-46=35+(54)的補,計算如下: 35 +54 89且C=1(補碼加時,無進位表示有“借位”)若把89看成“+的補碼”表示的符號數(shù),則它表示:-11(=-(100-89))。19.若A=01000011B,說明用什么運算可完成下述操作: (1)把A的第0、2、4、6位變反; (2)把A的第1、2、3位清零; (3)把A的第4、5、6位置1;(1)XOR A,01010101B(2)AND A,11110001B(3)OR A,01110000B第2章習題參考解答1.8086處理器內部一般包括哪些主要部分?8086處理器與其他處理器一樣,其內部有算術邏輯部件、控制與定時部件、總線與總線接口部件、寄存器陣列等。按功能結構可分為兩部分,即總線接口單元(BIU)與執(zhí)行單元(EU)。BIU主要包括段寄存器、內部通信寄存器、指令指針、6字節(jié)指令隊列、20位地址加法器和總線控制邏輯電路。EU主要包括通用寄存器陣列、算術邏輯單元、控制與定時部件等。2.什么是總線?—般微機中有哪些總線?所謂總線是指計算機中傳送信息的一組通信導線,它將各個部件連接成—個整體。在微處理器內部各單元之間傳送信息的總線稱為片內總線;在微處理器多個外部部件之間傳送信息的總線稱為片外總線或外部總線。外部總線又分為地址總線、數(shù)據總線和控制總線。隨著計算機技術的發(fā)展,總線的概念越來越重要。微機中常用的系統(tǒng)總線有PC總線、ISA總線、PCI總線等。3.什么是堆棧?它有什么用途?堆棧指針的作用是什么?堆棧是一個按照后進先出的原則存取數(shù)據的部件,它是由棧區(qū)和棧指針組成的。堆棧的作用是:當主程序調用子程序、子程序調用子程序或中斷時轉入中斷服務程序時,能把斷點地址及有關的寄存器、標志位及時正確地保存下來,并能保證逐次正確地返回。堆棧除了有保存數(shù)據的棧區(qū)外,還有一個堆棧指針SP,它用來指示棧頂?shù)奈恢?。若是“向下生成”的堆棧,隨著壓入堆棧數(shù)據的增加,棧指針SP的值減少。但SP始終指向棧頂。4.在8086CPU中,F(xiàn)R寄存器有哪些標志位?分別說明各位的功能。8086CPU中設置了一個16位的標志寄存器FR,其中用了9位,還有7位保留。9位中有3位作為控制標志,6位作為狀態(tài)標志。IF:中斷控制標志。當IF=1時,允許可屏蔽中斷請求;當IF=0時,禁止可屏蔽中斷請求。TF:單步運行標志。當TF=1,單步運行;TF=0,連續(xù)運行程序。DF:方向標志。當DF=0,串操作時地址按增量修改;DF=1,地址按減量修改。SF:符號(負數(shù))標志。當運算結果的最高位為1(負數(shù))時,SF=1;反之SF=0。ZF:零標志。當運算結果為0,則ZF=1;否則ZF=0。AF:輔助進位/借位標志。當算術運算時低4位有進位/借位,則AF=1;否則AF=0。AF主要用于BCD碼運算中進行結果調整。PF:奇偶標志。當運算結果低8位中1的個數(shù)為偶數(shù)時PF=1;否則PF=0。CF:進位/借位標志。當算術運算結果最高位有進位/借位時,CF=1;否則CF=0。邏輯運算時CF=0,循環(huán)移位指令也影響CF標志。OF:溢出標志。當符號數(shù)算術運算結果有溢出時OF=1;否則OF=0。5.在8086CPU中,有哪些通用寄存器和專用寄存器?試說明專用寄存器的作用。8086CPU中有4個16位的通用寄存器,即AX、BX、CX、DX。每個16位寄存器又可分為2個,共8個8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL。4個段寄存器(即代碼段寄存器CS、數(shù)據段寄存器DS、堆棧段寄存器SS和附加段寄存器ES)用來存放各段的起始地址。FR用來存放標志。IP用來存放程序地址的偏移量,它不能提供給程序員編程。SP是堆棧指針,專門用來指示堆棧位置。BP為基址指針,作為基址寄存器使用,它與變址寄存器SI、DI配合作為一個尋址方式。BP主要用來訪問堆棧段中的數(shù)據。6.若CS=8000H,試說明現(xiàn)行代碼段可尋址的存儲空間范圍。若CS=8000H,現(xiàn)行代碼段可尋址的存儲空間范圍為80000H~8FFFFH。7.設現(xiàn)行數(shù)據段位于存儲器的B0000H~BFFFFH,試說明DS段寄存器的內容。DS=B000H8.設雙字12345678H的起始地址為A001H,試說明這個雙字在存儲器中是如何存放的。地址RAMA0001H78A0002H56A0003H34A0004H12該雙字在存儲器中的存放如下:9.說明8086的EU和BIU的主要功能。8086CPU的BIU對外提供16位雙向數(shù)據總線和20位地址總線。它負責完成所有的外部總線操作,即完成取指令、指令排隊、讀與寫操作、地址轉換和總線控制。執(zhí)行單元EU的主要功能是完成指令譯碼與執(zhí)行指令工作。EU從BIU的指令隊列輸出端取得指令,對指令的代碼進行譯碼,產生操作數(shù)地址并將其傳送給BIU,向BIU申請完成存儲器或I/O的讀寫周期,對操作數(shù)進行指令規(guī)定的操作。在指令執(zhí)行期間,EU測試標志位,根據指令執(zhí)行的結果修改標志位。若指令隊列是空的,EU等待下一次取得指令字節(jié),且修改指令隊列的輸出指針。EU有一個16位的ALU,專門用來對操作數(shù)進行算術和邏輯運算。10.說明8086CPU組成的系統(tǒng)中為什么必須使用地址鎖存器?8086的數(shù)據總線和低16位地址總線是采用分時復用的。當執(zhí)行存儲器讀寫或I/O讀寫,在CPU總線周期的T1狀態(tài)時,作地址總線輸出(A15~A0),在其他狀態(tài)均作為雙向數(shù)據總線使用。地址總線的高4位A19~A16也是復用線,但他們是地址/狀態(tài)復用線。為了使地址信息在整個總線周期中均保持有效地址,必須設置地址鎖存器把T1狀態(tài)上輸出的20條地址信息進行鎖存。11.8086CPU的最大尋址范圍是多少?如何實現(xiàn)對整個地址空間尋址?8086的存儲器最大尋址范圍為1M字節(jié)(地址為00000H~FFFFFH);I/O尋址的最大范圍為64K(口地址為0000H~FFFFH)。對1M存儲器的尋址是通過段寄存器來實現(xiàn)的,每個存儲器段為64K字節(jié),1M字節(jié)的存儲器可以分為若干個64KB段,利用段寄存器可尋址整個存儲空間。對I/O空間的尋址可使用直接尋址(對8位口地址);也可使用DX進行間接尋址(對16位口地址)。16.在8086中,地址/數(shù)據復用信號是如何區(qū)分的?在8086中,地址/數(shù)據復用信號是在時間上區(qū)分的。在總線周期的T1狀態(tài),CPU在這些引腳上輸出存儲器或I/O端口地址,在T2、T3、T4狀態(tài)則輸出數(shù)據收發(fā)信號。第3章習題及參考解答1.指出下列各指令中源操作數(shù)和目的操作數(shù)的尋址方式。(1)MOVDI,100(2)MOVCX.100[SI](3)MOV[SI],AX(4)ADDAX,[BX+DI](5)ANDAX,BX(6)MOVDX,[1000](7)MOVBX,[BP+DI+100](8)PUSHF(9)SUB[1050],CX(10)ANDDH,[BP+4]解源操作數(shù) 目的操作數(shù)(1)立即尋址 寄存器尋址(2)變址尋址 寄存器尋址(3)寄存器尋址 寄存器間接尋址(4)基址加變址尋址 寄存器尋址(5)寄存器尋址 寄存器尋址(6)直接尋址 寄存器尋址(7)基址加變址尋址 寄存器尋址(8)寄存器尋址 寄存器間接尋址(9)寄存器尋址 直接尋址(10)變址尋址 寄存器尋址2.試述指令MOVAX,2000H和MOVAX,DS:[2000H]的區(qū)別?解區(qū)別有三條:MOVAX,2000H對源操作數(shù)是立即尋址,而MOVAX.[2000H]對源操作數(shù)是直接尋址;前者功能是把立即數(shù)2000H送入AX中,而后者是把內存2000H單元與2001H單元的內容取出送入AX中;兩者的機器代碼不同,執(zhí)行速度也不同,前者執(zhí)行時間快,后者執(zhí)行時間慢。4.若DS=4000H,BX=0800H,[40800H]=05AOH,[40802H]=2000H,求執(zhí)行指令LDSSI,[BX]后,DS與SI中的內容。若上題中的DS換成ES,其他條件不變,求執(zhí)行指令LESDI,[BX]后,ES與DI中的內容。解SI=05AOH,DS=2000HDI=05AOH,ES=2000H5.若AX=98ABH,BX=A8BCH。求執(zhí)行指令ADDAX,BX后,AX與BX中的內容,并指出SF,ZF,AF,PF,CF和OF的狀態(tài)。解AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。6.若CX=6700H,DX=78FFH,CF=1。求分別執(zhí)行指令(1)ADDCX,DX(2)ADCCX,DX(3)SUBCX,DX(5)ANDCX,DX(6)ORCX,DX(7)XORCX,DX后,CX與DX寄存器中的內容,并指出標志寄存器SF,ZF,AF,PF,CF及OF的狀態(tài)。解(1)CX=DFFFH,DX=78FFH,SFZFAFPFCFOF=100101B(2)CX=E000H,DX=78FFH,SFZFAFPFCFOF=101101B(3)CX=EE01H,DX=78FFH,SFZFAFPFCFOF=101010B(4)CX=EE00H,DX=78FFH,SFZFAFPFCFOF=101110B(5)CX=6000H,DX=78FFH,SFZFAFPFCFOF=00×100B(6)CX=7FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B(7)CX=1FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B7.若AX=FFFEH,BX=FFFDH,求執(zhí)行指令IMULBX后,DX與AX中的內容。指出標志位OF與CF的狀態(tài)。解AX=0006H,DX=0000H,OFCF=00B8.若AL=75H,BL=48H,(1)求執(zhí)行指令ADDAL,BLDAA之后AL=?標志AF=?CF=?并說明BCD碼調整情況。(2)若執(zhí)行指令SUBAL,BL與DAS后,情況又如何?解(1)AL=23H,AFCF=11B(2)AL=27H,AFCF=10B9.設X、Y、R、S、Z均為16位無符號數(shù)的變量。按已給定的表達式Z(X+Y)/(R-S)→Z,有程序如下,試在空格處填入適當?shù)闹噶?注:在加減過程中均無進位和借位)。MOVAX,X①MOVCX,RSUBCX,S②③MOVZ,AXMOVZ+1,DXHLT解①ADDAX,Y②MULZ③DIVCX10.若有一個四字節(jié)數(shù),放在寄存器DX與AX中(DX中放高16位),要求這個4字節(jié)數(shù)整個左移一位如何實現(xiàn)?右移一位又如何實現(xiàn)?解(1)DX與AX左移一位:SHLAX,01RCLDX,01(2)DX與AX右移一位:SHRDX,01RCRAX,0111.若把1K字節(jié)的數(shù)據塊從偏移地址為1000H開始的單元傳送到偏移地址為1400H開始的緩沖區(qū)。試用串傳送操作指令和一般傳送指令兩種方法各編一程序實現(xiàn)。解(1)利用串操作指令編程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HCLDREP MOVSBMOVAM,4CHINT21H(2)利用一般傳送指令編程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HNEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPNEXTMOVAH,4CHINT21H12.若在內存緩沖區(qū)中有一個長度為256個字節(jié)的數(shù)據塊,起始地址偏移量為2000H。數(shù)據塊中的數(shù)據有正有負,要求把其中的正負數(shù)分開.分別送至同段的兩個緩沖區(qū),存放正數(shù)的緩沖區(qū)的起始地址偏移量為2100H,存放負數(shù)的緩沖區(qū)的起始地址偏移量為2200H。試編一程序。解MOVSI,2000HMOVCX,100HXORDX,DXLOOP: MOVAL,[SI]ADDAL,0JNSPLUSINCDHNEXT: INCSIDECCXJNZLOOPJMPSTOPPLUS: INCDLJMPNEXTSTOP: MOV[2100H],DLMOV[2200H],DHMOVAH,4CHINT21H13.若SS=1000H,SP=1000H,AX=1234H,BX=5678H,F(xiàn)lag=2103H,試說明執(zhí)行指令PUSHBXPUSHAXPUSHFPOPCX之后,SP=?SS=?CX=?并畫圖指出棧中各單元的內容。解SS=1000H,SP=0FFCH,CX=2103H棧中各單元內容如下:地址 RAM0FFAH 030FFBH 210FFCH 340FFDH 120FFEH 780FFFH 561000H XX14.若DS=1100H,SI=1000H,CS=1200H,IP=100H,[12000H]=2000H,[12002]=1500H,求執(zhí)行指令(1)CALLFAR[SI]后CS與IP的內容;(2)CALL[SI]后CS與IP的內容。解(1)CS=1500II,IP=2000H(2)CS=1200H,IP=2000H15.若執(zhí)行指令INT21H后,將轉到何處執(zhí)行程序,指出CS與IP的內容。解將轉到0:0086H和0:0084H處取出雙字作為CS與IP的值,再執(zhí)行程序。CS的值為內存單元0:0086H和0:0087H的內容;IP為內存單元0:0084H與0:0085H的內容。16.編一程序使(1)AX寄存器低4位清零;(2)BX寄存器低4位置1;(3)CX寄存器低4位變反;(4)DX寄存器高3位不變,其余位清零。解(1)ANDAX,F(xiàn)FF0H(2)ORBX,000FH(3)XORCX,000FH(4)ANDDX,E000H18.指出下列8086指令中哪些是錯誤的,錯在何處?(1)MOV DL,BX(2)MOV DS,2000H(3)MOV [DI],[SI](4)MOV AX,[BX][BP](5)XCHG CX,[2400H](6)PUSH DH(7)IN AH,DX(8)OUT 01F0H,AX解(1)錯。數(shù)據類型不匹配。(2)錯。立即數(shù)不能直接送往段寄存器。(3)錯。兩個內存單元不能直接傳送數(shù)據。(4)錯。BX和BP部可作為基址寄存器,缺少變址寄存器。沒有基址加基址尋址方式。(5)對。(6)錯。堆棧操作必須是16位數(shù)據,DH是8位寄存器。(7)錯。輸入(IN)指令從端口讀出的數(shù)據需送給累加器AL或AX,送給AH不行。(8)錯。端口地址為16位時,必須用DX間接尋址。19.連續(xù)執(zhí)行以下指令,填寫執(zhí)行指令的結果(MEM為存儲器物理地址)。MOVAX,2280HMOVCX.0FFOOHMOVDS,AXMOVSI,CXADDCX,AX ;①CX=H,CF=BMOV[SI],CX ;②[SI]=H.[SI+1]=HADC[SI],AL ;③[SI]=H,MEM=HDECBYTE[SI] ;④[SI]=H,ZFCFPF=BMOVAX,06ADCAX,08 ;⑤AX=H,CFAF=BAAA ;⑥AX=H,CFAF=BADDAL,59H ;⑦AL=H,CFAF=BDAA ;⑧AL=HANDAL,0FHMOVBX,-8NEGBX ;⑨BX=HMOVDL,06MULDL ;⑩AX=HORAX,0FF00HCWD ;⑾AX=HIDIVBX ;⑿AX=H,DX=HMOVAH,4CHINT21H解①CX=2180H,CF=1B②[SI]=80H,[SI+1]=21H③[SI]=01H,MEM=32700H④[SI]=00H,ZFCFPF=111B⑤AX=000FH,CFAF=00B⑥AX=0105H,CFAF=11B⑦AL=5EH,CFAF=00B⑧AL=64H⑨BX=0008H⑩AX=0018H⑾AX=FF18H⑿AX=FFE3H,DX=0000H第4章習題及參考解答1.試編一程序,把地址偏移量為100H單元開始的256個單元分別寫入00H,01H,02H,03H,…,F(xiàn)FH數(shù)據。解源程序如下DATA SEGMENT ORG100HBUF1 DB256DUP(?)COUNT EQU$-BUF1DATA ENDSSTK SEGMENTSTACK DB100DUP(?)STK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF1 ;戓LEASI,BUF1MOVCX,COUNTXORAL,AL ;或MOVAL,00HNEXT: MOV[SI],ALINCALINCSILOOPNEXTMOVAH,4CHINT21HCODE ENDS ENDSTART2.統(tǒng)計上題寫入的數(shù)據塊中0元素、正元素、負元素的個數(shù),并分別把統(tǒng)計結果送入上述數(shù)據塊之后的三個單元中。解DATA SEGMENT ORG100HBUF1 DB00H,01H.02H,…,0FEH,0FFH ;共256個數(shù)據COUNT EOU$-BUF1 DB3DUP(?)DATA ENDSSTK SEGMENTSTACK DB100DUP(?)STK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXMOVS1,OFFSETBUF1MOCCX,COUNTXORBX,BX ;BL與BH分別存放正、負元素的個數(shù)XORDH,DH ;DH寄存器存放0元素個數(shù)NEXT2: MOVAL,[SI]CMPAL,0JZZER0 ;若ZF=1,則為0,轉至ZERO,DH+1JSNEGAT ;若SF=0則為負數(shù),BH+1INCBL ;既不是0又不是負,則為正數(shù),BL+1 JMPNEXT3ZERO: INCDH ;0的個數(shù)加1 JMPNEXT3NEGAT:INCBH ;負數(shù)個數(shù)加1NEXT3: INCSI ;修改地址指針SI LOOPNEXT2 ;未完,繼續(xù)循環(huán) MOV[SI],DH ;存入0元素個數(shù)統(tǒng)計結果 INCSI MOV[SI],BX ;存入正、負數(shù)個數(shù)統(tǒng)計結果 MOVAH,4CH INT21HCODE ENDS ENDSTART4.把地址偏移量為STRG1單元開始的128個單元的內容傳送到地址偏移量為STRG2開始的單元中。解DATA SEGMENTSTRGl DBXXH,XXH,XXH,….XXH;128個數(shù)據COUNT EOU$-STRGlSTRG2 DB128DUP(?)DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETSTRG1MOVDI,OFFSETSTRG2MOVCX,COUNTCLDREPMOVSBMOVAH,4CHINT21HCODE ENDS ENDSTART5.寄存器SI做地址指針,自SI所指的內存單元開始連續(xù)存放三個無符號數(shù)(以字為單位),編一程序求它們的和,并將結果存放在這三個數(shù)之后的單元中。解DATA SEGMENTBUF DWXXH,YYH,ZZHSUM DW?,?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVDI,OFFSETSUMMOVAX,[SI]ADDAX,[SI+2]MOV[DI],AXMOVAX,0ADDCAX,0MOV[DI+2],AXMOVAX,[DI]ADDCAX,[SI+4]MOV[DI],AXMOVAX,0ADDCAX,[DI+2]MOV[DI+2],AXMOVAH,4CHINT21HCODE ENDS ENDSTART6.讀下面程序段,問:在什么情況下本段程序的執(zhí)行結果是AH=0?START:INAL,5FHMOVAH,0JZBRCHMOVAH,0JMPSTOPBRCH: MOVAH,0FFHSTOP: INT20H解當標志寄存器的ZF=0時,執(zhí)行結果AH=0。(JZ之前的兩條指令對零標志沒有影響)7.下面語句在存儲器中分別為變量分配多少字節(jié)?0NE DW10TW0 DW4DUP(?),5THREE DB2DUP(?,8DUP(0))COUNT EQU10FOUR DDCOUNTDUP(?)FIVE DB‘HOWAREYOU?’解ONE DW10 ;為ONE分配2個字節(jié)TWO DW4DUP(?),5 ;為TWO分配10個字節(jié)THREE DB2DUP(?,8DUP(0)) ;為THREE分配18個字節(jié)COUNT EQU10 ;不給COUNT分配存儲單元FOUR DDCOUNTDUP(?) ;為FOUR分配40個字節(jié)FIVE DB‘HOWAREYOU?’ ;為FIVE分配12個字節(jié)8.數(shù)據定義語句如下所示:FIRST DB90H,5FH,6EH,69HSECONDDB5DUP(?)THIRD DB5DUP(?)FORTH DBDUP(?)自FIRST單元開始存放的是一個四字節(jié)的十六進制數(shù)(低位字節(jié)在前),要求:(1)編一段程序將這個數(shù)左移兩位后存放到自SECOND開始的單元(注意保留移出部分);(2)編一段程序將這個數(shù)右移兩位后存放到自THIRD開始的單元(注意保留移出部分);(3)編一段程序將這個數(shù)求補后存放到自FORTH開始的單元。解DATA SEGMENTFIRST DB90H,5FH,6EH,69HSECOND DB5DUP(?)THIRDDB5DUP(?)FORTHDB DUP(?)DATA ENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOVAX,DATAMOVDS,AXCALLSUBP1CALLSUBP2CALLSUBP3MOVAH,4CHINT21HSUBP1 PROCMOVSI,OFFSETFIRSTMOVDI,OFFSETSECONDXORBL,BLMOVCL,2MOVAX,[SI]MOVDX,[SI+2]LOP1: SHLAX,1RCLDX,1RCLBL,1DECCLJNZLOP1MOV[DI],AXMOV[DI+2],DXMOV[DI+4],BLRETSUBP1 ENDPSUBP2 PROCMOVSI,OFFSETFIRSTMOVDI,OFFSETTHIRDXORBL,BLMOVCL,2MOVAX,[SI]MOVDX,[SI+2]LOP2: SHRDX,1RCRAX,1RCRBL,1DECCLJNZLOP2MOV[DI],BLMOV[DI+1],AXMOV[DI+3],DXRETSUBP2 ENDPSUBP3 PROCMOVSI,OFFSETFIRSTMOVDI,OFFSETFORTHMOVAX,[SI]MOVDX,[SI+2]NOTAXNOTDXADDAX,1ADCDX,0MOV[DI],AXMOV[DI+2],DXRETSUBP3 ENDPCODE ENDS ENDSTART9.指令語句ANDAX,OPD1ANDOPD2中,OPD1和OPD2是兩個已賦值的變量,問兩個AND操作分別在什么時間進行?有什么區(qū)別?解前面的AND是指令,在程序運行時執(zhí)行,后面的AND是運算符,在匯編的時候由匯編程序計算,表達式計算結果出現(xiàn)在執(zhí)行程序中。二者的區(qū)別在于,前者是指令,程序運行時執(zhí)行,后者是運算符,匯編時計算。10.如下指令或程序是否有錯,若有錯,請指出錯在哪里?(1)KI EOU1024 ┇ MOVK1,AX(2) MOVDS,100 MOV[1000],[2000](3)IMP DB? ┇ MOVIMP,AX(4)A1 DB?A2 DB10 ┇ CMPA1,A2(5)將1000送入X1單元,用如下程序:X1 DB? ┇ MOVBX,X1 MOV[BX],1000解(1)MOVK1,AX錯。因為K1為立即數(shù),它不能作為目的操作數(shù)。(2)這兩條指令都是錯的。第一條立即數(shù)不能直接送給段寄存器;第二條兩個操作數(shù)不能同時為內存操作數(shù)。(3)MOVIMP,AX錯。兩操作數(shù)類型不匹配,IMP是一字節(jié)內存單元,而AX寄存器中為16位數(shù)據。(4)CMPA1,A2錯。兩個操作數(shù)A1與A2不能同時為內存操作數(shù)。(5)MOV[BX],1000錯。兩操作數(shù)類型不匹配,[BX]只定義了一字節(jié)單元,而1000是16位數(shù)據。11.8086匯編語言程序中段的類型有幾種?各段如何定義?段定義語句中,定位類型、組合類型、類別各起什么作用?各有什么含義?解8086匯編語言中,段的類型有三種,即代碼段、堆棧段、數(shù)據段(附加數(shù)據段可歸屬于數(shù)據段)。各段可用段定義語句(SEGMENT與ENDS)和段名賦給段寄存器語句(ASSUME)來定義。段定義語句中,定位類型表示此段的起始邊界要求,可允許4種段的起始邊界,即PAGE、PARA、WORD或BYTE。它們分別表示段的起始值為以頁、節(jié)、字、字節(jié)為邊界,若此項省略,則默認值為PARA。組合類型用來告訴連接程序本段與其他段的關系,分別為NONE、PUBLIC、COMMON、AT表達式、STACK或MEMORY。每一種的含義請參看主教材。類別是連接程序(LINK)需要的。它可以是任何合法的名稱,必須用單引號括起來,連接程序只使同類別的段發(fā)生關聯(lián)。典型類別如‘CODE’、'STACK'。12.使用DOS功能調用0AH從鍵盤輸入40個字符的字符串并將其送入一輸入緩沖區(qū)。在按下Enter鍵后,顯示這些字符。解NAME KBDINPUTCODE SEGMENT ASSUMECS:CODE,DS:CODE ORG100HSTART:JMPBEGINBUF DB41NUMB DB?CHARS DB41DUP(?)MSG1 DB'Typeanything,followedbyenter.',0DH,0AH,'$'MSG2 DB 0DH,0AH,'ContentsoftheKBDinputbuf:',0DH,0AH,'$'BEGIN:MOVAX,CSMOVDS,AXMOVDX,OFFSETMSG1MOVAH,9INT21HMOVDX,OFFSETBUFMOVAH,0AHINT21HMOVDX,OFFSETMSG2MOVAH,9INT21HXORBX,BXMOVBL,NUMBMOVCHARS[BX],'$'MOVDX,OFFSETCHARSMOVAH,9INT21HMOVAH,4CHINT21HCODE ENDS ENDSTART說明本題把數(shù)據區(qū)放在代碼段中,沒有單獨定義數(shù)據段。并且用ORG100H語句把程序起始地址的偏移量放在100H開始的單元,用JMPBEGIN指令跳過數(shù)據區(qū),這樣可以把該程序經匯編、連接后的執(zhí)行程序(.EXE)用EXE2BIN軟件生成.COM文件?;颍篋ATA SEGMENTBUF DB41NUMB DB?CHARS DB41DUP(?)MSG1 DB'Typeanything,followedbyenter.',0DH,0AH,'$'MSG2 DB 0DH,0AH,'ContentsoftheKBDinputbuf:',0DH,0AH,'$'DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMSG1MOVAH,9INT21HMOVDX,OFFSETBUFMOVAH,0AHINT21HMOVDX,OFFSETMSG2MOVAH,9INT21HXORBX,BXMOVBL,NUMBMOVCHARS[BX],'$'MOVDX,OFFSETCHARSMOVAH,9INT21HMOVAH,4CHINT21HCODE ENDS ENDSTART13.某軟件共可接收10個鍵盤命令(分別為A,B,C,…,J),完成這10個命令的程序分別為過程P0,P1,…,P9。編一程序從鍵盤接收命令,并轉到相應的過程去執(zhí)行。要求用兩種方法:(1)用比較、轉移指令實現(xiàn);(2)用跳轉表實現(xiàn)。解(1)用比較、轉移指令實現(xiàn)CODE SEGMENT ASSUMECS:CODE ORG100HSTART:JMPBEGlNMSG DB'Errorcharacter!',0DH,OAH,'$'BEGlN:MOVAX,CS MOVDS,AXMOVAH,1INT21HCMPAL,'A'JZPS0CMPAL,'B'JZPS1CMPAL,'C'JZPS2CMPAL,'D'JZPS3CMPAL,'E'JZPS4CMPAL,'F'JZPS5CMPAL,'G'JZPS6CMPAL,'H'JZPS7CMPAL,'I'JZPS8CMPAL,'J'JZPS9MOVDX,OFFSETMSGMOVAH,9INT21HJMPBEGINPS0: CALLP0 JMPBEGINPS1: CALLP1 JMPBEGINPS2: CALLP2 JMPBEGIN ┇PS9: CALLP9 JMPBEGINMOVAH,4CHINT21HP0 PROC┇ RETP0 ENDPP1 PROC┇ RETP1 ENDP┇P9 PROC┇ RETP9 ENDPCODE ENDS ENDSTART或: DATA SEGMENTMSG DB'Errorcharacter!',0DH,OAH,'$'DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA ORG100HSTART:MOVAX,DATA MOVDS,AXMOVAH,1INT21HCMPAL,'A'JZPS0CMPAL,'B'JZPS1CMPAL,'C'JZPS2CMPAL,'D'JZPS3CMPAL,'E'JZPS4CMPAL,'F'JZPS5CMPAL,'G'JZPS6CMPAL,'H'JZPS7CMPAL,'I'JZPS8CMPAL,'J'JZPS9MOVDX,OFFSETMSGMOVAH,9INT21HJMPBEGINPS0: CALLP0 JMPBEGINPS1: CALLP1 JMPBEGINPS2: CALLP2 JMPBEGIN ┇PS9: CALLP9 JMPBEGINMOVAH,4CHINT21HP0 PROC┇ RETP0 ENDPP1 PROC┇ RETP1 ENDP┇P9 PROC┇ RETP9 ENDPCODE ENDS ENDSTART(2)用跳轉表實現(xiàn)DATA SEGMENTPTAB DW0000H;FirstprogramentranceDW0100HDW0200HDW0300HDW0400HDW0500HDW0600HDW0700HDW0800HDW0900H;NineteenthprogramentranceDATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXMOVBX,OFFSETPTABMOVAH,1INT21HXORAH,AHSUBAL,41HLOP: SHLAX,1ADDBX,AXJMPWORDPTR[BX]討論實現(xiàn)該題的功能用兩種方法都可以,顯然,用跳轉表實現(xiàn)要簡單快捷得多。所以遇到多分支程序結構時采用跳轉表比用條件轉移指令更方便。14.內存自BUFF單元的緩沖區(qū)連續(xù)放著512個學生的英文分數(shù),編程序統(tǒng)計其中90~100,60~89,60分以下者各有多少人,并把結果連續(xù)存放到RESULT開始的單元中。解DATA SEGMENTBUFl DB86,92,65,78,45,88,55,100,…,76;共有512個字節(jié)數(shù)據,數(shù)據范圍為0~100COUNT EOU$-BUF1RESULT DW3DUP(?)DATA ENDSSTACK SEGMENTSTACK'STACK'STAPN DB100HDUP(?)STACK ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUF1MOVDI,OFFSETRESULTMOVCX,COUNTCLDXORBX,BX ;BX存放90~100分的學生個數(shù)XORDX,DX ;DX存放60~89分的學生個數(shù)XORBP,BP ;BP存放00~59分的學生個數(shù)NEXT: LODSB ;取學生分數(shù)CMPAL,90 ;是否大干等于90分JNCNEXT1 ;大于等于90分,轉到BX+1CMPAL,60 ;是否大于等于60分JNCNEXT2 ;大干等于60分,轉到DX+1INCBP ;小于60分,BP+1JMPDONENEXT1:INCBX ;90~100分的個數(shù)加1 JMPDONENEXT2:INCDX ;60~89分的個數(shù)加1DONE: LOOPNEXTMOV[DI],BXADDDI,2MOV[DI],DXADDDI,2MOV[DI],BPMOVAH,4CHINT21HCODE ENDS ENDSTART15.設有一數(shù)據塊,共有100個字節(jié),試找出數(shù)據塊中最大者,并把它送至MAX單元中。解CODE SEGMENT ASSUMECS:CODE,DS:CODE 0RG100HSTART:JMPBEGINBUF DB12H,56H,0ABH,…,0FDH,00H;共100個字節(jié)無符號數(shù)COUNT EQU$-BUFMAX DB?BEGIN:MOVAX,CSMOVDS,AXMOVSI,OFFSETBUFMOVCX,COUNTMOVAL,[SI]LOP1: INCSICMPAL,[SI]JGLOP2XCHGAL,[SI] ;用MOVAL,[SI]似乎要好一些,不會破壞原始數(shù)據。LOP2: LOOPLOP1MOVMAX,ALMOVAH,4CHINT21HCODE ENDS ENDSTART或:DATA SEGMENTBUF DB12H,56H,0ABH,…,0FDH,00H;共100個字節(jié)無符號數(shù)COUNT EQU$-BUFMAX DB?DATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATA 0RG100HSTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFMOVCX,COUNTMOVAL,[SI]LOP1: INCSICMPAL,[SI]JGLOP2XCHGAL,[SI] ;用MOVAL,[SI]似乎要好一些,不會破壞原始數(shù)據。LOP2: LOOPLOP1MOVMAX,ALMOVAH,4CHINT21HCODE ENDS ENDSTART19.在偏移量為First和Two的內存單元中,分別有兩個雙字節(jié)帶符號數(shù)X和Y。試編一程序,若X<Y,則清除中斷標志,否則就把方向標志置位。解DATA SEGMENTFIRST DWXTW0 DWYDATA ENDSCODE SEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETFIRSTMOVAX,[SI]ADDSI,2MOVBX,[SI]CMPAX,BXJLZCL1STDJMPSTOPZCL1: CLISTOP: MOVAH,4CH INT21HCODE ENDS ENDSTART2l.編一程序,把鍵入的十六進制數(shù)轉換成十進制數(shù)并在屏幕上顯示出來。鍵入的最大數(shù)為FFFFH,若鍵入的不是十六進制數(shù)字,則顯示出錯提示。解參看例4.1626.編一子程序,在指定的內存區(qū)域中搜索指定的字節(jié),如找到,則返回該字節(jié)的位置,否則返回-1。要求使用堆棧傳遞參數(shù),同時提供子程序清單。要求同時提供一個測試用的主程序,以使所有程序可以運行和驗證。解:DATA SEGMENTBUF DB01H,02H,03H,04H,05H,06H,07H,08H,09H ;數(shù)據塊COUNT EQU$-BUF ;塊長度KEYB DB05H ;搜索的字節(jié)值ADDRRDW? ;存放結果單元DATA ENDSSTACKSEGMENTSTACK DB10DUP('STACK') ;堆棧區(qū),填充STACK字符STACKENDSCODESEGMENT ASSUMECS:CODE,DS:DATA,SS:STACKSTART: MOVAX,DATA ;主程序 MOVDS,AX LEASI,BUF MOVCX,COUNT LEADI,ADDRR MOVAL,KEYB PUSHSI ;內存區(qū)首地址入棧 PUSHCX ;數(shù)據塊長度入棧 PUSHDI ;結果單元地址入棧 PUSHAX ;待搜索的關鍵字入棧 CALLFINDK ;調用搜索子程序 MOVAH,4CH INT21HFINDK PROC ;搜索子程序 MOVBP,SP ;取棧頂位置到BP MOVAX,[BP+2] ;取搜索的關鍵字到AX(AL) MOVDI,[BP+4] ;取結果單元地址到DI MOVCX,[BP+6] ;取數(shù)據塊長度到CX MOVSI,[BP+8] ;取內存區(qū)首地址到SI MOVWORDPTR[DI],-1 ;置未搜索到標志-1LOP: CMPAL,[SI] JNZNEXT MOV[DI],SI ;搜索到,將該字節(jié)的地址送結果單元 JMPEXITNEXT: INCSI LOOPLOPEXIT: RET8 ;返回并清除棧區(qū)中傳遞的參數(shù)FINDK ENDPCODE ENDS ENDSTART第2章習題參考解答1.8086處理器內部一般包括哪些主要部分?8086處理器與其他處理器一樣,其內部有算術邏輯部件、控制與定時部件、總線與總線接口部件、寄存器陣列等。按功能結構可分為兩部分,即總線接口單元(BIU)與執(zhí)行單元(EU)。BIU主要包括段寄存器、內部通信寄存器、指令指針、6字節(jié)指令隊列、20位地址加法器和總線控制邏輯電路。EU主要包括通用寄存器陣列、算術邏輯單元、控制與定時部件等。2.什么是總線?—般微機中有哪些總線?所謂總線是指計算機中傳送信息的一組通信導線,它將各個部件連接成—個整體。在微處理器內部各單元之間傳送信息的總線稱為片內總線;在微處理器多個外部部件之間傳送信息的總線稱為片外總線或外部總線。外部總線又分為地址總線、數(shù)據總線和控制總線。隨著計算機技術的發(fā)展,總線的概念越來越重要。微機中常用的系統(tǒng)總線有PC總線、ISA總線、PCI總線等。3.什么是堆棧?它有什么用途?堆棧指針的作用是什么?堆棧是一個按照后進先出的原則存取數(shù)據的部件,它是由棧區(qū)和棧指針組成的。堆棧的作用是:當主程序調用子程序、子程序調用子程序或中斷時轉入中斷服務程序時,能把斷點地址及有關的寄存器、標志位及時正確地保存下來,并能保證逐次正確地返回。堆棧除了有保存數(shù)據的棧區(qū)外,還有一個堆棧指針SP,它用來指示棧頂?shù)奈恢?。若是“向下生成”的堆棧,隨著壓入堆棧數(shù)據的增加,棧指針SP的值減少。但SP始終指向棧頂。4.在8086CPU中,F(xiàn)R寄存器有哪些標志位?分別說明各位的功能。8086CPU中設置了一個16位的標志寄存器FR,其中用了9位,還有7位保留。9位中有3位作為控制標志,6位作為狀態(tài)標志。IF:中斷控制標志。當IF=1時,允許可屏蔽中斷請求;當IF=0時,禁止可屏蔽中斷請求。TF:單步運行標志。當TF=1,單步運行;TF=0,連續(xù)運行程序。DF:方向標志。當DF=0,串操作時地址按增量修改;DF=1,地址按減量修改。SF:符號(負數(shù))標志。當運算結果的最高位為1(負數(shù))時,SF=1;反之SF=0。ZF:零標志。當運算結果為0,則ZF=1;否則ZF=0。AF:輔助進位/借位標志。當算術運算時低4位有進位/借位,則AF=1;否則AF=0。AF主要用于BCD碼運算中進行結果調整。PF:奇偶標志。當運算結果低8位中1的個數(shù)為偶數(shù)時PF=1;否則PF=0。CF:進位/借位標志。當算術運算結果最高位有進位/借位時,CF=1;否則CF=0。邏輯運算時CF=0,循環(huán)移位指令也影響CF標志。OF:溢出標志。當符號數(shù)算術運算結果有溢出時OF=1;否則OF=0。5.在8086CPU中,有哪些通用寄存器和專用寄存器?試說明專用寄存器的作用。8086CPU中有4個16位的通用寄存器,即AX、BX、CX、DX。每個16位寄存器又可分為2個,共8個8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL。4個段寄存器(即代碼段寄存器CS、數(shù)據段寄存器DS、堆棧段寄存器SS和附加段寄存器ES)用來存放各段的起始地址。FR用來存放標志。IP用來存放程序地址的偏移量,它不能提供給程序員編程。SP是堆棧指針,專門用來指示堆棧位置。BP為基址指針,作為基址寄存器使用,它與變址寄存器SI、DI配合作為一個尋址方式。BP主要用來訪問堆棧段中的數(shù)據。6.若CS=8000H,試說明現(xiàn)行代碼段可尋址的存儲空間范圍。若CS=8000H,現(xiàn)行代碼段可尋址的存儲空間范圍為80000H~8FFFFH。7.設現(xiàn)行數(shù)據段位于存儲器的B0000H~BFFFFH,試說明DS段寄存器的內容。DS=B000H8.設雙字12345678H的起始地址為A001H,試說明這個雙字在存儲器中是如何存放的。地址RAMA0001H78A0002H56A0003H34A0004H12該雙字在存儲器中的存放如下:9.說明8086的EU和BIU的主要功能。8086CPU的BIU對外提供16位雙向數(shù)據總線和20位地址總線。它負責完成所有的外部總線操作,即完成取指令、指令排隊、讀與寫操作、地址轉換和總線控制。執(zhí)行單元EU的主要功能是完成指令譯碼與執(zhí)行指令工作。EU從BIU的指令隊列輸出端取得指令,對指令的代碼進行譯碼,產生操作數(shù)地址并將其傳送給BIU,向BIU申請完成存儲器或I/O的讀寫周期,對操作數(shù)進行指令規(guī)定的操作。在指令執(zhí)行期間,EU測試標志位,根據指令執(zhí)行的結果修改標志位。若指令隊列是空的,EU等待下一次取得指令字節(jié),且修改指令隊列的輸出指針。EU有一個16位的ALU,專門用來對操作數(shù)進行算術和邏輯運算。10.說明8086CPU組成的系統(tǒng)中為什么必須使用地址鎖存器?8086的數(shù)據總線和低16位地址總線是采用分時復用的。當執(zhí)行存儲器讀寫或I/O讀寫,在CPU總線周期的T1狀態(tài)時,作地址總線輸出(A15~A0),在其他狀態(tài)均作為雙向數(shù)據總線使用。地址總線的高4位A19~A16也是復用線,但他們是地址/狀態(tài)復用線。為了使地址信息在整個總線周期中均保持有效地址,必須設置地址鎖存器把T1狀態(tài)上輸出的20條地址信息進行鎖存。11.8086CPU的最大尋址范圍是多少?如何實現(xiàn)對整個地址空間尋址?8086的存儲器最大尋址范圍為1M字節(jié)(地址為00000H~FFFFFH);I/O尋址的最大范圍為64K(口地址為0000H~FFFFH)。對1M存儲器的尋址是通過段寄存器來實現(xiàn)的,每個存儲器段為64K字節(jié),1M字節(jié)的存儲器可以分為若干個64KB段,利用段寄存器可尋址整個存儲空間。對I/O空間的尋址可使用直接尋址(對8位口地址);也可使用DX進行間接尋址(對16位口地址)。16.在8086中,地址/數(shù)據復用信號是如何區(qū)分的?在8086中,地址/數(shù)據復用信號是在時間上區(qū)分的。在總線周期的T1狀態(tài),CPU在這些引腳上輸出存儲器或I/O端口地址,在T2、T3、T4狀態(tài)則輸出數(shù)據收發(fā)信號。第3章習題及參考解答1.指出下列各指令中源操作數(shù)和目的操作數(shù)的尋址方式。(1)MOVDI,100(2)MOVCX.100[SI](3)MOV[SI],AX(4)ADDAX,[BX+DI](5)ANDAX,BX(6)MOVDX,[1000](7)MOVBX,[BP+DI+100](8)PUSHF(9)SUB[1050],CX(10)ANDDH,[BP+4]解源操作數(shù) 目的操作數(shù)(1)立即尋址 寄存器尋址(2)變址尋址 寄存器尋址(3)寄存器尋址 寄存器間接尋址(4)基址加變址尋址 寄存器尋址(5)寄存器尋址 寄存器尋址(6)直接尋址 寄存器尋址(7)基址加變址尋址 寄存器尋址(8)寄存器尋址 寄存器間接尋址(9)寄存器尋址 直接尋址(10)變址尋址 寄存器尋址2.試述指令MOVAX,2000H和MOVAX,DS:[2000H]的區(qū)別?解區(qū)別有三條:MOVAX,2000H對源操作數(shù)是立即尋址,而MOVAX.[2000H]對源操作數(shù)是直接尋址;前者功能是把立即數(shù)2000H送入AX中,而后者是把內存2000H單元與2001H單元的內容取出送入AX中;兩者的機器代碼不同,執(zhí)行速度也不同,前者執(zhí)行時間快,后者執(zhí)行時間慢。4.若DS=4000H,BX=0800H,[40800H]=05AOH,[40802H]=2000H,求執(zhí)行指令LDSSI,[BX]后,DS與SI中的內容。若上題中的DS換成ES,其他條件不變,求執(zhí)行指令LESDI,[BX]后,ES與DI中的內容。解SI=05AOH,DS=2000HDI=05AOH,ES=2000H5.若AX=98ABH,BX=A8BCH。求執(zhí)行指令ADDAX,BX后,AX與BX中的內容,并指出SF,ZF,AF,PF,CF和OF的狀態(tài)。解AX=4167H,BX=A8BCH,SFZFAFPFCFOF=001011B。6.若CX=6700H,DX=78FFH,CF=1。求分別執(zhí)行指令(1)ADDCX,DX(2)ADCCX,DX(3)SUBCX,DX(5)ANDCX,DX(6)ORCX,DX(7)XORCX,DX后,CX與DX寄存器中的內容,并指出標志寄存器SF,ZF,AF,PF,CF及OF的狀態(tài)。解(1)CX=DFFFH,DX=78FFH,SFZFAFPFCFOF=100101B(2)CX=E000H,DX=78FFH,SFZFAFPFCFOF=101101B(3)CX=EE01H,DX=78FFH,SFZFAFPFCFOF=101010B(4)CX=EE00H,DX=78FFH,SFZFAFPFCFOF=101110B(5)CX=6000H,DX=78FFH,SFZFAFPFCFOF=00×100B(6)CX=7FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B(7)CX=1FFFH,DX=78FFH,SFZFAFPFCFOF=00×100B7.若AX=FFFEH,BX=FFFDH,求執(zhí)行指令IMULBX后,DX與AX中的內容。指出標志位OF與CF的狀態(tài)。解AX=0006H,DX=0000H,OFCF=00B8.若AL=75H,BL=48H,(1)求執(zhí)行指令ADDAL,BLDAA之后AL=?標志AF=?CF=?并說明BCD碼調整情況。(2)若執(zhí)行指令SUBAL,BL與DAS后,情況又如何?解(1)AL=23H,AFCF=11B(2)AL=27H,AFCF=10B9.設X、Y、R、S、Z均為16位無符號數(shù)的變量。按已給定的表達式Z(X+Y)/(R-S)→Z,有程序如下,試在空格處填入適當?shù)闹噶?注:在加減過程中均無進位和借位)。MOVAX,X①MOVCX,RSUBCX,S②③MOVZ,AXMOVZ+1,DXHLT解①ADDAX,Y②MULZ③DIVCX10.若有一個四字節(jié)數(shù),放在寄存器DX與AX中(DX中放高16位),要求這個4字節(jié)數(shù)整個左移一位如何實現(xiàn)?右移一位又如何實現(xiàn)?解(1)DX與AX左移一位:SHLAX,01RCLDX,01(2)DX與AX右移一位:SHRDX,01RCRAX,0111.若把1K字節(jié)的數(shù)據塊從偏移地址為1000H開始的單元傳送到偏移地址為1400H開始的緩沖區(qū)。試用串傳送操作指令和一般傳送指令兩種方法各編一程序實現(xiàn)。解(1)利用串操作指令編程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HCLDREP MOVSBMOVAM,4CHINT21H(2)利用一般傳送指令編程如下:MOVSI,1000HMOVDI,1400HMOVCX,400HNEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPNEXTMOVAH,4CHINT21H12.若在內存緩沖區(qū)中有一個長度為256個字節(jié)的數(shù)據塊,起始地址偏移量為2000H。數(shù)據塊中的數(shù)據有正有負,要求把其中的正負數(shù)分開.分別送至
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東外語外貿大學《動物食品安全》2023-2024學年第一學期期末試卷
- 廣東松山職業(yè)技術學院《產品設計初步》2023-2024學年第一學期期末試卷
- 廣東石油化工學院《地震工程學導論》2023-2024學年第一學期期末試卷
- 廣東汕頭幼兒師范高等專科學?!督】档拿孛堋?023-2024學年第一學期期末試卷
- 廣東培正學院《秘書文化學》2023-2024學年第一學期期末試卷
- 廣東農工商職業(yè)技術學院《物理化學B》2023-2024學年第一學期期末試卷
- 廣東南方職業(yè)學院《綠色建筑技術》2023-2024學年第一學期期末試卷
- 廣東理工職業(yè)學院《圖像處理與分析》2023-2024學年第一學期期末試卷
- 二年級數(shù)學計算題專項練習
- 從草根到殿堂:流行音樂導論(上海音樂學院)學習通測試及答案
- 證券公司合規(guī)管理有效性評估參考表
- 消防維保流程
- 華東師大版科學七年級上冊期末測試卷2
- 危機管理與應急響應
- 《安全生產法》宣傳周活動宣貫課件
- 2024年度廢鋼再生資源買賣合同樣本3篇
- 2024年綜合實踐活動課程實施計劃(4篇)
- 2024-2025學年北師版八年級物理上冊期末考試綜合測試卷
- 陸軍第七十五集團軍醫(yī)院招聘筆試真題2023
- 2024年度鍋爐安全檢驗與保養(yǎng)服務合同3篇
- 《政府經濟學》期末考試復習題及答案
評論
0/150
提交評論