




已閱讀5頁(yè),還剩60頁(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)介
子程序調(diào)用指令CALL,CALL指令用在主程序中,實(shí)現(xiàn)子程序的調(diào)用 分成段內(nèi)調(diào)用(近調(diào)用)和段間調(diào)用(遠(yuǎn)調(diào)用) 目標(biāo)地址采用相對(duì)尋址、直接尋址或間接尋址 入棧返回地址:將CALL下一條指令的地址壓入堆棧 16位段段內(nèi):16位偏移地址,段間:再加16位段地址 32位段段內(nèi):32位偏移地址,段間:再將16位段選擇器零位擴(kuò)展為32位保存到堆棧,CALL label ;調(diào)用標(biāo)號(hào)指定的子程序 CALL reg16/reg32 ;調(diào)用寄存器指定地址的子程序 CALL mem16/mem32 ;調(diào)用存儲(chǔ)單元指定地址的子程序,子程序返回指令RET,RET指令用在子程序結(jié)束,實(shí)現(xiàn)返回主程序 RET ;無(wú)參數(shù)返回:出棧返回地址 RET i16 ;有參數(shù)返回:出棧返回地址,ESPESPi16,過(guò)程定義,過(guò)程定義偽指令獲得子程序信息 過(guò)程名 PROC ;過(guò)程體 過(guò)程名 ENDP ;過(guò)程名為符合語(yǔ)法的標(biāo)識(shí)符 PROC后面可加參數(shù):NEAR或FAR,CSEG SEGMENT ASSUME CS:CSEG START: . CALL SUBT . MOV AH,4CH INT 21H SUBT PROC (NEAR) . RET SUBT ENDP CSEG ENDS END START,子程序設(shè)計(jì),利用過(guò)程定義,獲得子程序名和調(diào)用屬性 RET指令返回主程序,CALL指令調(diào)用子程序 壓入和彈出操作要成對(duì)使用,保持堆棧平衡 開(kāi)始保護(hù)寄存器,返回前相應(yīng)恢復(fù) 安排在代碼段的主程序之外 子程序允許嵌套和遞歸 可共用一個(gè)數(shù)據(jù)段,也可具有獨(dú)立數(shù)據(jù)段,最好有完整的注釋,難點(diǎn)是參數(shù)傳遞,子程序的參數(shù)傳遞,主程序與子程序間通過(guò)參數(shù)傳遞建立聯(lián)系 入口參數(shù)(輸入?yún)?shù)):主程序子程序 出口參數(shù)(輸出參數(shù)):子程序主程序 傳遞參數(shù)的多少反映程序模塊間的耦合程度 參數(shù)的具體內(nèi)容 數(shù)據(jù)本身(傳遞數(shù)值) 數(shù)據(jù)的存儲(chǔ)地址(傳遞地址,傳遞引用) 參數(shù)傳遞方法:寄存器、變量或堆棧,寄存器傳遞參數(shù)(例5-16),最簡(jiǎn)單和常用的參數(shù)傳遞方法 把參數(shù)存于約定的寄存器 少量數(shù)據(jù)直接傳遞數(shù)值 大量數(shù)據(jù)只能傳遞地址 帶有出口參數(shù)的寄存器不保護(hù) 帶有入口參數(shù)的寄存器可以保護(hù)、也可以不保護(hù),但最好能夠保持一致,例題5-16字符串顯示程序-1,;數(shù)據(jù)段 msg db Well, I made it !,0 ;代碼段(主程序) mov si,offset msg ;主程序提供顯示字符串 call dpstri ;調(diào)用子程序 mov ah,4ch int 21h,寄存器 地址參數(shù)傳遞,例題5-16字符串顯示程序-2,;代碼段(子程序) dpstri proc ;子程序:顯示字符串 push ax ;寄存器保護(hù) dps1: mov al,si ;取顯示字符 cmp al,0 ;是結(jié)尾,則顯示結(jié)束 jz dps2 call dpchar ;調(diào)用字符顯示子程序 inc si jmp dps1 dps2: pop ax ;寄存器恢復(fù) ret dpstri endp,寄存器 數(shù)值參數(shù)傳遞,例題5-16字符串顯示程序-3,dpchar proc ;子程序顯示字符 push ax ;順序入棧,保護(hù)寄存器 push dx mov ah,2 mov dl,al ;顯示一個(gè)字符 int 21h pop dx ;逆序出棧,恢復(fù)寄存器 pop ax ret dpchar endp,共享變量傳遞參數(shù),子程序和主程序使用同一個(gè)變量名存取數(shù)據(jù) 變量定義和使用不在同一個(gè)源程序中,需要利用PUBLIC、EXTREN聲明 共享變量傳遞參數(shù),子程序的通用性較差 特別適合在多個(gè)程序段間、尤其在不同的程序模塊間傳遞數(shù)據(jù),例題5-19有符號(hào)十進(jìn)制數(shù)輸出程序-1,算法如下: 首先判斷數(shù)據(jù)是零、正數(shù)或負(fù)數(shù),是零顯示“0”退出; 是負(fù)數(shù),顯示“”,求數(shù)據(jù)的絕對(duì)值; 接著數(shù)據(jù)除以10,余數(shù)加30H轉(zhuǎn)換為ASCII碼壓入堆棧; 重復(fù)第3步,直到商為0結(jié)束; 依次從堆棧彈出各位數(shù)字,進(jìn)行顯示,例題5-19有符號(hào)十進(jìn)制數(shù)輸出程序-2,mov ecx,count mov ebx,0 again: mov eax,arrayebx*4 mov dtemp,eax ;入口參數(shù)存放到共享變量 call dispsid ;調(diào)用子程序顯示一個(gè)數(shù)據(jù) inc ebx call dpcrlf ;光標(biāo)回車換行 loop again,例題5-19有符號(hào)十進(jìn)制數(shù)輸出程序-3,dispsid proc ;顯示有符號(hào)十進(jìn)制數(shù)子程序 push eax ;入口參數(shù):共享變量DTEMP push ebx push edx mov eax,dtemp ;取出顯示數(shù)據(jù) test eax,eax ;判斷數(shù)據(jù)是零、正數(shù)或負(fù)數(shù) jnz dsid1 mov dl,0 ;是零,顯示“0”后退出 mov ah,2 int 21h jmp dsid5,例題5-19有符號(hào)十進(jìn)制數(shù)輸出程序-4,dsid1: jns dsid2 ;是負(fù)數(shù),顯示“-” mov ebx,eax ;EAX數(shù)據(jù)暫存于EBX mov dl,- mov ah,2 int 21h mov eax,ebx neg eax ;數(shù)據(jù)求補(bǔ)(絕對(duì)值),例題5-19有符號(hào)十進(jìn)制數(shù)輸出程序-5,dsid2: mov ebx,10 push bx ;10壓入堆棧,作為退出標(biāo)志 dsid3: cmp eax,0 ;數(shù)據(jù)(商)為零,轉(zhuǎn)向顯示 jz dsid4 sub edx,edx ;擴(kuò)展被除數(shù)EDX.EAX div ebx ;數(shù)據(jù)除以10:EDX.EAX10 add dl,30h ;余數(shù)(09)轉(zhuǎn)換為ASCII碼 push dx ;數(shù)據(jù)先低位后高位壓入堆棧 jmp dsid3,例題5-19有符號(hào)十進(jìn)制數(shù)輸出程序-6,dsid4: pop dx ;數(shù)據(jù)先高位后低位彈出堆棧 cmp dl,10 ;是結(jié)束標(biāo)志10,則退出 je dsid5 mov ah,2 ;進(jìn)行顯示 int 21h jmp dsid4 dsid5: pop edx pop ebx pop eax ret ;子程序返回 dispsid endp,字符串輸入功能,例題5-12輸入字符串大小寫轉(zhuǎn)換程序-1,;數(shù)據(jù)段 keynum = 255 keybuf db keynum ;鍵盤輸入緩沖區(qū) db 0 db keynum dup(0) ;代碼段 mov dx,offset keybuf ;設(shè)置入口參數(shù)DX mov ah,0ah int 21h ;用戶用回車鍵結(jié)束 mov dl,0ah ;回車后再進(jìn)行換行 mov ah,2 int 21h,輸入“Hi”,回車,緩沖區(qū): FF 02 48 69 0D 00 ,例題5-12輸入字符串大小寫轉(zhuǎn)換程序-2,mov bx,offset keybuf+1 ;輸入字符個(gè)數(shù) mov cl,bx mov ch,0 ;作為循環(huán)的次數(shù) again: inc bx ;BX指向輸入字符 mov dl,bx ;取出一個(gè)字符 cmp dl,a ;小于小寫字母“a” jb disp cmp dl,z ;大于小寫字母“z” ja disp ;直接去顯示 sub dl,20h ;小寫字母轉(zhuǎn)換為大寫字母 disp: mov ah,2 ;顯示一個(gè)字符 int 21h loop again ;循環(huán),計(jì)數(shù)控制循環(huán),堆棧傳遞參數(shù),主程序?qū)⑷肟趨?shù)壓入堆棧,子程序從堆棧中取出參數(shù) 子程序?qū)⒊隹趨?shù)壓入堆棧,主程序彈出堆棧取得它們 采用堆棧傳遞參數(shù)是程式化的,它是編譯程序處理參數(shù)傳遞、以及匯編語(yǔ)言與高級(jí)語(yǔ)言混合編程時(shí)的常規(guī)方法,例題5-20計(jì)算有符號(hào)數(shù)平均值程序-1,算法如下: 被加數(shù)進(jìn)行符號(hào)擴(kuò)展 求和 除以數(shù)據(jù)個(gè)數(shù)得到平均值 32位有符號(hào)數(shù)擴(kuò)展到64位,32位表示數(shù)據(jù)個(gè)數(shù)(最大232 ) ,不會(huì)溢出,例題5-20計(jì)算有符號(hào)數(shù)平均值程序-2,mov eax,count push eax ;壓入數(shù)據(jù)個(gè)數(shù)(0表示232個(gè)) mov ebx,offset array push ebx ;壓入緩沖區(qū)的偏移地址 call mean ;調(diào)用子程序,求平均值 add esp,8 ;平衡堆棧 mov dmed,eax ;保存出口參數(shù),例題5-20計(jì)算有符號(hào)數(shù)平均值程序-3,mean proc ;計(jì)算有符號(hào)數(shù)平均值 push ebp mov ebp,esp push ebx ;保護(hù)寄存器 push ecx push edx push esi push edi mov ebx,ebp+6 ;從堆棧取偏移地址 mov ecx,ebp+10 ;從堆棧取數(shù)據(jù)個(gè)數(shù),例題5-20計(jì)算有符號(hào)數(shù)平均值程序-4,xor esi,esi ;ESI保存求和的低32位值 mov edi,esi ;EDI保存求和的高32位值 mean1: mov eax,ebx ;取出一個(gè)數(shù)據(jù)EAX cdq ;符號(hào)擴(kuò)展EDX.EAX add esi,eax ;求和低32位 adc edi,edx ;求和高32位 add ebx,4 ;指向下一個(gè)數(shù)據(jù) loop mean1 ;循環(huán) mov eax,esi ;累加和在EDX.EAX mov edx,edi,例題5-20計(jì)算有符號(hào)數(shù)平均值程序-5,mov ecx,ebp+10 ;數(shù)據(jù)個(gè)數(shù)在CX idiv ecx ;有符號(hào)數(shù)除法,EAX平均值(EDX余數(shù)) pop edi ;恢復(fù)寄存器 pop esi pop edx pop ecx pop ebx pop ebp ret mean endp,第6章 微處理器外部特性,6.1 8086的引腳信號(hào) 6.1.1 地址/數(shù)據(jù)信號(hào) 6.1.2 讀寫控制信號(hào) 6.1.3 其他控制信號(hào) 6.2 8086的總線時(shí)序 6.2.1 寫總線周期 6.2.2 讀總線周期 6.3 奔騰微處理器引腳和時(shí)序 6.3.1 引腳定義 6.3.2 總線周期 6.4 微機(jī)系統(tǒng)總線 6.4.1 微機(jī)總線技術(shù) 6.4.2 ISA總線 6.4.3 PCI總線,CPU,外設(shè)、存儲(chǔ)器,地址,數(shù)據(jù),控制,運(yùn)算單元,控制單元,微型計(jì)算機(jī)系統(tǒng)硬件結(jié)構(gòu),1. 微處理器 2. 存儲(chǔ)器 3. I/O接口和I/O設(shè)備 4. 系統(tǒng)總線,控制總線CB,數(shù)據(jù)總線DB,地址總線AB,微處理器,I/O設(shè)備,I/O接口,存儲(chǔ)器,系統(tǒng)總線BUS,處理器總線,數(shù)據(jù)總線(DB:Data Bus) 處理器與存儲(chǔ)器或外設(shè)交換信息的通道 個(gè)數(shù)(條數(shù))是一次能夠傳送數(shù)據(jù)的二進(jìn)制位數(shù) 地址總線(AB:Address Bus) 指定存儲(chǔ)器或外設(shè)的具體單元 個(gè)數(shù)反映訪問(wèn)的主存儲(chǔ)器容量或外設(shè)范圍 控制總線(CB:Control Bus) 控制處理器數(shù)據(jù)傳送等操作,一個(gè)信號(hào)兩種狀態(tài)(高或低)兩種編碼(1或0),引腳信號(hào),信號(hào)的功能 用英文單詞或英文縮寫表示引腳名稱 信號(hào)的流向 微處理器輸出到外部,從外部輸入到微處理器內(nèi)部 有效方式 低電平有效,高電平有效,上升沿或下降沿有效 高電平和低電平都有效 三態(tài)能力 高阻狀態(tài)放棄對(duì)引腳的控制 其他設(shè)備控制該引腳,總線信號(hào)圖形表示,單一信號(hào) 用單線表示,實(shí)線高低表示電平高低,虛線表示狀態(tài)任意; 成組信號(hào) 用高低雙線表示,兩線交叉表示成組信號(hào)改變。雙線變?yōu)橐粭l居中橫線表示輸出高阻狀態(tài)。,總線復(fù)用,同一引腳在不同時(shí)刻具有不同功能,最常復(fù)用:地址引腳數(shù)據(jù)引腳 目的:減少引腳個(gè)數(shù),8086的數(shù)據(jù)總線和地址總線,AD15AD0(Address/Data) 地址/數(shù)據(jù)分時(shí)復(fù)用引腳,共16個(gè)引腳 單向輸出地址總線,雙向數(shù)據(jù)總線,三態(tài)輸出,8086的數(shù)據(jù)總線和地址總線,AD15AD0(Address/Data) 地址/數(shù)據(jù)分時(shí)復(fù)用引腳,共16個(gè)引腳 單向輸出地址總線,雙向數(shù)據(jù)總線,三態(tài)輸出 A19/S6A16/S3(Address/Status) 地址/狀態(tài)分時(shí)復(fù)用引腳,4個(gè)三態(tài)輸出信號(hào) 輸出高4位地址,輸出狀態(tài)信號(hào),8086的數(shù)據(jù)總線和地址總線,AD15AD0(Address/Data) 地址/數(shù)據(jù)分時(shí)復(fù)用引腳,共16個(gè)引腳 單向輸出地址總線,雙向數(shù)據(jù)總線,三態(tài)輸出 A19/S6A16/S3(Address/Status) 地址/狀態(tài)分時(shí)復(fù)用引腳,4個(gè)三態(tài)輸出信號(hào) 輸出高4位地址,輸出狀態(tài)信號(hào) ALE(Address Latch Enable) 地址鎖存允許,三態(tài)、輸出、高電平有效 有效時(shí),表示復(fù)用引腳正在傳送地址信號(hào),8086的基本讀寫引腳,WR*(Write) 寫控制,三態(tài)、輸出、低電平有效 有效時(shí),表示微處理器正將數(shù)據(jù)寫到存儲(chǔ)單元或I/O端口 RD*(Read) 讀控制,三態(tài)、輸出、低電平有效 有效時(shí),表示微處理器正從存儲(chǔ)單元或I/O端口讀取數(shù)據(jù) M/IO*(Memory/Input and Output) 訪問(wèn)存儲(chǔ)器或者I/O,三態(tài)、輸出、高低電平均有效 高電平(M),表示微處理器訪問(wèn)存儲(chǔ)器 低電平時(shí)(IO*),表示微處理器訪問(wèn)I/O端口,基本總線操作,存儲(chǔ)器讀(Memory Read) 微處理器從存儲(chǔ)器讀取代碼或讀取操作數(shù) 每條指令執(zhí)行前都需從主存取指 以存儲(chǔ)單元為源操作數(shù)的指令在執(zhí)行時(shí) 存儲(chǔ)器寫(Memory Write) 微處理器向存儲(chǔ)器寫入操作數(shù) 以存儲(chǔ)單元為目的操作數(shù)的指令在執(zhí)行時(shí),CPU,地址,數(shù)據(jù),控制,專用寄存器,通用寄存器,地址就是號(hào)碼,CPU,A0A19地址,AD0AD15數(shù)據(jù),ALE,RD/WR,M/IO*,總線時(shí)序,總線時(shí)序(Timing) 描述總線信號(hào)隨時(shí)間變化的規(guī)律以及總線信號(hào)間的相互關(guān)系 采用時(shí)序圖形象化地表現(xiàn)時(shí)序 指令周期 一條指令從取指、譯碼到最終執(zhí)行完成的過(guò)程 總線周期或機(jī)器周期 伴隨有數(shù)據(jù)交換的總線操作 T狀態(tài) 微處理器的基本工作節(jié)拍,對(duì)應(yīng)時(shí)鐘周期,8086的寫總線周期,完成對(duì)存儲(chǔ)器或I/O端口的一次寫操作 T1狀態(tài) 輸出20位存儲(chǔ)器地址A19A0 M/IO*輸出高電平,表示存儲(chǔ)器操作 或者M(jìn)/IO*輸出低電平,表示I/O操作 ALE輸出正脈沖,表示復(fù)用總線輸出地址 T2狀態(tài) 輸出控制信號(hào)WR*和數(shù)據(jù)D15D0 T3狀態(tài) 檢測(cè)數(shù)據(jù)傳送是否能夠完成 T4狀態(tài) 完成數(shù)據(jù)傳送,MOV mem, imm/reg,M/IO*為高,8086的讀總線周期,完成對(duì)存儲(chǔ)器或I/O端口的一次讀操作 T1狀態(tài) 輸出20位存儲(chǔ)器地址A19A0 M/IO*輸出高電平,表示存儲(chǔ)器操作 或者M(jìn)/IO*輸出低電平,表示I/O操作 ALE輸出正脈沖,表示復(fù)用總線輸出地址 T2狀態(tài) 輸出控制信號(hào)RD*,存儲(chǔ)器或I/O端口發(fā)送數(shù)據(jù) T3狀態(tài)和Tw狀態(tài) 檢測(cè)數(shù)據(jù)傳送是否能夠完成 T4狀態(tài) 獲取數(shù)據(jù),完成傳送,MOV reg, mem,M/IO*為高,BHE*/S7(Byte High Enable/Status) 高字節(jié)允許/狀態(tài)分時(shí)復(fù)用引腳,三態(tài)輸出信號(hào) 輸出低有效表示傳送高字節(jié)數(shù)據(jù),輸出狀態(tài)信號(hào),I/O讀(Input/Output Read) 只有執(zhí)行輸入指令I(lǐng)N時(shí)才有 微處理器從外設(shè)讀取操作數(shù) I/O寫(Input/Output Write) 微處理器向外設(shè)寫出操作數(shù) 只有執(zhí)行輸出指令OUT時(shí)才有,基本總線操作,OUT DX/i8, AL/AX/EAX,M/IO*為低,IN AL/AX/EAX, DX/i8,M/IO*為低,等待狀態(tài),微處理器運(yùn)行速度遠(yuǎn)遠(yuǎn)快于存儲(chǔ)器和I/O端口 控制READY信號(hào)為低無(wú)效,不進(jìn)入T4狀態(tài),插入等待狀態(tài)Tw Tw狀態(tài):引腳信號(hào)延續(xù)T3時(shí)的狀態(tài) 一個(gè)Tw狀態(tài)的長(zhǎng)度是一個(gè)時(shí)鐘周期 在Tw的前沿,繼續(xù)對(duì)READY進(jìn)行測(cè)試 無(wú)效繼續(xù)插入Tw;有效時(shí)轉(zhuǎn)入T4狀態(tài),同步操作引腳,同步操作 讀寫操作要保證存儲(chǔ)器或外設(shè)與微處理器速度一致 否則,慢速的I/O或存儲(chǔ)器發(fā)出一個(gè)信號(hào) 讓快速的微處理器等待 READY 就緒(準(zhǔn)備好) 輸入信號(hào),
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 心理跑步活動(dòng)方案
- 志愿者黨員宣傳活動(dòng)方案
- 開(kāi)美甲店活動(dòng)方案
- 通信網(wǎng)絡(luò)設(shè)備安裝與維護(hù)合同
- 微系列活動(dòng)策劃方案
- 開(kāi)業(yè)錦鯉活動(dòng)方案
- 開(kāi)業(yè)活動(dòng)店內(nèi)活動(dòng)方案
- 德育活動(dòng)校級(jí)活動(dòng)方案
- 彈跳訓(xùn)練熱身活動(dòng)方案
- 開(kāi)展野餐活動(dòng)方案
- 國(guó)家中小學(xué)智慧教育平臺(tái)培訓(xùn)專題講座
- 2023新譯林版新教材高一英語(yǔ)必修一全冊(cè)課文翻譯(英漢對(duì)照)
- 物業(yè)工程維修作業(yè)安全操作指南
- 《鈴兒響叮當(dāng)?shù)淖冞w》教學(xué)設(shè)計(jì)(江蘇省市級(jí)優(yōu)課)-九年級(jí)音樂(lè)教案
- 裝修常用數(shù)據(jù)手冊(cè)(空間布局和尺寸)
- 處方銷毀申請(qǐng)登記表
- 河南省2014年中考語(yǔ)文現(xiàn)代文閱讀真題
- 外研版一起小學(xué)英語(yǔ)四下《Module-6Unit-1-Ill-draw-the-pictures》課件
- 三明市公安局招聘警務(wù)輔助人員考試歷年真題
- 衛(wèi)生部手術(shù)分級(jí)目錄(2023年1月份修訂)
- LY/T 2121-2013檀香栽培技術(shù)規(guī)程
評(píng)論
0/150
提交評(píng)論