8/32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)-錢(qián)曉捷-第2版-課后習(xí)題答案(JJ修改) 1_第1頁(yè)
8/32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)-錢(qián)曉捷-第2版-課后習(xí)題答案(JJ修改) 1_第2頁(yè)
8/32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)-錢(qián)曉捷-第2版-課后習(xí)題答案(JJ修改) 1_第3頁(yè)
8/32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)-錢(qián)曉捷-第2版-課后習(xí)題答案(JJ修改) 1_第4頁(yè)
8/32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)-錢(qián)曉捷-第2版-課后習(xí)題答案(JJ修改) 1_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

8/32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)__錢(qián)曉捷_第2版_課后習(xí)題答案(JJ修改)118/32位微機(jī)原理、匯編語(yǔ)言及接口技術(shù)錢(qián)曉捷第2版課后習(xí)題答案(JJ修改)第一章1.1解:五代,詳細(xì)見(jiàn)書(shū)1.3解:微機(jī)主要有存儲(chǔ)器、I/O設(shè)備和I/O接口、CPU、系統(tǒng)總線、操作系統(tǒng)和應(yīng)用軟件組成,各部分功能如下:CPU:統(tǒng)一協(xié)調(diào)和控制系統(tǒng)中的各個(gè)部件系統(tǒng)總線:傳送信息存儲(chǔ)器:存放程序和數(shù)據(jù)I/O設(shè)備:實(shí)現(xiàn)微機(jī)的輸入輸出功能I/O接口:I/O設(shè)備與CPU的橋梁操作系統(tǒng):管理系統(tǒng)所有的軟硬件資源1.9解:基本RAM區(qū):640KB保留RAM區(qū):128KB擴(kuò)展ROM區(qū):128KB基本ROM區(qū):128KB1.10解:(1)、數(shù)—用來(lái)直接表征量的大小,包括:定點(diǎn)數(shù)、浮點(diǎn)數(shù)。(2)、碼—用來(lái)指代某個(gè)事物或事物的某種狀態(tài)屬性,包括:二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制。區(qū)別:使用場(chǎng)合不同,詳見(jiàn)P18.1.11解:(1)(2)(3)1.12解:原碼反碼補(bǔ)碼+37

00100101/25H

00100101/25H

00100101/25H-37

10100101/A5H

11011010/DAH

11011011/DBH1.13解:+37-3718位32位18位32位0025H00000025HFF5BHFFFFFF5BH1.14解:無(wú)符號(hào)數(shù):70D補(bǔ)碼有符號(hào)數(shù):70DBCD碼:46DASCII:F1.15解:1)、相加后若出現(xiàn)和大于9,則將和減去10后再向高位進(jìn)12)、若出現(xiàn)組間進(jìn)位,則將低位加61.18解:詳見(jiàn)課本18頁(yè)。1.17解:C34020001.18解:

5050H十進(jìn)制值5080

二進(jìn)制十六進(jìn)制二進(jìn)制十六進(jìn)制

