




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1第一章1.1 解:五代,詳細見書1.2 解:微型計算機:以大規(guī)模、超大規(guī)模集成電路為主要部件,以集成了計算機主要部件控制器和運算器的微處理器為核心,所構(gòu)造出的計算機系統(tǒng)。pc 機:pc(personal computer)機就是面向個人單獨使用的一類微機。單片機:用于控制的微處理器芯片,內(nèi)部除cpu 外還集成了計算機的其他一些主要部件,如:rom、ram、定時器、并行接口、串行接口,有的芯片還集成了a/d、d/a 轉(zhuǎn)換電路等。數(shù)字信號處理器dsp:主要面向大流量數(shù)字信號的實時處理,在宿主系統(tǒng)中充當數(shù)據(jù)處理中心,在網(wǎng)絡(luò)通信、多媒體應(yīng)用等領(lǐng)域正得到越來越多的應(yīng)用1.3 解:微機主要有存儲器、i/
2、o 設(shè)備和i/o 接口、cpu、系統(tǒng)總線、操作系統(tǒng)和應(yīng)用軟件組成,各部分功能如下:cpu:統(tǒng)一協(xié)調(diào)和控制系統(tǒng)中的各個部件系統(tǒng)總線:傳送信息存儲器:存放程序和數(shù)據(jù)i/o 設(shè)備:實現(xiàn)微機的輸入輸出功能i/o 接口:i/o 設(shè)備與cpu 的橋梁操作系統(tǒng):管理系統(tǒng)所有的軟硬件資源1.4 解:系統(tǒng)總線:傳遞信息的一組公用導(dǎo)線,cpu 通過它們與存儲器和i/o 設(shè)備進行信息交換。好處:組態(tài)靈活、擴展方便三組信號線:數(shù)據(jù)總線、地址總線和控制總線。其使用特點是:在某一時刻,只能由一個總線主控設(shè)備來控制系統(tǒng)總線,只能有一個發(fā)送者向總線發(fā)送信號;但可以有多個設(shè)備從總線上同時獲得信號。1.5 解:(1)用于數(shù)值計算
3、、數(shù)據(jù)處理及信息管理方向。采用通用微機,要求有較快的工作速度、較高的運算精度、較大的內(nèi)存容量和較完備的輸入輸出設(shè)備,為用戶提供方便友好的操作界面和簡便快捷的維護、擴充手段。(2)用于過程控制及嵌人應(yīng)用方向。采用控制類微機,要求能抵抗各種干擾、適應(yīng)現(xiàn)場的惡劣環(huán)境、確保長時間穩(wěn)定地工作,要求其實時性要好、強調(diào)其體積要小、便攜式應(yīng)用強調(diào)其省電。1.6 解:21.7 解:i/o 通道:位于cpu 和設(shè)備控制器之間,其目的是承擔(dān)一些原來由cpu 處理的i/o 任務(wù),從而把cpu 從繁雜的i/o 任務(wù)中解脫出來。由10 根信號線組成(a9-a0)。1.8 解:bios:基本輸入輸出系統(tǒng)。主要功能:用來驅(qū)動
4、和管理諸如鍵盤、顯示器、打印機、磁盤、時鐘、串行通信接口等基本的輸入輸出設(shè)備1.9 解:基本ram 區(qū):640kb保留ram 區(qū):128kb擴展rom 區(qū):128kb基本rom 區(qū):128kb1.10 解:(1)、數(shù)用來直接表征量的大小,包括:定點數(shù)、浮點數(shù)。(2)、碼用來指代某個事物或事物的某種狀態(tài)屬性,包括:二進制、八進制、十進制、十六進制。區(qū)別:使用場合不同,詳見p16.1.11 解:(1)310 210 16174.66) (10101110.10101)174.66) (ae.a8)=(2)2 102 16100011101011.01011) (2283.34375)1000111
5、01011.01011) (8eb.58)=(3)16 216 10f18a6.6) (11110001100010100110.0110)f18a6.6) (989350.375)=(1.12 解:原碼反碼補碼+37 00100101/25h 00100101/25h 00100101/25h-37 10100101/a5h 11011010/dah 11011011/dbh1.13 解:+37 -3716 位32 位16 位32 位00 25h 00 00 00 25h ff 5bh ff ff ff 5bh1.14 解:無符號數(shù):70d補碼有符號數(shù):70dbcd 碼:46dascii:f
6、1.15 解:1)、相加后若出現(xiàn)和大于9,則將和減去10 后再向高位進12)、若出現(xiàn)組間進位,則將低位加61.16 解:詳見課本16 頁。1.17 解:c3 40 20 001.18 解:50 50h十進制值50 80二進制十六進制二進制十六進制40011 0010b 32h 0101 0000b 50h1.19 解:d:44hd:64hcr:0dhlf:0ah0:30hsp:20hnul:00h1.20 解:國標碼:36 50h機內(nèi)碼:b6 b0h第二章21算術(shù)邏輯單元alu、寄存器組和控制器;總線接口單元biu:管理8088與系統(tǒng)總線的接口負責(zé)cpu對接口和外設(shè)進行訪問執(zhí)行單元eu:負責(zé)指
7、令譯碼、執(zhí)行和數(shù)據(jù)運算;8位cpu在指令譯碼前必須等待取指令操作的完成,8088中需要譯碼的指令已經(jīng)取到了指令隊列,不需要等待取指令。而取指令是cpu最為頻繁的操作,因此8088的結(jié)構(gòu)和操作方式節(jié)省了大量等待時間,比8位cpu節(jié)省了時間,提高了性能。228個8位寄存器:ah、al、bh、bl、ch、cl、dh、dl;8個16位寄存器:累加器ax、基址寄存器bx、計數(shù)器cx、數(shù)據(jù)寄存器dx、源地址寄存器si、目的地址寄存器di、基址指針bp、堆棧指針sp。23標志用于反映指令執(zhí)行結(jié)果或者控制指令執(zhí)行形式。狀態(tài)標志用于記錄程序運行結(jié)果的狀態(tài)信息;控制標志用于控制指令執(zhí)行的形式。24例:有運算:3a
8、h+7ch=b6h作為無符號數(shù)運算,沒有進位,cf=0;作為有符號數(shù)運算,結(jié)果超出范圍,of=1.2.58088中每個存儲單元有唯一的20位地址,稱為物理地址。處理器通過總線存取存儲器數(shù)據(jù)時,采用這個物理地址。在用戶編程過程中采用的“段地址:偏移地址”的形式稱為邏輯地址。將邏輯地址中的段地址左移4 位,加上偏移地址就得到物理地址。1mb最多能分成65536個邏輯段。526代碼段:存放程序的指令序列;堆棧段:確定堆棧所在的主存儲區(qū);數(shù)據(jù)段:存放當前運行程序的數(shù)據(jù);附加段:附加數(shù)據(jù)段,用于數(shù)據(jù)保存。另外串操作指令將其作為目的操作數(shù)的存放區(qū)。278088的存儲空間分段管理,程序設(shè)計時采用邏輯地址。由
9、于段地址在默認的或指定的段寄存器中,所以只需要偏移地址,稱為有效地址ea.操作數(shù)在主存中有以下幾種尋址方式:直接尋址、寄存器間接尋址、寄存器相對尋址、基址變址尋址、相對基址變址尋址。28(1)立即數(shù)尋址ax:1200h(2)寄存器尋址ax:0100h(3)存儲器直接尋址ax:4c2ah(4)寄存器間接尋址ax:3412h(5)寄存器間接尋址ax:4c2ah(6)基址變址尋址ax:7856h(7)相對基址變址尋址ax:65b7h29(1)cx為字寄存器,dl為字節(jié)寄存器,類型不匹配。(2)mov指令的目的操作數(shù)只能是寄存器或者主存單元,ip是指針。(3)不允許立即數(shù)到段寄存器的傳送。(4)不允許
10、段寄存器之間的直接傳送。(5)數(shù)據(jù)溢出。(6)sp不能用于寄存器間接尋址。(7)格式不對。應(yīng)為:mov ax,bx+di(8)mov指令的操作數(shù)不能是立即數(shù)。210(1)bx得到table的偏移地址,bx=200h.(2)將立即數(shù)8送到al。(3)換碼,al=12h.211(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
11、=0,sf=1,of=0,pf=16(7)al=0,cf=0,zf=1,sf=0,of=0,pf=1212(1) add dx,bx(2) add al,bx+si(3) add word ptrbx+0b2h,cx(4) add word ptr0520h,3412h(5)add al,0a0h213運算公式:(v z x *y + 540) / x 。商存儲在ax,余數(shù)存儲在dx。214(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
12、=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相對尋址方式、直接尋址方式、間接尋址方式。216(1)1256h(2)3280h217(1)ax=1e1eh(2)al的d0、d7位不全為0(3)cx64h218執(zhí)行65536次。219功能:將數(shù)組中每個字元素相加,結(jié)果存儲于total。220(1)lea si,stringmov dh,simov dl,si+5(2)mov ax word ptr buffer1sub ax word ptr buffer2mov
13、 dx word ptr buffer1+2sbb dx word ptr buffer2+27(3) test dx,0f000hjz eveneven:mov ax,0(4) mov cx,4again: sar dx,1rcr ax,1loop again(5) mov cx,100mov si,0again:mov al,0ffhadd al,arraysimov arraysi,alinc siloop again2.21htoasc procmov bl,almov al,ahmov bh,10mul bhand ax,00ffhadd al,blhtoend: rethtoasc
14、 endp2.22計算機系統(tǒng)利用中斷為用戶提供硬件設(shè)備驅(qū)動程序。在ibm-pc系列微機中,基本輸入輸出系統(tǒng)rom-bios和dos都提供了豐富的中斷服務(wù)程序,稱為系統(tǒng)功能調(diào)用。調(diào)用步驟(1)ah中設(shè)置系統(tǒng)功能調(diào)用號(2)在指定寄存器中設(shè)置入口參數(shù)(3)使用中斷調(diào)用指令執(zhí)行功能調(diào)用(4)根據(jù)出口參數(shù)分析調(diào)用情況223htoasc procand al,0fhadd al,90hdaaadc al,40hdaa8mov ah,02hmov dl,alint 21hrethtoasc endp2.24numout procxor ah,ahaamadd ax,3030hmov dl,ahmov ah
15、,02hint 21hmov dl,almov ah,02hint 31hretnumout endp2.25msgkey db”input number 0-9”,”$”msgwrg db”error”,”$”mov ah,09hmov dx,offsetmsgkeyint 21hagain: mov ah,01hint 21hcmp al,30hjb dispcmp al,39hja dispmov dl,almov ah,02hint 21hjmp donedisp: mov dx,offsetmsgwrgmov ah,09hint 21hjmp again9done: mov ah,0
16、2hmov dl,alint 21h第3 章3.1 解:匯編語言是一種以處理器指令系統(tǒng)為基礎(chǔ)的低級程序設(shè)計語言,它采用助記符表達指令操作碼,采用標識符號表示指令操作數(shù),可以直接、有效地控制計算機硬件,因而容易創(chuàng)建代碼序列短小、運行快速的可執(zhí)行程序3.2 解:(1)完整的匯編語言源程序由段組成(2)一個匯編語言源程序可以包含若干個代碼段、數(shù)據(jù)段、附加段或堆棧段,段與段之間的順序可隨意排列(3)需獨立運行的程序必須包含一個代碼段,并指示程序執(zhí)行的起始點,一個程序只有一個起始點(4)所有的可執(zhí)行性語句必須位于某一個代碼段內(nèi),說明性語句可根據(jù)需要位于任一段內(nèi)(5)通常,程序還需要一個堆棧段3.3 解:
17、存儲模式特點tiny com 類型程序,只有一個小于64kb 的邏輯段(masm 6.x 支持)small 小應(yīng)用程序,只有一個代碼段和一個數(shù)據(jù)段(含堆棧段),每段不大于64kbcompact 代碼少、數(shù)據(jù)多的程序,只有一個代碼段,但有多個數(shù)據(jù)段medium 代碼多、數(shù)據(jù)少的程序,可有多個代碼段,只有一個數(shù)據(jù)段large 大應(yīng)用程序,可有多個代碼段和多個數(shù)據(jù)段(靜態(tài)數(shù)據(jù)小于64kb)huge 更大應(yīng)用程序,可有多個代碼段和多個數(shù)據(jù)段(對靜態(tài)數(shù)據(jù)沒有限制)flat 32 位應(yīng)用程序,運行在32 位80x86cpu 和windows 9x 或nt 環(huán)境3.4 解:10開始位置:用標號指明返回dos
18、:利用dos 功能調(diào)用的4ch 子功能來實現(xiàn)匯編停止:執(zhí)行到一條end 偽指令時,停止匯編3.5 解:段定位、段組合和段類型。3.6 解:stack segment stackdb 1024(0)stack endsdata segmentstring db hello,assembly!,0dh,0ah,$data endscode segment codeassume cs:code,ds:data,ss:stackstart: mov dx,offset stringmov ah,9int 21hcode endsend start3.7 解:(1). exe 程序程序可以有多個代碼段和
19、多個數(shù)據(jù)段,程序長度可以超過64kb通常生成exe 結(jié)構(gòu)的可執(zhí)行程序(2). com 程序只有一個邏輯段,程序長度不超過64kb需要滿足一定條件才能生成com 結(jié)構(gòu)的可執(zhí)行程序(masm 6.x 需要采用tiny 模式)3.8 解:符號定義偽指令有“等價equ”和“等號”:符號名equ 數(shù)值表達式符號名equ 符號名 數(shù)值表達式equ 用于數(shù)值等價時不能重復(fù)定義符號名,但“”允許有重復(fù)賦值。例如:x= 7 ;等效于:x equ 7x= x+5 ;“x equ x+5”是錯誤的3.9 解:(1) al=67h(2) ax=133h,dx=4h(3) ax=0230h(4) al=41h11(4)
20、 ax=7654h3.10 解:(1)41h42h43h1010h45h 46h -1 ? 4 4 4 -1 ? 4 4 4 -1 ? 4 4 4(2)10h 00h 0fbh 0ffh ? ? ? ? ? ?3.11 解:.datamy1b db personal computermy2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c = 100my7c = 3.12 解:利用定位偽指令控制,如org,even,align3.13 解:包括邏輯地址和類型兩種屬性。3.14 解:;數(shù)據(jù)段org 100hvarw dw 1234h
21、, 5678hvarb db 3 , 4vard dd 12345678hbuff dd 10 dup(?)mess db hello;代碼段mov ax , offset varb + offset messmov ax , type buff + type mess + type vardmov ax , sizeof varw+ sizeof buff+ sizeof messmov ax , lengthof varw+ lengthof vard3.15 解:(1) 1000 超過一個字節(jié)所能表達的最大整數(shù)(2)si 應(yīng)為偶數(shù)(3)兩個內(nèi)存單元不能直接運算12(4)應(yīng)改為al+1(5
22、)條件轉(zhuǎn)移指令后面應(yīng)接標號,而不是變量3.16 解:mov ah,1 ;只允許輸入小寫字母int 21hsub al,20h ;轉(zhuǎn)換為大寫字母mov dl,almov ah,2int 21h ;顯示3.17 解:mov bx,offset ledtablemov al,lednumxlat3.18 解:mov ax, bufxcmp ax, bufyjae donemov ax, bufydone: mov bufz, ax3.19 解:.model small.stack.databufx dw -7signx db ?.code.startupcmp bufx,0 ;test bufx,8
23、0hjl next ;jnz nextmov signx,0jmp donenext: mov signx,-1done: .exit 0end3.20 解:mov dl,2mov ax,bufxcmp ax,bufyje next113dec dlnext1: cmp ax,bufzje next2dec dlnext2: mov ah,2int 21h3.21 解:;代碼段mov al,numbermov bx,0 ;bx記錄為1 的位數(shù)restart: cmp al,0 ;al0 結(jié)束jz doneagain: shr al,1 ;最低位右移進入cfjc next ;為1,轉(zhuǎn)移inc b
24、x ;不為1,繼續(xù)jmp againnext: push axpush bxshl bx,1 ;位數(shù)乘以2(偏移地址要用2 個字節(jié)單元)jmp addrsbx ;間接轉(zhuǎn)移:iptablebx;以下是各個處理程序段fun0: mov dl,0jmp dispfun1: mov dl,1jmp dispfun2: mov dl,2jmp dispfun3: mov dl,3jmp dispfun4: mov dl,4jmp dispfun5: mov dl,5jmp dispfun6: mov dl,6jmp dispfun7: mov dl,7jmp disp;disp: mov ah,2 ;顯
25、示一個字符int 21hpop bxpop axjmp restart14done: 3.22 編制程序完成12h、45h、0f3h、6ah、20h、0feh、90h、0c8h、57h 和34h 等10個字節(jié)數(shù)據(jù)之和,并將結(jié)果存入字節(jié)變量sum 中(不考慮溢出和進位)。;wjxt322.asm.model small.stack.datab_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始數(shù)據(jù)num equ 10 ;數(shù)據(jù)個數(shù)sum db ? ;預(yù)留結(jié)果單元.code.startupxor si, si ;位移量清零xor al, al
26、 ;取第一個數(shù)mov cx, num ;累加次數(shù)again: add al, b_datasi ;累加inc si ;指向下一個數(shù)loop again ;如未完,繼續(xù)累加mov sum, al ;完了,存結(jié)果.exit 0end3.23 求主存0040h:0 開始的一個64kb 物理段中共有多少個空格?; wjxt323.asm.model small.codestart: mov ax,0040h ;送段地址mov ds, axmov si, 0 ;偏移地址mov cx, si ;計數(shù)(循環(huán)次數(shù))xor ax, ax ;空格計數(shù)器清零again: cmp byte ptr si, 20h ;
27、與空格的ascii 碼比較jne next ;不是空格,轉(zhuǎn)inc ax ;是空格,空格數(shù)加1next: inc si ;修改地址指針loop again ;cxcx1,如cx0 退出循環(huán).exit 0end start3.24 編寫計算100 個16 位正整數(shù)之和的程序。如果和不超過16 位字的范圍(65535),則保存其和到wordsum,如超過則顯示overflow。答:;數(shù)據(jù)段15count equ 100parray dw count dup(?) ;假設(shè)有100 個數(shù)據(jù)wordsum dw 0msg db overflow,$;代碼段mov cx,countmov ax,0mov b
28、x,offset parrayagain: add ax,bxjnc nextmov dx,offset msgmov ah,9int 21h ;顯示溢出信息jmp done ;然后,跳出循環(huán)體next: add bx,2loop againmov wordsum,axdone: 3.25 編程把個16 位無符號二進制數(shù)轉(zhuǎn)換成為用8421bcd 碼表示的5 位十進制數(shù)。轉(zhuǎn)換算法可以是:用二進制數(shù)除以10000,商為“萬位”,再用余數(shù)除以1000,得到“千位”;依次用余數(shù)除以l00、10 和l,得到“百位”、“十位”和“個位”。;wjxt325.asm.model small.stack 256
29、.dataarray dw ? ;源字數(shù)據(jù)dbcd db 5 dup(?) ;五位bcd 結(jié)果,高對高低對低.code.startupmov dx, array ;取源數(shù)據(jù)(余數(shù))mov bx, 10000 ;除數(shù)mov cx, 10 ;除數(shù)系數(shù)mov si, 4 ;目的數(shù)據(jù)高位位移量again: mov ax, dx ;dx.ax 中存放被除數(shù)mov dx, 0div bx ;除于bx,商ax,余數(shù)dxmov dbcdsi, al;商10,存結(jié)果push dx ;暫存余數(shù)mov ax, bx ;除數(shù)除于10mov dx,0div cx ;dx.ax 除于cx,商ax、余數(shù)0 存在dxmov
30、bx, ax ;bx 是除數(shù)pop dx16dec si ;目的數(shù)據(jù)位移量減1jnz againmov dbcd, dl ;存?zhèn)€位數(shù)( 10 ).exit 0end3.26 解:(1)匯編語言中,子程序要用一對過程偽指令proc 和endp 聲明,格式如下:過程名proc near|far ;過程體過程名endp(2)保護用到的寄存器內(nèi)容,以便子程序返回時進行相應(yīng)的恢復(fù)。(3)改錯:crazy procpish bxpush cxxor ax,axxor dx,dxagain:add a,bxadc dx,0inc bxinc bxloop againpop cxpop bx3.27 解(不需
31、調(diào)用htoasc 子程序):again: mov ah,1int 21hcmp al,1bh ;esc 的ascii 碼是1bhje donemov dl,almov ah,2int 21h ;是大寫字母則轉(zhuǎn)換為小寫字母jmp againdone: 3.28 解答:asctob procpush cxand dh,0fh ;先轉(zhuǎn)換十位數(shù)shl dh,1 ;十位數(shù)乘以10(采用移位指令)mov ch,dhshl dh,117shl dh,1add dh,chand dl,0fh ;轉(zhuǎn)換個位數(shù)add dh,dl ;十位數(shù)加個位數(shù)mov al,dh ;設(shè)置出口參數(shù)pop cxretasctob en
32、dp3.29 解:dipasc proc ;入口參數(shù):al要顯示的一個16 進制數(shù)push cxpush dxpush axmov cl,4 ;轉(zhuǎn)換高位shr al,clcall htoascmov dl,al ;顯示mov ah,2int 21hpop ax ;轉(zhuǎn)換低位call htoascmov dl,al ;顯示mov ah,2int 21hmov dl,h ;顯示一個字母“h”mov ah,2int 21hpop dxpop cxretdipasc endphtoasc proc ;將al 低4 位表達的一位16 進制數(shù)轉(zhuǎn)換為ascii 碼and al,0fhcmp al,9jbe h
33、toasc1add al,37h ;是0ah0fh,加37h 轉(zhuǎn)換為ascii 碼ret ;子程序返回htoasc1: add al,30h ;是09,加30h 轉(zhuǎn)換為ascii 碼ret ;子程序返回htoasc endp3.30 解:lucase proc18push bxmov bx,offset stringcmp al,0je case0cmp al,1jz case1cmp al,2jz case2jmp donecase0: cmp byte ptr bx,0je donecmp byte ptr bx,ajb next0cmp byte ptr bx,zja next0add
34、byte ptr bx,20hnext0: inc bxjmp case0case1: cmp byte ptr bx,0je donecmp byte ptr bx,ajb next1cmp byte ptr bx,zja next1sub byte ptr bx,20hnext1: inc bxjmp case1case2: cmp byte ptr bx,0je donecmp byte ptr bx,ajb next2cmp byte ptr bx,zja next20add byte ptr bx,20hjmp next2next20: cmp byte ptr bx,ajb nex
35、t2cmp byte ptr bx,zja next2sub byte ptr bx,20hnext2: inc bxjmp case2done: pop bxret19lucase endp3.31 解:(1)用寄存器傳遞參數(shù):最簡單和常用的參數(shù)傳遞方法是通過寄存器,只要把參數(shù)存于約定的寄存器中就可以了由于通用寄存器個數(shù)有限,這種方法對少量數(shù)據(jù)可以直接傳遞數(shù)值,而對大量數(shù)據(jù)只能傳遞地址采用寄存器傳遞參數(shù),注意帶有出口參數(shù)的寄存器不能保護和恢復(fù),帶有入口參數(shù)的寄存器可以保護、也可以不保護,但最好能夠保持一致(2)用共享變量傳遞參數(shù)子程序和主程序使用同一個變量名存取數(shù)據(jù)就是利用共享變量(全局變量
36、)進行參數(shù)傳遞如果變量定義和使用不在同一個源程序中,需要利用public、extren 聲明如果主程序還要利用原來的變量值,則需要保護和恢復(fù)利用共享變量傳遞參數(shù),子程序的通用性較差,但特別適合在多個程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù)(3)用堆棧傳遞參數(shù)參數(shù)傳遞還可以通過堆棧這個臨時存儲區(qū)。主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語言與高級語言混合編程時的常規(guī)方法3.32 解:方法:主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù);子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧
37、取得它們注意:壓棧與彈棧必須要一一對應(yīng)。3.33 解:方法1:neg32 proc ;入口參數(shù):dx.ax32 位有符號數(shù)neg ax ;實現(xiàn)0dx.ax 功能neg dxsbb dx,0 ;這條指令也可以用dec dx 代替retneg32 endp ;出口參數(shù):dx.ax32 位有符號數(shù)的補碼方法2:neg32 proc ;入口參數(shù):dx.ax32 位有符號數(shù)not ax ;實現(xiàn)dx.ax 求反加1not dxadd ax,1adc dx,0retneg32 endp ;出口參數(shù):dx.ax32 位有符號數(shù)的補碼203.34 解:;數(shù)據(jù)段array db 12h,25h,0f0h,0a3h
38、,3,68h,71h,0cah,0ffh,90h ;數(shù)組count equ $-array ;數(shù)組元素個數(shù)result db ? ;校驗和;代碼段mov bx,offset array ;bx數(shù)組的偏移地址mov cx,count ;cx數(shù)組的元素個數(shù)call checksum ;調(diào)用求和過程mov result,al ;處理出口參數(shù)mov ax,4c00hint 21h;計算字節(jié)校驗和的通用過程;入口參數(shù):ds:bx數(shù)組的段地址:偏移地址,cx元素個數(shù);出口參數(shù):al校驗和;說明:除ax/bx/cx 外,不影響其他寄存器checksum procxor al,al ;累加器清0sum: ad
39、d al,bx ;求和inc bx ;指向下一個字節(jié)loop sumretchecksum endpend3.35 解:.model small.stack.datawdata dw 34abh.code.startupmov ax,wdatacall dispa.exit 0;dispa procpush cxpush dxmov cl,4mov dl,ahshr dl,cl21call dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpo
40、p cxretdispa endp;dldisp procpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1: mov ah,2int 21hpop axretdldisp endpend.model small.stack.datawdata dw 34abhwordtemp dw ?.code.startupmov ax,wdatamov wordtemp,axcall dispa.exit 0;dispa procpush cxpush dxmov cl,422mov dl,byte ptr wordtemp+1shr dl,clca
41、ll dldispmov dl,byte ptr wordtemp+1and dl,0fhcall dldispmov dl,byte ptr wordtempshr dl,clcall dldispmov dl,byte ptr wordtempand dl,0fhcall dldisppop dxpop cxretdispa endp;dldisp procpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1: mov ah,2int 21hpop axretdldisp endpend.model small.stack.datawda
42、ta dw 34abh.code.startuppush wdatacall dispapop ax ;add sp,2.exit 0;dispa procpush bpmov bp,sp23push axpush cxpush dxmov ax,bp+4mov cl,4mov dl,ahshr dl,clcall dldispmov dl,ahand dl,0fhcall dldispmov dl,alshr dl,clcall dldispmov dl,aland dl,0fhcall dldisppop dxpop cxpop axpop bpretdispa endp;dldisp p
43、rocpush axor dl,30hcmp dl,39hjbe dldisp1add dl,7dldisp1: mov ah,2int 21hpop axretdldisp endpend3.36 解:如果利用共享變量傳遞函數(shù),且變量定義和使用不在同一個源程序中,需要利用public、extern 聲明。3.37 解:(1)宏定義由一對宏匯編偽指令macro 和endm 來完成,格式如下:宏名macro 形參表 ;宏定義體24endm宏定義之后就可以使用它,即宏調(diào)用:宏名實參表(2)宏調(diào)用的格式同一般指令一樣:在使用宏指令的位置寫下宏名,后跟實體參數(shù);如果有多個參數(shù),應(yīng)按形參順序填入實參,也
44、用逗號分隔(3)宏展開:在匯編時,宏指令被匯編程序用對應(yīng)的代碼序列替代,這就是宏展開宏展開的具體過程是:當匯編程序掃描源程序遇到已有定義的宏調(diào)用時,即用相應(yīng)的宏定義體完全替代源程序的宏指令,同時用位置匹配的實參對形參進行取代3.38 解:宏調(diào)用的參數(shù)通過形參、實參結(jié)合實現(xiàn)傳遞,簡捷直觀、靈活多變。宏匯編的一大特色是它的參數(shù)。宏定義時既可以無參數(shù),也可以有一個或多個參數(shù);宏調(diào)用時實參的形式也非常靈活,可以是常數(shù)、變量、存儲單元、指令(操作碼)或它們的一部分,也可以是表達式;只要宏展開后符合匯編語言的語法規(guī)則即可。3.39 解:宏:僅是源程序級的簡化:宏調(diào)用在匯編時進行程序語句的展開,不需要返回;
45、不減小目標程序,執(zhí)行速度沒有改變通過形參、實參結(jié)合實現(xiàn)參數(shù)傳遞,簡捷直觀、靈活多變子程序:還是目標程序級的簡化:子程序調(diào)用在執(zhí)行時由call 指令轉(zhuǎn)向、ret 指令返回;形成的目標代碼較短,執(zhí)行速度減慢需要利用寄存器、存儲單元或堆棧等傳遞參數(shù)選擇:宏與子程序具有各自的特點,程序員應(yīng)該根據(jù)具體問題選擇使用那種方法。通常,當程序段較短或要求較快執(zhí)行時,應(yīng)選用宏;當程序段較長或為減小目標代碼時,要選用子程序3.40 編寫一個宏指令move doprnd,soprnd,它實現(xiàn)任意尋址方式的字量源操作數(shù)soprnd 送到目的操作數(shù)doprnd,包括存儲單元到存儲單元的傳送功能。答:move macro
46、doprnd,soprndmov ax,soprndmov doprnd,axendm3.41 定義一個宏logical,用它代表4 條邏輯運算指令:and/or/xor/test。注意需要利用3 個形式參數(shù),并給出一個宏調(diào)用以及對應(yīng)宏展開的例子。答:logical macro lcode,dopd,sopdlcode dopd,sopdendm例如,如果使用“and ax,bx”指令,可以利用該宏定義,寫出宏指令如下:logical and,ax,bx3.42 解:25utol macrolocal nextcmp al,a ;小于“a”不轉(zhuǎn)換jb nextcmp al,z ;大于“a”不轉(zhuǎn)
47、換ja nextadd al,20h ;是大寫字母則轉(zhuǎn)換為小寫字母next:endm3.43 定義一個宏movestr strn,dstr,sstr,它將strn 個字符從一個字符區(qū)sstr 傳送到另一個字符區(qū)dstr解:(假設(shè)它們都在數(shù)據(jù)段)movestr macro strn,dstr,sstrmov cx,dsmov es,cxmov cx,strnmov di,offset dstrmov si,offset sstrcldrep movsb ;重復(fù)傳送es:dids:siendm第四章4.120; 19 0 a a ;65536; 0 9 a a ;擴展板4.4總線操作周期中,808
48、8在第三個時鐘周期的前沿測試ready引腳,若無效,表明被訪問的設(shè)備與cpu操作不同步,cpu插入等待周期。4.5最小組態(tài)模式用于小規(guī)模系統(tǒng),mn/mx*接高電平,分時復(fù)用引腳是: 7 0 ad ad ,19 6 16 3 a /s a /s ,當mn/mx*接低電平,8088構(gòu)成最大組態(tài)模式,應(yīng)用大規(guī)模應(yīng)用程序。4.6引腳三態(tài)能力主要針對引腳輸出信號狀態(tài):高電平、低電平和高阻。輸出高阻意味著芯片放棄對引腳的控制。這樣它所連接的設(shè)備就可以接管該引腳及連接導(dǎo)線的控制權(quán)。4.7reset:復(fù)位請求,高電平有效時,cpu回到初始狀態(tài)。26hold:總線請求,高電平有效時,其他總線主控設(shè)備向cpu申請
49、占用總線。nmi:不可屏蔽中斷請求。外界向cpu申請不可屏蔽中斷。intr:可屏蔽中斷請求。高電平有效時,中斷請求設(shè)備向cpu申請可屏蔽中斷。4.10(1)t1周期,cpu進行讀操作。(2)t2-t4期間,cpu對數(shù)據(jù)總線輸出高阻態(tài),選通存儲器或i/o接口,向cpu傳送數(shù)據(jù)。(3)t4的下降沿,cpu對數(shù)據(jù)總線采樣。4.15三態(tài)透明鎖存器指芯片具有三態(tài)輸出能力。當g 有效,允許數(shù)據(jù)輸出,否則不允許。當?shù)刂份敵龆薲e*無效,說明不允許cpu向總線輸出地址。4.16數(shù)據(jù)收發(fā)器指向兩個方向驅(qū)動數(shù)據(jù)。74ls245的g*標示輸出控制端,dir標示方向控制端。4.17(1)8086是真正的16位微處理器
50、。8088的數(shù)據(jù)總線只有8位;(2)8086指令隊列長度為4字節(jié),8088為6字節(jié);(3)最小組態(tài)下,8088選擇訪問對象的信號為io/m*,8086為m/io*(4)8086 數(shù)據(jù)存儲按照16位數(shù)據(jù)寬度組織,由奇偶兩個對稱的存儲器組織,提高訪問效率。第五章5.1 解:主存的作用:保存正在使用的、處于活動狀態(tài)的程序和數(shù)據(jù)。輔存的作用:長期保存程序文件和數(shù)據(jù)文件,在需要時將這些文件調(diào)入ram 內(nèi)存并激活使用。cache 的作用:提高對存儲器的訪問速度。虛擬存儲:由容量較小的主存和容量較大的輔存構(gòu)成,其目標是擴大程序員眼中的主存容量。區(qū)別:通過存儲器訪問指令用戶可對主存進行隨機訪問;用戶利用操作系
51、統(tǒng)提供的用戶命令和功能調(diào)用對輔存進行訪問。5.2 在半導(dǎo)體存儲器中,ram 指的是隨機存取存儲器,他可讀可寫,但斷電后信息一般會丟失;而rom 指的是只讀存儲器,正常工作時只能從中讀取信息,但斷電后信息不會丟失。以eprom 芯片2764 為例,其存儲容量為8k8 位,共有8 條數(shù)據(jù)線和13 條地址線。用它組成64kb 的rom 存儲區(qū)共需8 片2764 芯片。5.3 解:雙譯碼方式使得地址譯碼器的輸出線的數(shù)目大為減少,使得芯片設(shè)計得時候復(fù)雜度就低了。地址線a9a04 根數(shù)據(jù)線i/o4i/o127片選cs*讀寫we*5.4 解:假想的ram 有12 根地址線、4 根數(shù)據(jù)線片選端cs*或ce*:
52、有效時,可以對該芯片進行讀寫操作,通過對系統(tǒng)高位地址線的譯碼來選中各個存儲芯片輸出oe*:控制讀操作。有效時,芯片內(nèi)數(shù)據(jù)輸出,該控制端對應(yīng)系統(tǒng)的讀控制線memr*(mrdc*)寫we*:控制寫操作。有效時,數(shù)據(jù)進入芯片中,該控制端對應(yīng)系統(tǒng)的寫控制線memw*(mwtc*)5.5 解:位片結(jié)構(gòu):每個存儲單元具有一個唯一的地址,可存儲1 位。(4116)字片結(jié)構(gòu):每個存儲單元具有一個唯一的地址,可存儲多位。(2114)5.6 解:組成單元速度集成度應(yīng)用sram 觸發(fā)器快低小容量系統(tǒng)dram 極間電容慢高大容量系統(tǒng)nvram 帶微型電池慢低小容量非易失掩膜rom:信息制作在芯片中,不可更改prom:允許一次編程,此后不可更改eprom:用紫外
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商務(wù)車租賃合同范本
- 制作印刷材料合同范本
- 包裝接單合同范本
- 公司欠款還款合同范本
- 廠家代理商合同范本
- 合同范本大會
- 合同以外合同范本有效
- 廠房漏雨維修合同范例
- 精煤銷售批發(fā)合同范本
- 個人商業(yè)購房合同范本
- 2025海南省交通投資控股限公司招聘30人高頻重點提升(共500題)附帶答案詳解
- 《工業(yè)機器人現(xiàn)場編程》課件-任務(wù)3.涂膠機器人工作站
- 富饒的西沙群島課件
- 中英文對照版 ASTM B594 2019 鋁合金形變產(chǎn)品超聲波檢測標準慣例
- 李四光《看看我們的地球》原文閱讀
- 五年級下冊道德與法治教學(xué)計劃
- 2025屆高考數(shù)學(xué)專項復(fù)習(xí):阿基米德三角形【六大題型】含答案
- 讀書分享-于永正-我怎樣教語文
- 2024工貿(mào)企業(yè)重大事故隱患判定標準解讀
- 高中語文(統(tǒng)編版)選必中冊-第二單元教材分析解讀課件
- 哈爾濱鐵道職業(yè)技術(shù)學(xué)院單招《語文》考試復(fù)習(xí)題庫(含答案)
評論
0/150
提交評論