freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第4章16位和32位微處理器的指令系統(tǒng)及匯編語言編程(文件)

2024-11-05 08:09 上一頁面

下一頁面
 

【正文】 ASCII字符 39。 指變量所在段的首地址 ,當(dāng)需要訪問該變量時 , 它所在段的首地址一定要在某一段寄存器中 ② 變量的偏移屬性 。 標(biāo)識符是由字母 、 數(shù)字 ( 0~ 9) 、 特殊字符 ( ? 、 .、 、 _、 $) 等組成的字符串 , 但該字符串不能以數(shù)字或下劃線 ‘ _’作為開始字符 。而每個存儲單元中的初值由 DUP后面圓括號中的表達(dá)式給定,如果是 “ ? ” ,則表示變量的初值不確定 ⑥ 可以是以上表達(dá)式組成的序列,各表達(dá)式之間用逗號隔開 例 【 416】 有下面的數(shù)據(jù)段 , 畫出其內(nèi)存分配圖 DATA SEGMENT TABLE DB 1, 2, 3, 2 DUP(6, 2) COUNTER EQU $TABLE VARY DW 1234H CHAR DB ’123’, 3 DUP(1) POINTER1 DW VARY POINTER2 DD CHAR DATA ENDS 標(biāo)號是機(jī)器指令語句存放地址的符號表示 , 也可以是過程名 。 邏輯運(yùn)算是按位進(jìn)行的 , 所以運(yùn)算的結(jié)果仍是整數(shù)常量 一、數(shù)值表達(dá)式 ③ 移位運(yùn)算符有左移 SHL和右移 SHR 2個運(yùn)算符 。 其格式是: 類型 PTR 地址表達(dá)式 根據(jù)地址表達(dá)式的不同值 , 類型可以是 BYTE、 WORD、 DWORD、 NEAR、FAR 1.類型運(yùn)算符 PTR 為了將源程序中的指令正確地翻譯成目標(biāo)代碼 ,匯編程序要求每個語句中操作數(shù)的類型要明確 , 如果是雙操作數(shù)指令 , 還要求源操作數(shù)和目的操作數(shù)類型一致 , 既同時為字節(jié)類型或同時為字類型 。 該運(yùn)算符分離出其后變量或標(biāo)號所在段的首地址 ② 偏移屬性分離運(yùn)算符 OFFSET。 它的取值為: LENGTH變量 * TYPE 變量 , 也就是說 , 它的取值是一個變量所占內(nèi)存的實(shí)際字節(jié)數(shù) ③ 字節(jié)分離運(yùn)算符 HIGH和 LOW 格式: HIGH 常量或地址表達(dá)式; LOW 常量或地址表達(dá)式 其中 , HIGH分離出其后常量或地址表達(dá)式的高 8位 ,LOW分離出其后常量或地址表達(dá)式的低 8位 。 在分支程序中 , 不同的條件往往是通過標(biāo)志寄存器中條件標(biāo)志的不同狀態(tài)反映的 。 當(dāng)位移量為正時 , 表示向前轉(zhuǎn);當(dāng)位移量為負(fù)時 , 表示向后轉(zhuǎn) , 條件轉(zhuǎn)移指令的目的地址均是短標(biāo)號 條件轉(zhuǎn)移指令共有 18條,分成以下三類 1.簡單條件轉(zhuǎn)移指令 共有 10條,根據(jù)單個標(biāo)志的狀態(tài)決定是否轉(zhuǎn)移 共有 4條 , 根據(jù)多個標(biāo)志的狀態(tài)決定是否轉(zhuǎn)移 , 這類指令將比較對象視為無符號數(shù) 共有 4條 , 根據(jù)多個標(biāo)志的狀態(tài)決定是否轉(zhuǎn)移 ,這類指令將比較對象視為帶符號數(shù) 順序與分支程序的設(shè)計(jì) 二 、 無條件轉(zhuǎn)移 無條件轉(zhuǎn)移指令使 CPU無條件地轉(zhuǎn)移到指令中指明的目的地址處執(zhí)行 , 在程序中用它將各分支的出口重新匯集到一起構(gòu)成多分支結(jié)構(gòu) , 特別是當(dāng)條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍超過 128~ 127個字節(jié)時 , 往往要借助無條件轉(zhuǎn)移指令實(shí)現(xiàn) 順序與分支程序的設(shè)計(jì) 無條件轉(zhuǎn)移指令和要轉(zhuǎn)移的目的地址可以在同一段 , 也可以在另一段 。 下面的程序是由入口地址組成跳轉(zhuǎn)表的多路分支程序 例【4 3 1 】程序 循環(huán)程序設(shè)計(jì) 循環(huán)型結(jié)構(gòu)有 REPEATUNTIL模式 ( 見圖 48)和 WHILE模式 ( 見圖 49) 。例如利用計(jì)數(shù)來控制的循環(huán),每循環(huán)一次,計(jì)數(shù)值都要調(diào)整(增加或減少),控制部分根據(jù)計(jì)數(shù)器的值來決定是否退出循環(huán)??刂撇糠指鶕?jù)實(shí)際情況可分為計(jì)數(shù)控制(又分為正計(jì)數(shù)和倒計(jì)數(shù))和條件控制兩種 循環(huán)程序設(shè)計(jì) REPEATUNTIL和 WHILE兩種模式的區(qū)別是 , REPEATUNTIL模式是先執(zhí)行循環(huán)體 ,再判斷條件是否成立 , 因此對于 REPEATUNTIL模式不管條件是否成立循環(huán)體至少執(zhí)行一次; WHILE模式是先判斷條件是否成立再執(zhí)行循環(huán)體 , 因此對于 WHILE模式循環(huán)體可能一次也得不到執(zhí)行 循環(huán)程序設(shè)計(jì) 例 【 432】 已知有 N個數(shù)據(jù)存放在以 BUF為首地址的字節(jié)存儲區(qū)中 ,編程統(tǒng)計(jì)其中負(fù)數(shù)的個數(shù) 。然后 AX邏輯右移 1位,左邊補(bǔ) 0,在某一時刻 AX必然為 0。 如果主程序和子程序位于同一代碼段 , 則稱為段內(nèi)調(diào)用 , 此時在 PROC后可加 NEAR說明此子程序是近過程 。 因此 , 子程序調(diào)用指令 CALL共有 4種組合 , 見表 421 子程序設(shè)計(jì) 對于段間間接調(diào)用 , 需要雙字單元存放子程序的入口地址信息 , 第一個字單元中放子程序入口的偏移地址 , 第二個字單元中放子程序所在段的段首址 , 見表 422 2. 返回指令 RET RET指令通常作為子程序的最后一條指令,用來控制 CPU返回到主程序的斷點(diǎn)處繼續(xù)向下執(zhí)行, RET指令的語句格式及功能見表 423 子程序設(shè)計(jì) 無論是段內(nèi)返回還是段間返回 , 當(dāng) RET指令執(zhí)行后 , 主程序的斷點(diǎn)地址信息已送回到IP、 CS中 , 堆?;謴?fù)了轉(zhuǎn)子前的狀態(tài) RET指令的另一種格式是: RET N, 其中 N是偶數(shù) 。 因此 , 必須考慮現(xiàn)場的保存和恢復(fù) 。 這種主程序?yàn)樽映绦驕?zhǔn)備入口參數(shù) 、 子程序?yàn)橹鞒绦蛱峁┨幚斫Y(jié)果的過程稱為主程序和子程序間的參數(shù)傳遞 。所以寄存器法只適用于要傳遞參數(shù)較少的情況 子程序設(shè)計(jì) 例 【 434】 寄存器法參數(shù)傳遞舉例 , 編寫子程序求兩個數(shù)的最大公約數(shù) 【 分析 】 X和 Y中放著兩個整數(shù) , 在主程序中分別用寄存器AX和 BX將這兩個整數(shù)傳遞給計(jì)算這兩個整數(shù)最大公約數(shù)的子程序 GCDP, 子程序 GCDP將計(jì)算結(jié)果用寄存器 AX傳回主程序 , 存放在 GCD中 。 此法的優(yōu)點(diǎn)是每個子程序要處理的數(shù)據(jù)或送出的結(jié)果都有獨(dú)立的存儲單元 , 編寫程序時不易出錯 。 NEWLINE PROC PUSH AX PUSH DX MOV AH, 2 MOV DL, 0DH INT 21H MOV DL, 0AH INT 21H POP DX POP AX RET NEWLINE ENDP 常用的 DOS和 BIOS調(diào)用 我們在編制匯編源程序時 , 常常希望能從鍵盤輸入字符或在顯示器上顯示出程序運(yùn)行的結(jié)果 。這樣既便于操作系統(tǒng)對外設(shè)進(jìn)行統(tǒng)一管理,也便于用戶在編制程序時,不用考慮輸入 /輸出的控制細(xì)節(jié),提高了工作效率,使編制出來的程序更具有通用性 常用的 DOS和 BIOS調(diào)用 DOS提供了系統(tǒng)功能調(diào)用 , 編號從 0~ 57H, 主要分為設(shè)備管理 、 文件管理 、 目錄管理 、 及其它功能調(diào)用四大類 在微機(jī)的只讀存儲器 ROM中的程序 , 一部分是 BASIC語言解釋程序 , 另一部分是基本輸入 /輸出系統(tǒng) BIOS。 4. 擴(kuò)充的帶符號整數(shù)乘法指令 格式 1: IMUL OPD,OPS 格式 2: IMUL OPD,OPS1,OPS2 其中 , OPD是 16位通用寄存器 , 格式 1中的 OPS可以是 16位通用寄存器 、 字存儲器 、 8或 16位立即數(shù);格式 2中的 OPS1可以是 16位通用寄存器 、 字存儲器 , 但不能為立即數(shù);格式 2中的 OPS2只能為 8或 16位立即數(shù) 3.彈出堆棧指令 功能:格式 1是 OPD乘以 OPS,將乘積送 OPD;格式 2將 OPS1乘以 OPS2,乘積送 OPD 5.串輸入指令 格式 1: [REP]INS 目標(biāo)串 ,DX 格式 2: [REP]INSB 格式 3: [REP]INSW 功能:以 DX中的值為外設(shè)端口地址 , 從此端口輸入一字符存入由 ES:DI(或 EDI)所指的存儲器中 , 且根據(jù)方向標(biāo)志 DF和串操作的類型來修改 DI(或 EDI)的值 , 利用 REP前綴可以連續(xù)輸入串字符存入存儲器中 , 直到 CX(或 ECX)減到零為止 其中 , 格式 1中的目標(biāo)串為目標(biāo)操作數(shù)的符號地址 , 該符號地址確定了目標(biāo)操作數(shù)的屬性 (字或字節(jié) ), DX寄存器中的內(nèi)容為外設(shè)端口地址 。 功能:將 OPS所指的 4或 6(80386)個內(nèi)存單元中的 2個字或 3個字先后送給 OPD和相應(yīng)的段寄存器中 , LDS和 LES指令分別隱含 DS和 ES段寄存器 。 PUSHA可以將全部 16位通用寄存器按 AX、CX、 DX、 BX、 SP、 BP、 SI、 DI的順序入棧; PUSHAD可以將全部 32位通用寄存器按 EAX、 ECX、 EDX、 EBX、ESP、 EBP、 ESI、 EDI的順序入棧 。 其中 , OPS和被乘數(shù) (EAX)可為 32位通用寄存器或存儲器數(shù) 80386的尋址方式和 80386相對 80286增加的指令 帶符號乘法指令 格式 1: IMUL OPS。 MOVZX為零擴(kuò)展傳送指令 ,它將 OPS中的無符號數(shù)在高位加 0擴(kuò)展成和 OPD等長 ,然后傳送給 OPD; MOVSX為符號擴(kuò)展傳送指令 , 它將OPS中的帶符號數(shù)在高位加 OPS的符號 , 擴(kuò)展成和 OPD等長 , 然后傳送給 OPD 4.交換指令 格式: SWAP OPD,OPS 擴(kuò)展功能: 32位的 OPD和 OPS中的內(nèi)容相互交換,不能同時為存儲器數(shù)。 在這種尋址方式下 , 有效地址由表中的 4個分量計(jì)算產(chǎn)生 , 見表 426。 格式2和格式 3中已確定了串操作的類型 , 并且不帶操作數(shù) , INSB為字節(jié)串輸入 , INSW為字串輸入 80286相對 8086增加的指令 6. 串輸出指令 格式 1: [REP]OUTS DX,源串 格式 2:[REP]OUTSB 格式 3: [REP]OUTSW 功能:該指令與串輸入指令的操作剛好相反 , 該指令中 DS:SI(或 ESI)指向源串 , 以 DX中的值為外設(shè)端口地址 。 與 DOS的設(shè)備管理系統(tǒng)功能調(diào)用相比 , 使用BIOS能完成更復(fù)雜的輸入 /輸出操作 表 425中列出了最常用的 DOS和 BIOS調(diào)用 , 更詳細(xì)的內(nèi)容要查閱有關(guān)的資料 80286相對 8086增加的指令 1. 立即數(shù)入棧指令 格式: PUSH nnnn, 功能:將字立即數(shù) nnnn壓入堆棧 2. 將所有寄存器的內(nèi)容壓入堆棧指令 格式: PUSHA, 功能:將 8個 16位通用寄存器的內(nèi)容按 AX、 CX、 DX、 BX、 SP、 BP、 SI、 DI的順序入棧 。如果每次都需要我們根據(jù)自己的工作環(huán)境來設(shè)計(jì)控制這些外設(shè)工作的程序 , 則必須要先搞清楚與之有關(guān)的設(shè)備 、 電路 、 接口等各方面的問題 , 既復(fù)雜 , 效率又低 , 也沒有通用性 正確的做法是:把這些控制過程編寫成程序,作為操作系統(tǒng)的一部分事先放在系統(tǒng)盤上,用戶在需要時只要按規(guī)定的格式設(shè)置好參數(shù),直接調(diào)用即可。 參數(shù)存放在 X、 Y中可由 GCDP子程序使用 , 子程序處理結(jié)束后將結(jié)果存入 GCD, 主程序計(jì)算最小公倍數(shù)送LCM , 計(jì)算 X 、 Y 最 小 公 倍 數(shù) 的 方 法 是 :LCM=(X*Y)/GCD 例【4 3 5 】程序 子程序設(shè)計(jì) 子程序也可以不帶參數(shù) , 只是完成某種功能 。 當(dāng)兩個整數(shù)不相等時用大數(shù)減去小數(shù) ,直到兩個數(shù)相等為止 。此法的優(yōu)點(diǎn)是參數(shù)傳遞快 ,編程也較方便 ,且節(jié)省內(nèi)存單元。 例如 , 若子程序 SUBP中改變了寄存器 AX、 BX、 CX的內(nèi)容 ,則在子程序的開始處將這些寄存器的內(nèi)容入棧保存 , 在子程序的返回指令之前用出棧指令依次恢復(fù) , 具體實(shí)現(xiàn)方法如下 : 子程序設(shè)計(jì) 四 、 主程序和子程序間的參數(shù)傳遞 主程序在調(diào)用子程序之前 , 必須把需要子程序處理的原始數(shù)據(jù)傳遞給子程序 , 即為子程序準(zhǔn)備入口參數(shù) 。其操作是在正常 RET操作之后再做 SP+N→SP 子程序設(shè)計(jì) 三 、 調(diào)用子程序前后怎樣保存和恢復(fù)寄存器 如果在子程序中要用到某些寄存器 ( 或存儲單元 ) , 就會破壞這些寄存器 ( 或存儲單元 ) 在轉(zhuǎn)子前原有的內(nèi)容 。 如果 NEAR和 FAR都不寫 , 系統(tǒng)默認(rèn)該子程序是近過程 子程序設(shè)計(jì) 二 、 子程序的調(diào)用和返回 為了實(shí)現(xiàn)子程序的調(diào)用和返回 , 可使用子程序調(diào)用指令 CALL和返回指令 RET 1. 子程序調(diào)用指令 CALL 子程序調(diào)用指令 CALL的格式是:
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1