00110010B32H01010000B50H1.19解:D:44Hd:64HCR:0DHLF:0AH0:30HSP:20HNUL:00H1.20解:國(guó)標(biāo)碼:3650H機(jī)內(nèi)碼:B6B0H第二章2.1算術(shù)邏輯單元ALU、寄存器組和控制器;總線接口單元BIU:管理8088與系統(tǒng)總線的接口負(fù)責(zé)cpu對(duì)接口和外設(shè)進(jìn)行訪問(wèn)執(zhí)行單元EU:負(fù)責(zé)指令譯碼、執(zhí)行和數(shù)據(jù)運(yùn)算;8位cpu在指令譯碼前必須等待取指令操作的完成,8088中需要譯碼的指令已經(jīng)取到了指令隊(duì)列,不需要等待取指令。而取指令是cpu最為頻繁的操作,因此8088的結(jié)構(gòu)和操作方式節(jié)省了大量等待時(shí)間,比8位cpu節(jié)省了時(shí)間,提高了性能。2.28個(gè)8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL;8個(gè)18位寄存器:累加器AX、基址寄存器BX、計(jì)數(shù)器CX、數(shù)據(jù)寄存器DX、源地址寄存器SI、目的地址寄存器DI、基址指針BP、堆棧指針SP。2.3標(biāo)志用于反映指令執(zhí)行結(jié)果或者控制指令執(zhí)行形式。狀態(tài)標(biāo)志用于記錄程序運(yùn)行結(jié)果的狀態(tài)信息;控制標(biāo)志用于控制指令執(zhí)行的形式。2.4例:有運(yùn)算:3AH+7CH=B6H作為無(wú)符號(hào)數(shù)運(yùn)算,沒(méi)有進(jìn)位,CF=0;作為有符號(hào)數(shù)運(yùn)算,結(jié)果超出范圍,OF=1.2.58088中每個(gè)存儲(chǔ)單元有唯一的20位地址,稱為物理地址。處理器通過(guò)總線存取存儲(chǔ)器數(shù)據(jù)時(shí),采用這個(gè)物理地址。在用戶編程過(guò)程中采用的“段地址:偏移地址”的形式稱為邏輯地址。將邏輯地址中的段地址左移4位,加上偏移地址就得到物理地址。1MB最多能分成65536個(gè)邏輯段。2.6代碼段:存放程序的指令序列;堆棧段:確定堆棧所在的主存儲(chǔ)區(qū);數(shù)據(jù)段:存放當(dāng)前運(yùn)行程序的數(shù)據(jù);附加段:附加數(shù)據(jù)段,用于數(shù)據(jù)保存。另外串操作指令將其作為目的操作數(shù)的存放區(qū)。2.78088的存儲(chǔ)空間分段管理,程序設(shè)計(jì)時(shí)采用邏輯地址。因?yàn)槎蔚刂吩谀J(rèn)的或指定的段寄存器中,所以只需要偏移地址,稱為有效地址EA.操作數(shù)在主存中有以下幾種尋址方式:直接尋址、寄存器間接尋址、寄存器相對(duì)尋址、基址變址尋址、相對(duì)基址變址尋址。2.8(1)立即數(shù)尋址ax:1200H(2)寄存器尋址ax:0100H(3)存儲(chǔ)器直接尋址ax:4C2AH(4)寄存器間接尋址ax:3412H(5)寄存器間接尋址ax:4C2AH(6)基址變址尋址ax:7856H(7)相對(duì)基址變址尋址ax:65B7H2.9(1)cx為字寄存器,dl為字節(jié)寄存器,類型不匹配。(2)mov指令的目的操作數(shù)只能是寄存器或者主存單元,ip是指針。(3)不允許立即數(shù)到段寄存器的傳送。(4)不允許段寄存器之間的直接傳送。(5)數(shù)據(jù)溢出。(6)sp不能用于寄存器間接尋址。(7)格式不對(duì)。應(yīng)為:movax,[bx+di](8)mov指令的操作數(shù)不能是立即數(shù)。2.10(1)bx得到table的偏移地址,bx=200H.(2)將立即數(shù)8送到al。(3)換碼,al=12H.2.11(1)al=89H(2)al=12H,cf=1,zf=0,sf=0,of=1,pf=1(3)al=0AFH,cf=0,zf=0,sf=1,of=0,pf=1(4)al=0AFH,cf=1,zf=0,sf=1,of=1,pf=1(5)al=0,cf=0,zf=1,sf=0,of=0,pf=1(6)al=0FFH,cf=0,zf=0,sf=1,of=0,pf=1(7)al=0,cf=0,zf=1,sf=0,of=0,pf=12.12(1)adddx,bx(2)addal,[bx+si](3)addwordptr[bx+0B2H],cx(4)addwordptr[0520H],3412H(5)addal,0A0H2.13運(yùn)算公式:。商存儲(chǔ)在ax,余數(shù)存儲(chǔ)在dx。2.14(1)ax=1470H(2)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0(3)ax=1470H,cf=0,of=0,sf=0,zf=0,pf=0(4)ax=0,cf=0,of=0,sf=0,zf=1,pf=1(5)ax=0FFFFH,cf=0,of=0,sf=0,zf=1,pf=1(6)ax=0FFFFH,cf=0,of=0,sf=1,zf=0,pf=12.15相對(duì)尋址方式、直接尋址方式、間接尋址方式。2.18(1)1256H(2)3280H2.17(1)ax=1E1EH(2)al的D0、D7位不全為0(3)cx<64H2.18執(zhí)行65536次。2.19功能:將數(shù)組中每個(gè)字元素相加,結(jié)果存儲(chǔ)于total。2.20(1)leasi,stringMovdh,[si]Movdl,[si+5](2)movaxwordptrbuffer1Subaxwordptrbuffer2Movdxwordptrbuffer1+2Sbbdxwordptrbuffer2+2(3)testdx,0F000Hjzeveneven:movax,0(4)movcx,4again:sardx,1rcrax,1loopagain(5)movcx,100movsi,0again:moval,0FFHaddal,array[si]movarray[si],alincsiloopagain2.21Htoasc

procMovbl,alMoval,ahMovbh,10MulbhAndax,00FFHAddal,blHtoend:retHtoasc

endp2.22計(jì)算機(jī)系統(tǒng)利用中斷為用戶提供硬件設(shè)備驅(qū)動(dòng)程序。在IBM-PC系列微機(jī)中,基本輸入輸出系統(tǒng)ROM-BIOS和DOS都提供了豐富的中斷服務(wù)程序,稱為系統(tǒng)功能調(diào)用。調(diào)用步驟(1)AH中設(shè)置系統(tǒng)功能調(diào)用號(hào)(2)在指定寄存器中設(shè)置入口參數(shù)(3)使用中斷調(diào)用指令執(zhí)行功能調(diào)用(4)根據(jù)出口參數(shù)分析調(diào)用情況2.23Htoasc

procAndal,0FHAddal,90HDaaAdcal,40HDaaMovah,02HMovdl,alInt21HRetHtoasc

endp2.24Numout

procXorah,ahAamAddax,3030HMovdl,ahMovah,02HInt21HMovdl,alMovah,02HInt31HRetNumout

endp2.25Msgkey

db”inputnumber0-9”,”$”Msgwrg

db”error”,”$”Movah,09HMovdx,offsetmsgkeyInt21HAgain:

movah,01HInt21HCmpal,30HJbdispCmpal,39HJadispMovdl,alMovah,02HInt21HJmpdoneDisp:

movdx,offsetmsgwrgMovah,09HInt21HJmpagainDone:

movah,02HMovdl,alInt21H第3章3.1解:匯編語(yǔ)言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級(jí)程序設(shè)計(jì)語(yǔ)言,它采用助記符表達(dá)指令操作碼,采用標(biāo)識(shí)符號(hào)表示指令操作數(shù),可以直接、有效地控制計(jì)算機(jī)硬件,因而容易創(chuàng)建代碼序列短小、運(yùn)行快速的可執(zhí)行程序3.2

解:(1)完整的匯編語(yǔ)言源程序由段組成(2)一個(gè)匯編語(yǔ)言源程序可以包含若干個(gè)代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列(3)需獨(dú)立運(yùn)行的程序必須包含一個(gè)代碼段,并指示程序執(zhí)行的起始點(diǎn),一個(gè)程序只有一個(gè)起始點(diǎn)(4)所有的可執(zhí)行性語(yǔ)句必須位于某一個(gè)代碼段內(nèi),說(shuō)明性語(yǔ)句可根據(jù)需要位于任一段內(nèi)(5)通常,程序還需要一個(gè)堆棧段3.3解:存儲(chǔ)模式特點(diǎn)TINYCOM類型程序,只有一個(gè)小于64KB的邏輯段(MASM6.x支持)SMALL小應(yīng)用程序,只有一個(gè)代碼段和一個(gè)數(shù)據(jù)段(含堆棧段),每段不大于64KBCOMPACT代碼少、數(shù)據(jù)多的程序,只有一個(gè)代碼段,但有多個(gè)數(shù)據(jù)段MEDIUM代碼多、數(shù)據(jù)少的程序,可有多個(gè)代碼段,只有一個(gè)數(shù)據(jù)段LARGE大應(yīng)用程序,可有多個(gè)代碼段和多個(gè)數(shù)據(jù)段(靜態(tài)數(shù)據(jù)小于64KB)HUGE更大應(yīng)用程序,可有多個(gè)代碼段和多個(gè)數(shù)據(jù)段(對(duì)靜態(tài)數(shù)據(jù)沒(méi)有限制)FLAT32位應(yīng)用程序,運(yùn)行在32位80x86CPU和Windows9x或NT環(huán)境3.4解:開(kāi)始位置:用標(biāo)號(hào)指明返回DOS:利用DOS功能調(diào)用的4CH子功能來(lái)實(shí)現(xiàn)匯編停止:執(zhí)行到一條END偽指令時(shí),停止匯編3.5解:段定位、段組合和段類型。3.6解:stack

segment

stackdb

1024(0)stack

endsdata

segment

string

db

'Hello,Assembly!',0dH,0aH,‘$’data

endscode

segment

'code'assume

cs:code,ds:data,ss:stackstart:

mov

dx,offsetstringmov

ah,9int

21hcode

endsend

start3.7解:(1).EXE程序程序可以有多個(gè)代碼段和多個(gè)數(shù)據(jù)段,程序長(zhǎng)度可以超過(guò)64KB通常生成EXE結(jié)構(gòu)的可執(zhí)行程序(2).COM程序只有一個(gè)邏輯段,程序長(zhǎng)度不超過(guò)64KB需要滿足一定條件才能生成COM結(jié)構(gòu)的可執(zhí)行程序(MASM6.x需要采用TINY模式)3.8解:符號(hào)定義偽指令有“等價(jià)EQU”和“等號(hào)=”:符號(hào)名EQU數(shù)值表達(dá)式符號(hào)名EQU<字符串>符號(hào)名=數(shù)值表達(dá)式EQU用于數(shù)值等價(jià)時(shí)不能重復(fù)定義符號(hào)名,但“=”允許有重復(fù)賦值。例如:X=7;等效于:Xequ7X=X+5;“XEQUX+5”是錯(cuò)誤的3.9

解:(1)al=67h(2)ax=133h,dx=4h(3)ax=0230h(4)al=41h(4)ax=7654h3.10解:(1)41h42h43h1010h45h46h-1?444-1?444-1?444(2)10h00h0fbh0ffh??????3.11解:.datamy1b

db

'Personal

Computer'my2b

db

20my3b

db

14hmy4b

db

00010100bmy5w

dw

20dup(?)my6c

=

100my7c

=

<'Personal

Computer'>3.12解:利用定位偽指令控制,如org,even,align3.13解:包括邏輯地址和類型兩種屬性。3.14解:;數(shù)據(jù)段org

100hvarwdw1234h,5678hvarbdb3,4varddd12345678hbuffdd10dup(?)messdb'Hello';代碼段movax,offsetvarb+offsetmessmovax,typebuff+typemess+typevardmovax,sizeofvarw+sizeofbuff+sizeofmessmovax,lengthofvarw+lengthofvard3.15解:(1)1000超過(guò)一個(gè)字節(jié)所能表達(dá)的最大整數(shù)(2)SI應(yīng)為偶數(shù)(3)兩個(gè)內(nèi)存單元不能直接運(yùn)算(4)應(yīng)改為[al+1](5)條件轉(zhuǎn)移指令后面應(yīng)接標(biāo)號(hào),而不是變量3.18

解:movah,1;只允許輸入小寫(xiě)字母int21hsubal,20h;轉(zhuǎn)換為大寫(xiě)字母movdl,almovah,2int21h;顯示3.17

解:movbx,offsetLEDtablemoval,lednumxlat3.18

解:movax,bufXcmpax,bufYjaedonemovax,bufYdone:movbufZ,ax3.19

解:.modelsmall.stack.databufXdw-7signXdb?.code.startupcmpbufX,0;testbufX,80hjlnext;jnznextmovsignX,0jmpdonenext:movsignX,-1done:.exit0end3.20

解:movdl,’2’movax,bufXcmpax,bufYjenext1decdlnext1:cmpax,bufZjenext2decdlnext2:movah,2int21h3.21

解:;代碼段moval,numbermovbx,0;BX←記錄為1的位數(shù)restart:cmpal,0;AL=0結(jié)束jzdoneagain:shral,1;最低位右移進(jìn)入CFjcnext;為1,轉(zhuǎn)移incbx;不為1,繼續(xù)jmpagainnext:pushaxpushbxshlbx,1;位數(shù)乘以2(偏移地址要用2個(gè)字節(jié)單元)jmpaddrs[bx];間接轉(zhuǎn)移:IP←[table+BX];以下是各個(gè)處理程序段fun0:movdl,'0'jmpdispfun1:movdl,'1'jmpdispfun2:movdl,'2'jmpdispfun3:movdl,'3'jmpdispfun4:movdl,'4'jmpdispfun5:movdl,'5'jmpdispfun6:movdl,'6'jmpdispfun7:movdl,'7'jmpdisp;disp:movah,2;顯示一個(gè)字符int21hpopbxpopaxjmprestartdone:…3.22

編制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10個(gè)字節(jié)數(shù)據(jù)之和,并將結(jié)果存入字節(jié)變量SUM中(不考慮溢出和進(jìn)位)。;wjxt322.asm.model

small.stack.datab_datadb

12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h;原始數(shù)據(jù)numequ

10;數(shù)據(jù)個(gè)數(shù)sumdb

?;預(yù)留結(jié)果單元.code.startupxorsi,si;位移量清零xoral,al;取第一個(gè)數(shù)movcx,num;累加次數(shù)again:addal,b_data[si];累加incsi;指向下一個(gè)數(shù)loopagain;如未完,繼續(xù)累加movsum,al;完了,存結(jié)果.exit0end3.23

求主存0040h:0開(kāi)始的一個(gè)64KB物理段中共有多少個(gè)空格?;wjxt323.asm.modelsmall.codestart:movax,0040h;送段地址movds,axmovsi,0;偏移地址movcx,si;計(jì)數(shù)(循環(huán)次數(shù))xorax,ax;空格計(jì)數(shù)器清零again:cmpbyteptr[si],20h;與空格的ASCII碼比較jnenext;不是空格,轉(zhuǎn)incax;是空格,空格數(shù)加1next:incsi;修改地址指針loopagain;cx=cx-1,如cx=0退出循環(huán).exit0endstart3.24

編寫(xiě)計(jì)算100個(gè)18位正整數(shù)之和的程序。如果和不超過(guò)18位字的范圍(65535),則保存其和到wordsum,如超過(guò)則顯示‘overflow’。答:;數(shù)據(jù)段countequ100parraydwcountdup(?);假設(shè)有100個(gè)數(shù)據(jù)wordsumdw0msgdb‘overflow’,’$’;代碼段movcx,countmovax,0movbx,offsetparrayagain:addax,[bx]jncnextmovdx,offsetmsgmovah,9int21h;顯示溢出信息jmpdone;然后,跳出循環(huán)體next:addbx,2loopagainmovwordsum,axdone:…3.25

編程把—個(gè)18位無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換成為用8421BCD碼表示的5位十進(jìn)制數(shù)。轉(zhuǎn)換算法可以是:用二進(jìn)制數(shù)除以10000,商為“萬(wàn)位”,再用余數(shù)除以1000,得到“千位”;依次用余數(shù)除以l00、10和l,得到“百位”、“十位”和“個(gè)位”。;wjxt325.asm.modelsmall.stack256.dataarraydw?;源字?jǐn)?shù)據(jù)dbcddb5dup(?);五位bcd結(jié)果,高對(duì)高低對(duì)低.code.startup

movdx,array;取源數(shù)據(jù)(余數(shù))movbx,10000;除數(shù)movcx,10;除數(shù)系數(shù)movsi,4;目的數(shù)據(jù)高位位移量again:movax,dx;dx.ax中存放被除數(shù)movdx,0divbx;除于bx,商ax,余數(shù)dxmovdbcd[si],al;商<10,存結(jié)果pushdx;暫存余數(shù)movax,bx;除數(shù)除于10movdx,0divcx;dx.ax除于cx,商ax、余數(shù)0存在dxmovbx,ax;bx是除數(shù)popdxdecsi;目的數(shù)據(jù)位移量減1jnzagainmovdbcd,dl;存?zhèn)€位數(shù)(<10).exit0end3.26解:(1)匯編語(yǔ)言中,子程序要用一對(duì)過(guò)程偽指令PROC和ENDP聲明,格式如下:過(guò)程名PROC[NEAR|FAR]……;過(guò)程體過(guò)程名ENDP(2)保護(hù)用到的寄存器內(nèi)容,以便子程序返回時(shí)進(jìn)行相應(yīng)的恢復(fù)。(3)改錯(cuò):crazyprocpishbxpushcxxorax,axxordx,dxagain:adda,[bx]adcdx,0incbxincbxloopagainpopcxpopbx3.27

解(不需調(diào)用HTOASC子程序):again:movah,1int21hcmpal,1bh;ESC的ASCII碼是1bhjedonemovdl,almovah,2int21h;是大寫(xiě)字母則轉(zhuǎn)換為小寫(xiě)字母jmpagaindone:…3.28

解答:asctobprocpushcxanddh,0fh;先轉(zhuǎn)換十位數(shù)shldh,1;十位數(shù)乘以10(采用移位指令)movch,dhshldh,1shldh,1adddh,chanddl,0fh;轉(zhuǎn)換個(gè)位數(shù)adddh,dl;十位數(shù)加個(gè)位數(shù)moval,dh;設(shè)置出口參數(shù)popcxretasctobendp3.29

解:DIPASCproc;入口參數(shù):AL=要顯示的一個(gè)18進(jìn)制數(shù)pushcxpushdxpushaxmovcl,4;轉(zhuǎn)換高位shral,clcallHTOASCmovdl,al;顯示movah,2int21hpopax;轉(zhuǎn)換低位callHTOASCmovdl,al;顯示movah,2int21hmovdl,’H’;顯示一個(gè)字母“H”movah,2int21hpopdxpopcxretDIPASCendpHTOASCproc;將AL低4位表達(dá)的一位18進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼andal,0fhcmpal,9jbehtoasc1addal,37h;是0AH~0FH,加37H轉(zhuǎn)換為ASCII碼ret;子程序返回htoasc1:addal,30h;是0~9,加30H轉(zhuǎn)換為ASCII碼ret;子程序返回HTOASCendp3.30

解:lucaseprocpushbxmovbx,offsetstringcmpal,0jecase0cmpal,1jzcase1cmpal,2jzcase2jmpdonecase0:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’jbnext0cmpbyteptr[bx],’Z’janext0addbyteptr[bx],20hnext0:incbxjmpcase0case1:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’a’jbnext1cmpbyteptr[bx],’z’janext1subbyteptr[bx],20hnext1:incbxjmpcase1case2:cmpbyteptr[bx],0jedonecmpbyteptr[bx],’A’jbnext2cmpbyteptr[bx],’Z’janext20addbyteptr[bx],20hjmpnext2next20:cmpbyteptr[bx],’a’jbnext2cmpbyteptr[bx],’z’janext2subbyteptr[bx],20hnext2:incbxjmpcase2done:popbxretlucaseendp3.31解:(1)用寄存器傳遞參數(shù):最簡(jiǎn)單和常用的參數(shù)傳遞方法是通過(guò)寄存器,只要把參數(shù)存于約定的寄存器中就可以了因?yàn)橥ㄓ眉拇嫫鱾€(gè)數(shù)有限,這種方法對(duì)少量數(shù)據(jù)可以直接傳遞數(shù)值,而對(duì)大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護(hù)和恢復(fù),帶有入口參數(shù)的寄存器可以保護(hù)、也可以不保護(hù),但最好能夠保持一致(2)用共享變量傳遞參數(shù)子程序和主程序使用同一個(gè)變量名存取數(shù)據(jù)就是利用共享變量(全局變量)進(jìn)行參數(shù)傳遞如果變量定義和使用不在同一個(gè)源程序中,需要利用PUBLIC、EXTREN聲明如果主程序還要利用原來(lái)的變量值,則需要保護(hù)和恢復(fù)利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個(gè)程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)(3)用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過(guò)堆棧這個(gè)臨時(shí)存儲(chǔ)區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語(yǔ)言與高級(jí)語(yǔ)言混合編程時(shí)的常規(guī)方法3.32解:方法:主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們注意:壓棧與彈棧必須要一一對(duì)應(yīng)。3.33

解:方法1:neg32proc;入口參數(shù):DX.AX=32位有符號(hào)數(shù)negax;實(shí)現(xiàn)0-DX.AX功能negdxsbbdx,0;這條指令也可以用decdx代替retneg32endp;出口參數(shù):DX.AX=32位有符號(hào)數(shù)的補(bǔ)碼方法2:neg32proc;入口參數(shù):DX.AX=32位有符號(hào)數(shù)notax;實(shí)現(xiàn)DX.AX求反加1notdxaddax,1adcdx,0retneg32endp;出口參數(shù):DX.AX=32位有符號(hào)數(shù)的補(bǔ)碼3.34

解:;數(shù)據(jù)段arraydb12h,25h,0f0h,0a3h,3,68h,71h,0cah,0ffh,90h;數(shù)組countequ$-array;數(shù)組元素個(gè)數(shù)resultdb?;校驗(yàn)和;代碼段movbx,offsetarray;BX←數(shù)組的偏移地址movcx,count;CX←數(shù)組的元素個(gè)數(shù)callchecksum;調(diào)用求和過(guò)程movresult,al;處理出口參數(shù)movax,4c00hint21h;計(jì)算字節(jié)校驗(yàn)和的通用過(guò)程;入口參數(shù):DS:BX=數(shù)組的段地址:偏移地址,CX=元素個(gè)數(shù);出口參數(shù):AL=校驗(yàn)和;說(shuō)明:除AX/BX/CX外,不影響其他寄存器checksumprocxoral,al;累加器清0sum:addal,[bx];求和incbx;指向下一個(gè)字節(jié)loopsumretchecksumendpend3.35

解:⑴.modelsmall.stack.datawdatadw34abh.code.startupmovax,wdatacalldispa.exit0;dispaprocpushcxpushdxmovcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,0fhcalldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,0fhcalldldisppopdxpopcxretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend⑵.modelsmall.stack.datawdatadw34abhwordtempdw?.code.startupmovax,wdatamovwordtemp,axcalldispa.exit0;dispaprocpushcxpushdxmovcl,4movdl,byteptrwordtemp+1shrdl,clcalldldispmovdl,byteptrwordtemp+1anddl,0fhcalldldispmovdl,byteptrwordtempshrdl,clcalldldispmovdl,byteptrwordtempanddl,0fhcalldldisppopdxpopcxretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend⑶.modelsmall.stack.datawdatadw34abh.code.startuppushwdatacalldispapopax;addsp,2.exit0;dispaprocpushbpmovbp,sppushaxpushcxpushdxmovax,[bp+4]movcl,4movdl,ahshrdl,clcalldldispmovdl,ahanddl,0fhcalldldispmovdl,alshrdl,clcalldldispmovdl,alanddl,0fhcalldldisppopdxpopcxpopaxpopbpretdispaendp;dldispprocpushaxordl,30hcmpdl,39hjbedldisp1adddl,7dldisp1:movah,2int21hpopaxretdldispendpend3.36解:如果利用共享變量傳遞函數(shù),且變量定義和使用不在同一個(gè)源程序中,需要利用PUBLIC、EXTERN聲明。3.37解:(1)宏定義由一對(duì)宏匯編偽指令MACRO和ENDM來(lái)完成,格式如下:宏名MACRO[形參表]……;宏定義體ENDM宏定義之后就可以使用它,即宏調(diào)用:宏名[實(shí)參表](2)宏調(diào)用的格式同一般指令一樣:在使用宏指令的位置寫(xiě)下宏名,后跟實(shí)體參數(shù);如果有多個(gè)參數(shù),應(yīng)按形參順序填入實(shí)參,也用逗號(hào)分隔(3)宏展開(kāi):在匯編時(shí),宏指令被匯編程序用對(duì)應(yīng)的代碼序列替代,這就是宏展開(kāi)宏展開(kāi)的具體過(guò)程是:當(dāng)匯編程序掃描源程序遇到已有定義的宏調(diào)用時(shí),即用相應(yīng)的宏定義體完全替代源程序的宏指令,同時(shí)用位置匹配的實(shí)參對(duì)形參進(jìn)行取代3.38解:宏調(diào)用的參數(shù)通過(guò)形參、實(shí)參結(jié)合實(shí)現(xiàn)傳遞,簡(jiǎn)捷直觀、靈活多變。宏匯編的一大特色是它的參數(shù)。宏定義時(shí)既可以無(wú)參數(shù),也可以有一個(gè)或多個(gè)參數(shù);宏調(diào)用時(shí)實(shí)參的形式也非常靈活,可以是常數(shù)、變量、存儲(chǔ)單元、指令(操作碼)或它們的一部分,也可以是表達(dá)式;只要宏展開(kāi)后符合匯編語(yǔ)言的語(yǔ)法規(guī)則即可。3.39解:宏:僅是源程序級(jí)的簡(jiǎn)化:宏調(diào)用在匯編時(shí)進(jìn)行程序語(yǔ)句的展開(kāi),不需要返回;不減小目標(biāo)程序,執(zhí)行速度沒(méi)有改變通過(guò)形參、實(shí)參結(jié)合實(shí)現(xiàn)參數(shù)傳遞,簡(jiǎn)捷直觀、靈活多變子程序:還是目標(biāo)程序級(jí)的簡(jiǎn)化:子程序調(diào)用在執(zhí)行時(shí)由CALL指令轉(zhuǎn)向、RET指令返回;形成的目標(biāo)代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲(chǔ)單元或堆棧等傳遞參數(shù)選擇:宏與子程序具有各自的特點(diǎn),程序員應(yīng)該根據(jù)具體問(wèn)題選擇使用那種方法。通常,當(dāng)程序段較短或要求較快執(zhí)行時(shí),應(yīng)選用宏;當(dāng)程序段較長(zhǎng)或?yàn)闇p小目標(biāo)代碼時(shí),要選用子程序3.40

編寫(xiě)一個(gè)宏指令movedoprnd,soprnd,它實(shí)現(xiàn)任意尋址方式的字量源操作數(shù)soprnd送到目的操作數(shù)doprnd,包括存儲(chǔ)單元到存儲(chǔ)單元的傳送功能。答:movemacrodoprnd,soprndmovax,soprndmovdoprnd,axendm3.41

定義一個(gè)宏logical,用它代表4條邏輯運(yùn)算指令:and/or/xor/test。注意需要利用3個(gè)形式參數(shù),并給出一個(gè)宏調(diào)用以及對(duì)應(yīng)宏展開(kāi)的例子。答:logicalmacrolcode,dopd,sopdlcodedopd,sopdendm例如,如果使用“andax,[bx]”指令,可以利用該宏定義,寫(xiě)出宏指令如下:logicaland,ax,[bx]3.42

解:utolmacrolocalnextcmpal,’A’;小于“A”不轉(zhuǎn)換jbnextcmpal,’Z’;大于“A”不轉(zhuǎn)換janextaddal,20h;是大寫(xiě)字母則轉(zhuǎn)換為小寫(xiě)字母next:endm3.43

定義一個(gè)宏movestrstrn,dstr,sstr,它將strn個(gè)字符從一個(gè)字符區(qū)sstr傳送到另一個(gè)字符區(qū)dstr解:(假設(shè)它們都在數(shù)據(jù)段)movestrmacrostrn,dstr,sstrmovcx,dsmoves,cxmovcx,strnmovdi,offsetdstrmovsi,offsetsstrcldrepmovsb;;重復(fù)傳送ES:[DI]←DS:[SI]endm第四章4.120;;65536;;擴(kuò)展板4.4總線操作周期中,8088在第三個(gè)時(shí)鐘周期的前沿測(cè)試READY引腳,若無(wú)效,表明被訪問(wèn)的設(shè)備與CPU操作不同步,CPU插入等待周期。第五章5.2在半導(dǎo)體存儲(chǔ)器中,RAM指的是隨機(jī)存取存儲(chǔ)器,他可讀可寫(xiě),但斷電后信息一般會(huì)丟失;而ROM指的是只讀存儲(chǔ)器,正常工作時(shí)只能從中讀取信息,但斷電后信息不會(huì)丟失。以EPROM芯片2764為例,其存儲(chǔ)容量為8K×8位,共有8條數(shù)據(jù)線和13條地址線。用它組成64KB的ROM存儲(chǔ)區(qū)共需8片2764芯片。掩膜ROM:信息制作在芯片中,不可更改PROM:允許一次編程,此后不可更改EPROM:用紫外光擦除,擦除后可編程;并允許用戶多次擦除和編程EEPROM(E2PROM):采用加電方法在線進(jìn)行擦除和編程,也可多次擦寫(xiě)FlashMemory(閃存):能夠快速擦寫(xiě)的EEPROM,但只能按塊(Block)擦除組成32KB存儲(chǔ)空間,用SRAM2114(1K×4)需要64個(gè)芯片;組成32KB存儲(chǔ)空間,用DRAM4118(18K×1)需要18個(gè)芯片;它們都需要進(jìn)行位擴(kuò)充和地址擴(kuò)充5.9解:24=185.10解:5.11解:5.12解:5.13解:5.15解:4256KBA19-A184第六章6.1獨(dú)立,I/O,2,直接尋址和DX間接尋址。6.2(1)數(shù)據(jù)寄存器:輸入時(shí)保存從外設(shè)發(fā)往CPU的數(shù)據(jù),輸出時(shí)保護(hù)從CPU發(fā)往外設(shè)的數(shù)據(jù)。(2)狀態(tài)寄存器:保存狀態(tài)數(shù)據(jù)。CPU可以獲取當(dāng)前接口電路或外設(shè)的狀態(tài)。(3)控制寄存器:保存控制數(shù)據(jù)。CPU可以向其寫(xiě)入命令,選擇接口電路工作方式,控制外設(shè)。6.4Task

movdx,8000HInal,dxNotalCmpal,1Jz

status1Cmpal,2Jz

status2Moval,0Outdx,alJmpdoneStatus1:rolal,1Outdx,alCalldelayJmpstatus1Status2:roral,1Outdx,alCalldelayJmpstatus2Done:

……6.5CodeStart:

movax,2000HMovds,axMovbx,2000HMovdx,0FFE2HMovcx,100Next:

inal,dxTestal,1Jz

nextSubdx,2Inal,dxMov[bx],alIncbxAdddx,2Loopnext6.6CodeStart:movdx,80HLeabx,ADDRNext:

inal,dxTestal,80HJnznextCmp[bx],’$’Jz

doneMoval,[bx]Outdx,alIncbxJmp

nextDone:

……9.4解:(1)moval,50hmovdx,207hout

dx,almoval,128;80hmovdx,205hout

dx,al(2)

moval,33hmovdx,207hout

dx,almovax,3000h;不是3000movdx,204hout

dx,almoval,ahout

dx,al(3)

moval,0b4hmovdx,207hout

dx,almoval,02f0hmovdx,206hout

dx,almoval,ahout

dx,al9.5解:moval,33hout

0fbh,al;寫(xiě)入計(jì)數(shù)器0地址:0fbhmoval,80h;out0f8h,al;寫(xiě)入低字節(jié)計(jì)數(shù)初值moval,50hout0f8h,al;寫(xiě)入高字節(jié)計(jì)數(shù)初值作用:計(jì)數(shù)器0的計(jì)數(shù)初值為5080hP274第十一章部分習(xí)題參考答案11.1答:

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論