




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 微型計(jì)算機(jī)系統(tǒng)概述微機(jī)原理與接口技術(shù)第一章 微型計(jì)算機(jī)系統(tǒng)概述概述 微處理器 微型計(jì)算機(jī)及微型計(jì)算機(jī)系統(tǒng)計(jì)算機(jī)中數(shù)的表示和編碼計(jì)算機(jī)的發(fā)展第一代 電子管時(shí)代(1946-1958) 耗電高,體積大,定點(diǎn)計(jì)算,機(jī)器語(yǔ)言,匯編語(yǔ)言第二代 晶體管時(shí)代(1958-1965) 變集中處理為分級(jí)處理,浮點(diǎn)運(yùn)算、高級(jí)語(yǔ)言第三代 中小規(guī)模集成電路時(shí)代(1965-1970) 存儲(chǔ)容量大,運(yùn)算速度快,幾十至幾百萬(wàn)次/秒第四代 大規(guī)模、超大規(guī)模集成電路時(shí)代(1971至今) 向大型機(jī)和微型機(jī)兩個(gè)方向發(fā)展現(xiàn)代計(jì)算機(jī)發(fā)展方向 巨型化,微型化,網(wǎng)絡(luò)化,智能化,多媒體化 1-1 概述 經(jīng)歷了4位機(jī)、8位機(jī)、16位機(jī)至高
2、性能的32位機(jī),64 位機(jī)正在廣泛應(yīng)用。 微型計(jì)算機(jī)的發(fā)展 應(yīng)用領(lǐng)域科學(xué)和工程計(jì)算 密碼破譯,天氣預(yù)報(bào),地質(zhì)勘探,衛(wèi)星軌道計(jì)算工業(yè)控制 機(jī)器人以及各種自動(dòng)化裝備,溫度調(diào)節(jié),閥門(mén)控制輔助設(shè)計(jì)/分析/制造/教學(xué) 機(jī)械CAD,建筑CAD,CAE,CAM,CAI數(shù)據(jù)處理 數(shù)據(jù)庫(kù)管理,企業(yè)信息管理,統(tǒng)計(jì)匯總、辦公自動(dòng)化智能模擬 人工智能、專(zhuān)家系統(tǒng)、自學(xué)習(xí) 1-2 微處理器 微處理器微處理器 中央處理器:運(yùn)算器和控制器合在一起稱(chēng)中央處理器。 微處理器:利用超大規(guī)模集成電路技術(shù)把運(yùn)算器和控制器集成在一片硅片上形成微處理器,即CPU。一般由算術(shù)邏輯單元、累加器和通用寄存器組、程序計(jì)數(shù)器、數(shù)據(jù)地址鎖存器緩沖器、
3、時(shí)序和控制邏輯部件及內(nèi)部總線等組成。 微處理器結(jié)構(gòu)CPU的主要功能是取出指令、分析、并執(zhí)行指令,也就是不斷地從存儲(chǔ)器中取出指令和操作數(shù),完成指令所規(guī)定的操作工作。 1-2 微處理器 微處理器1-2 微處理器 微處理器1)算術(shù)邏輯單元ALU:進(jìn)行各種算術(shù)運(yùn)算和邏輯運(yùn)算。2)累加器和通用寄存器組 :保存參加運(yùn)算的數(shù)據(jù)和運(yùn)算的 中間結(jié)果。累加器是特殊的寄存器,它既向ALU提供操作 數(shù),又接收ALU的運(yùn)算結(jié)果。3)CPU中有一些專(zhuān)用寄存器(如程序計(jì)數(shù)器PC、堆棧指針 SP和標(biāo)志寄存器FR等)。4)程序計(jì)數(shù)器用來(lái)存放下一條要執(zhí)行的指令地址。1-2 微處理器 微處理器5)堆棧指針SP:用來(lái)存放棧頂?shù)刂?。?/p>
4、棧是一種特殊的存 貯區(qū)域,按照“先進(jìn)后出”的原則工作。6)標(biāo)志寄存器:存放指令執(zhí)行結(jié)果的特征和處理器的狀態(tài)。7)指令譯碼器:對(duì)指令進(jìn)行譯碼,產(chǎn)生相應(yīng)的控制信號(hào) 送至?xí)r序和控制邏輯電路,組合成外部電路工作所需 要的時(shí)序和控制信號(hào)。1-2 微處理器 微處理器 指令執(zhí)行的基本過(guò)程:(1)開(kāi)始執(zhí)行程序時(shí),程序計(jì)數(shù)器中保存第一條 指令的地址,指明當(dāng)前將要執(zhí)行的指令存放 在存儲(chǔ)器的哪個(gè)單元。(2)控制器: a) 將程序計(jì)數(shù)器中的地址送至地址寄存器MAR。 b) 發(fā)出讀命令。(3)存儲(chǔ)器:根據(jù)地址取出一條指令。 1-2 微處理器 微處理器 (4)指令譯碼器譯碼,控制邏輯陣列發(fā)操作命令,執(zhí)行指 令操作碼規(guī)定的
5、操作。 (5)修改程序計(jì)數(shù)器的內(nèi)容。1-2 微處理器 微處理器 微型計(jì)算機(jī)工作過(guò)程。 1.取指令 2.執(zhí)行指令 3.取指令 4.執(zhí)行指令1-2 微處理器 指令流水線 CPU主要功能:取指令、對(duì)指令進(jìn)行譯碼和執(zhí)行指令 傳統(tǒng)結(jié)構(gòu)CPU執(zhí)行程序時(shí),取指令與執(zhí)行指令交替進(jìn)行: 為提高CPU的工作效率,采用指令流水線技術(shù),各個(gè)部件并行工作,減少了指令的平均執(zhí)行時(shí)間 1-2 微處理器 指令流水線80868088CPU二級(jí)流水線:Fetch1-2 微處理器 指令流水線PC指向正被取指的指令,而非正在執(zhí)行的指令A(yù)RM7TDMI核采用了3級(jí)流水線 復(fù)雜指令集計(jì)算機(jī) CISC處理器的主要特點(diǎn) 指令集龐大,指令的長(zhǎng)
6、度不相同,指令譯碼步驟較復(fù)雜等為何形成CISC處理器? 為高級(jí)語(yǔ)言編程方便和提高程序的運(yùn)行速度,用接近高級(jí)語(yǔ)言的語(yǔ)句的機(jī)器指令來(lái)幫助軟件設(shè)計(jì) 硬件成本的不斷下降,軟件成本的不斷提高。 程序兼容性的需求 1-2 微處理器 CISC與RISC 精簡(jiǎn)指令集計(jì)算機(jī) 提出背景:使用指令的80,只占處理器指令集的20RISC的基本思想 簡(jiǎn)化指令功能,指令集中只包含使用頻度高、功能簡(jiǎn)單、能夠在一個(gè)節(jié)拍內(nèi)執(zhí)行完成的指令 將較復(fù)雜的功能用一段子程序來(lái)實(shí)現(xiàn) 大量使用寄存器,優(yōu)化 CPU的控制邏輯,提高程序執(zhí)行的速度 問(wèn)題:軟件開(kāi)發(fā)變得復(fù)雜;性能依賴(lài)于編譯器的有效性等 1-2 微處理器 CISC與RISC 1-3
7、微型計(jì)算機(jī)及微型計(jì)算機(jī)系統(tǒng)1-3-1微型計(jì)算機(jī)微型計(jì)算機(jī) 微型計(jì)算機(jī)由CPU、存儲(chǔ)器、輸入輸出接口及系統(tǒng)總線組成。微機(jī)與外部交換信息通過(guò)總線控制。外部采用三總線結(jié)構(gòu)AB、DB、CB。內(nèi)部采用單總線 , 即內(nèi)部所有單元電路都掛在內(nèi)部總線上,分時(shí)使用總線。1-3-1 微型計(jì)算機(jī)1、總線及存儲(chǔ)器 系統(tǒng)總線包括數(shù)據(jù)總線DB、地址總線AB和控制總線CB。 地址總線:傳送地址信息,單向。其位數(shù)決定了CPU可以直接尋址的內(nèi) 存空間、I/O口數(shù)目。 A15A0,可尋址216=64KB內(nèi)存單元 。A7A0,可尋址 28=256外設(shè)接口。數(shù)據(jù)總線:傳送數(shù)據(jù),雙向。其位數(shù)和微處理器的位數(shù)相對(duì)應(yīng)。控制總線:傳輸控制信
8、號(hào)。 1-3-1 微型計(jì)算機(jī)存儲(chǔ)器1)存儲(chǔ)器是用來(lái)存儲(chǔ)數(shù)據(jù)、程序的部件。按照存儲(chǔ)器與CPU的關(guān)系,分為內(nèi)存儲(chǔ)器(主存儲(chǔ)器)和外存儲(chǔ)器。按其工作方式,又可分為隨機(jī)存儲(chǔ)器和只讀存儲(chǔ)器。2)三級(jí)存儲(chǔ)體系結(jié)構(gòu) :高速緩沖存儲(chǔ)器、內(nèi)存儲(chǔ)器和外存儲(chǔ)器 1-3-1 微型計(jì)算機(jī)輸入輸出設(shè)備和接口: 外設(shè): 計(jì)算機(jī)中除主機(jī)以外的其它機(jī)電或電子設(shè)備統(tǒng) 稱(chēng)外部設(shè)備,簡(jiǎn)稱(chēng)外設(shè)。 I/O接口:CPU和外設(shè)之間的IO適配器,是微型計(jì)算機(jī) 的重要組成部件。1-3-1微型計(jì)算機(jī)2、微型計(jì)算機(jī)分類(lèi) 從微型計(jì)算機(jī)的結(jié)構(gòu)形式來(lái)分,為單片機(jī)、單板機(jī)和多板機(jī)。 單片微型計(jì)算機(jī)(即單片機(jī))。把微型計(jì)算機(jī)的主要部件CPU、一定容量的存儲(chǔ)器
9、、IO接口及時(shí)鐘發(fā)生器集成在一塊芯片上的單芯片式微型計(jì)算機(jī)。具有體積小、指令系統(tǒng)簡(jiǎn)單、性?xún)r(jià)比高等優(yōu)點(diǎn),廣泛應(yīng)用于工業(yè)控制、智能儀器儀表等領(lǐng)域。 單板微型計(jì)算機(jī),即單板機(jī)。是將微處理器、一定容量的存儲(chǔ)器、輸入輸出接口、簡(jiǎn)單的外部設(shè)備、輔助設(shè)備通過(guò)總線裝配在一塊印刷電路板上的微型計(jì)算機(jī)。主要用于實(shí)驗(yàn)室以及簡(jiǎn)單的控制場(chǎng)合。 1-3-1 微型計(jì)算機(jī) 多板微型計(jì)算機(jī)也叫系統(tǒng)機(jī)。是將單板機(jī)模塊、存貯器模塊和IO接口等模塊組裝在一塊主機(jī)板上,通過(guò)主機(jī)板上的系統(tǒng)總線和各種外設(shè)適配器連接鍵盤(pán)、顯示器、打印機(jī)、光驅(qū)、軟、硬盤(pán)驅(qū)動(dòng)器,配上電源。將主機(jī)板、軟、硬盤(pán)驅(qū)動(dòng)器等安裝同一機(jī)箱內(nèi),適配器、適配卡插在總線擴(kuò)展槽上
10、,通過(guò)總線相互連接,就構(gòu)成多板微型計(jì)算機(jī),配上系統(tǒng)軟件即構(gòu)成微型計(jì)算機(jī)系統(tǒng)。個(gè)人計(jì)算機(jī)就是多板微型計(jì)算機(jī)系統(tǒng)。1-3-1 微型計(jì)算機(jī) 按照微型計(jì)算機(jī)數(shù)據(jù)總線的寬度,也就是按照在一次操作中所能傳送的二進(jìn)制位數(shù)的最大值來(lái)進(jìn)行劃分,可分為4位、8位、32位、64位機(jī)。 按照微型計(jì)算機(jī)的應(yīng)用,又可將微型機(jī)分為通用機(jī)和專(zhuān)用機(jī)。1-3-1 微型計(jì)算機(jī)1-3-2 微型計(jì)算機(jī)系統(tǒng) 微型計(jì)算機(jī)系統(tǒng) 以微型計(jì)算機(jī)為主體,配上系統(tǒng)軟件和外部設(shè)備以后, 就構(gòu)成完整的微型計(jì)算機(jī)系統(tǒng)。 1-3-2微型計(jì)算機(jī)系統(tǒng)1-3-2 微型計(jì)算機(jī)系統(tǒng) 性能指標(biāo): 1)字長(zhǎng):微型計(jì)算機(jī)能夠直接處理的二進(jìn)制數(shù)據(jù)的位數(shù), 反映一臺(tái)機(jī)器的計(jì)算
11、精度。 2)主存容量:主存貯器所能存貯的信息總量為主存容量。是衡量計(jì)算機(jī)處理能力大小的一個(gè)重要指標(biāo)。 表示主存容量有兩種方法:用字節(jié)數(shù)表示;用單元數(shù)字長(zhǎng)表示。1-3-2 微型計(jì)算機(jī)系統(tǒng)3) 主頻:主時(shí)鐘信號(hào)的頻率稱(chēng)為計(jì)算機(jī)主頻,用于協(xié)調(diào)計(jì)算機(jī)操作。決定計(jì)算機(jī)的處理速度,頻率越高,處理速度越快。4) 運(yùn)算速度:計(jì)算機(jī)每秒鐘運(yùn)算的次數(shù)。5) 系統(tǒng)可靠性:指計(jì)算機(jī)系統(tǒng)在規(guī)定的時(shí)間和工作條下正常工作而不發(fā)生故障的概率。計(jì)算機(jī)系統(tǒng)的可靠性含系統(tǒng)的可維護(hù)性和可用性,三者構(gòu)成計(jì)算機(jī)系統(tǒng)的可靠性指標(biāo)。 1-3-2 微型計(jì)算機(jī)系統(tǒng)6)系統(tǒng)的兼容性:兼容性指一種計(jì)算機(jī)中的設(shè)備和程序可 以用于其他多種系統(tǒng)中的性能,
12、分硬件兼容和軟件兼容。7)性能價(jià)格比:是計(jì)算機(jī)產(chǎn)品性能優(yōu)劣的綜合性指標(biāo)。包 括計(jì)算機(jī)硬件和軟件的各種性能。1-4 計(jì)算機(jī)中數(shù)的表示和編碼 1-4-1計(jì)算機(jī)中常用的數(shù)制及其轉(zhuǎn)換一.進(jìn)位計(jì)數(shù)制的表示方法 十進(jìn)制ND十個(gè)數(shù)碼:09,逢十進(jìn)一。例 1234.5=1103 +2102 +3101 +4100 +510-1加權(quán)展開(kāi)式以10為基數(shù),各位系數(shù)為09。一般表達(dá)式:n:整數(shù)位數(shù),m:小數(shù)位數(shù),ai :取值范圍0-9 二進(jìn)制NB兩個(gè)數(shù)碼:0、1, 逢二進(jìn)一。例 1101.101=123+122+021+120+12-1+12-3 加權(quán)展開(kāi)式以2為基數(shù),各位系數(shù)為0、1。一般表達(dá)式: 1-4-1 計(jì)算
13、機(jī)中的進(jìn)位計(jì)數(shù)制八進(jìn)制No八個(gè)數(shù)碼:0、1、2、3、4、5、6、7 逢八進(jìn)一。 例 1101.101=183+182+081+180+18-1+18-3 加權(quán)展開(kāi)式以8為基數(shù),各位系數(shù)為0 7。 一般表達(dá)式:1-4-1 計(jì)算機(jī)中的進(jìn)位計(jì)數(shù)制 十六進(jìn)制NH十六個(gè)數(shù)碼09、AF,逢十六進(jìn)一。例:DFC.8=13162 +15161 +12160 +816-1 展開(kāi)式以十六為基數(shù),各位系數(shù)為09,AF。一般表達(dá)式:1-4-1 計(jì)算機(jī)中的進(jìn)位計(jì)數(shù)制1-4-1 計(jì)算機(jī)中的進(jìn)位計(jì)數(shù)制小節(jié)每一計(jì)數(shù)制有一確定的基數(shù)R,系數(shù)ai有R種可能的取值“逢R進(jìn)一”小數(shù)點(diǎn)右移一位相當(dāng)于乘R;反之相當(dāng)于除以R二. 進(jìn)位計(jì)數(shù)
14、制之間的轉(zhuǎn)換R 進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù):按權(quán)展開(kāi),求和 例:1011.1010B=123+121+120+12-1+12-3=11.625DFC.8H =13162+15161+12160+816-1 = 3580.5十進(jìn)制數(shù)轉(zhuǎn)換為R進(jìn)制數(shù):整數(shù)和小數(shù)部分分別進(jìn)行轉(zhuǎn)換 1、整數(shù)部分 “除R取余”:十進(jìn)制整數(shù)不斷除以轉(zhuǎn)換進(jìn)制基數(shù),直至商為 0。每除一次取一個(gè)余數(shù),從低位排向高位。二. 進(jìn)位計(jì)數(shù)制之間的轉(zhuǎn)換例:39轉(zhuǎn)換成二進(jìn)制數(shù) 39 =100111B2 39 2 19 1 ( b0) 2 9 1 ( b1) 2 4 1 ( b2) 2 2 0 ( b3) 2 1 0 ( b4) 0 1 ( b5
15、)二. 進(jìn)位計(jì)數(shù)制之間的轉(zhuǎn)換2、小數(shù)部分 “乘R取整”:用轉(zhuǎn)換進(jìn)制的基數(shù)乘以小數(shù)部分,直至小 數(shù)為0或達(dá)到轉(zhuǎn)換精度要求的位數(shù)。每乘一次取一次整數(shù),從最高位排到最低位。例: 1、0.625轉(zhuǎn)換成二進(jìn)制數(shù)0.625 2 1.250 1 (b-1) 2 0.5 0 0 (b-2) 2 1.0 1 (b-3) 0.625 = 0.101B二. 進(jìn)位計(jì)數(shù)制之間的轉(zhuǎn)換二進(jìn)制與八進(jìn)制、十六進(jìn)制之間的轉(zhuǎn)換 八進(jìn)制 二進(jìn)制:一位八進(jìn)制數(shù)用三位二進(jìn)制數(shù)表示。 十六進(jìn)制 二進(jìn)制:一位十六進(jìn)制數(shù)用四位二進(jìn)制數(shù)表示。 二進(jìn)制 八進(jìn)制:從小數(shù)點(diǎn)開(kāi)始,分別向左右兩邊把三位二進(jìn) 制數(shù)碼劃為一組,最左和最右一組不足三位 用0補(bǔ)
16、充,然后每組用一個(gè)八進(jìn)制數(shù)碼代替。 二進(jìn)制 十六進(jìn)制:與八進(jìn)制類(lèi)似,但是四位分為一組。1-4-2 帶符號(hào)數(shù)的表示無(wú)符號(hào)數(shù)和帶符號(hào)數(shù) 無(wú)符號(hào)數(shù):機(jī)器的全部有效位均用來(lái)表示數(shù)的大小,如 N01001 表示無(wú)符號(hào)數(shù)9 帶符號(hào)數(shù):機(jī)器中,最高位作符號(hào)位(數(shù)的符號(hào)用“0”、 “1” 表示), 其余位為數(shù)值位。機(jī)器數(shù)與真值 機(jī)器數(shù):機(jī)器中數(shù)的表示形式,如原碼、反碼、補(bǔ)碼。 真值: 機(jī)器數(shù)所代表的實(shí)際數(shù)值 例:一個(gè)8位機(jī)器數(shù)與它的真值對(duì)應(yīng)關(guān)系: 真值: X1=+84=+1010100B X2=-84= -1010100B 機(jī)器數(shù):X1機(jī)= 01010100 X2機(jī)= 110101001-4-2 帶符號(hào)數(shù)的表
17、示原碼 最高位為符號(hào)位,0表示正數(shù),1表示負(fù)數(shù)。數(shù)值位與真值數(shù)值位相同。例:真值: x1 = +1010100B x2 = 1010100B 機(jī)器數(shù):x1原 = 01010100 x2原 = 11010100 特點(diǎn): 1、表示簡(jiǎn)單、直觀。 2、0的表示不唯一,即真值0有兩種不同的表示形式,0 或 -0。 0原=0.000 -0原=1.000 3、加減運(yùn)算復(fù)雜。 正數(shù)的反碼與其原碼相同。 負(fù)數(shù)反碼符號(hào)位為 1,數(shù)值位為原碼數(shù)值各位取反。例: 8位反碼機(jī)器數(shù) x= +4: x原= 00000100 x反= 00000100 x= -4 : x原= 10000100 x反= 11111011 x=
18、+0: x原= 00000000 x反= 00000000 x= -0 : x原= 10000000 x反= 11111111 x= +127: x原= 01111111 x反= 01111111 x= -127 : x原= 11111111 x反= 100000001-4-2 帶符號(hào)數(shù)的表示反碼1-4-2 帶符號(hào)數(shù)的表示補(bǔ)碼 數(shù)的補(bǔ)碼與“模”有關(guān) “?!?計(jì)數(shù)系統(tǒng)的量程 X補(bǔ)= MX (mod M) 當(dāng)X0,M丟掉, X補(bǔ)=X 當(dāng)X0,X補(bǔ)= M+X=M-X。 正數(shù)的補(bǔ)碼與原碼相同;負(fù)數(shù)的補(bǔ)碼為其反碼加1。 例:8位二進(jìn)制數(shù)的模為: 28 = 256 當(dāng)X減數(shù),即54 24 例:比較120與
19、-74的大小 解:120-(-74)=124+74 01111000 01001010 011000010 OF=1,SF=1,則被減數(shù)減數(shù),即120 -74對(duì)有符號(hào)數(shù)的比較操作,若與的值相同,則被減數(shù)比減數(shù)大,否則被減數(shù)比減數(shù)小.3.2.2算術(shù)運(yùn)算指令例:比較24與54的大小 解:24-54=24+(-54) 00011000 24的補(bǔ)碼 +11001010 -54的補(bǔ)碼 11100010 OF=0,SF=1,則被減數(shù)減數(shù),即24 54 例:比較-24與120的大小 解:-24-120=-24補(bǔ)+ -120補(bǔ) 11101000 = -24補(bǔ) + 10001000 = -120補(bǔ) 101110
20、000 OF=1,SF=0,則被減數(shù)減數(shù),即-24 ) JAE/JNA OPRD 高于等于或不低于轉(zhuǎn)移 (=)JB/JNAE OPRD 小于或不大于等于轉(zhuǎn)移 ()JBE/JNA OPRD 小于等于或不大于轉(zhuǎn)移 ()JGE/JNL OPRD 高于等于或不低于轉(zhuǎn)移 (=)JL/JNGE OPRD 小于或不大于等于轉(zhuǎn)移 ()JLE/JNG OPRD 小于等于或不大于轉(zhuǎn)移 (=)帶符號(hào)數(shù)比較轉(zhuǎn)移指令 測(cè)試轉(zhuǎn)移指令JCXZ OPRD :CX=0 時(shí)轉(zhuǎn)移 子程序調(diào)用和返回指令子程序是完成特定功能的一段程序當(dāng)主程序(調(diào)用程序)需要執(zhí)行這個(gè)功能時(shí),采用CALL調(diào)用指令轉(zhuǎn)移到該子程序的起始處執(zhí)行當(dāng)運(yùn)行完子程序功
21、能后,采用RET返回指令回到主程序繼續(xù)執(zhí)行CALL labelRET主程序子程序子程序調(diào)用和返回指令1.調(diào)用指令(1)段內(nèi)調(diào)用: CALL NEAR PTR OPRD 操作:SP=SP-2,(SP)+1),(SP)=IP, IP=IP+16位位移量 CALL指令首先將當(dāng)前IP內(nèi)容壓入堆棧,然后轉(zhuǎn)入子程序。(2)段間調(diào)用:CALL FAR PTR OPRD 操作:SP=SP-2,(SP)+1),(SP)=CS; SP=SP-2,(SP)+1),(SP)=IP; IP=EA;CS=EA+2 CALL指令先把CS壓入堆棧,再把IP壓入堆棧, 然后轉(zhuǎn)入子程序。例:CALL NEARBX ;段內(nèi)調(diào)用CA
22、LL FAR1000 ;段間調(diào)用子程序調(diào)用和返回指令2. 返回指令(1) 段內(nèi)返回: RET IPSS:SP, SPSP2從棧頂彈出一個(gè)字送到IP,棧頂指針SP+2(2) 段間返回: RET, RETF IPSS:SP,SPSP2 CSSS:SP,SPSP2從棧頂彈出第一個(gè)字送到IP,SP+2,再?gòu)棾鲆粋€(gè)字送到CS,SP+2(3) RET n與RET相同,SP+2(4)后,再使SP加上n循環(huán)控制指令 對(duì)于需要重復(fù)進(jìn)行的操作,微機(jī)系統(tǒng)可用循環(huán)程序結(jié)構(gòu)來(lái)進(jìn)行,8086/8088系統(tǒng)為了簡(jiǎn)化程序設(shè)計(jì),設(shè)置了一組循環(huán)指令,這組指令主要對(duì)CX或標(biāo)志位ZF進(jìn)行測(cè)試,確定是否循環(huán) 指令格式 執(zhí)行操作 LOO
23、P OPRD CX=CX-1;若CX0,則循環(huán) LOOPNZ/LOOPNE OPRDCX=CX-1,若CX0 且ZF=0,則循環(huán) LOOPZ/LOOPE OPRD CX=CX-1,若CX0 且ZF=1,則循環(huán) 循環(huán)控制指令 例: 有一首地址為ARRAY的M個(gè)字?jǐn)?shù)組,試編寫(xiě)一段程序,求出該數(shù)組的內(nèi)容之和(不考慮溢出),并把結(jié)果存入TOTAL中,程序段如下: MOV CX,M ;設(shè)計(jì)數(shù)器初值 MOV AX,0 ;累加器初值為0 MOV SI,AX ;地址指針初值為0START:ADD AX,ARRAYSI ADD SI,2 ;修改指針值(字操作,因此加2) LOOP START ;重復(fù) MOV T
24、OTAL,AX ;存結(jié)果 中斷指令中斷(Interrupt )是又一種改變程序執(zhí)行順序的方法.中斷請(qǐng)求可以來(lái)自處理器外部的中斷源,也可以由處理器執(zhí)行指令引起例如執(zhí)行INT 20H指令。8086可以管理256個(gè)中斷.各種中斷用一個(gè)向量編號(hào)來(lái)區(qū)別.中斷向量表(0:0 0:3FFH) 存放中斷程序的入口地址。中斷請(qǐng)求斷點(diǎn)IRET主程序中斷服務(wù)程序中斷指令軟件中斷指令格式:INT n操作:(1) 標(biāo)志寄存器壓入堆棧;(SP-2)(2) 清中斷允許標(biāo)志IF及單步跟蹤TF(3) 將主程序下一條指令地址(斷點(diǎn)地址)的段值及偏移量入棧; (SP-4)(4) 將存放在地址為 0:(n*4)處的中斷程序的入口地址
25、從中斷向量表中讀出,并放入IP及CS,CPU轉(zhuǎn)入中斷服務(wù)程序。軟件中斷返回格式:IRET操作:從堆?;謴?fù)斷點(diǎn)地址;恢復(fù)標(biāo)志寄存器內(nèi)容中斷指令軟件中斷有:除法錯(cuò)中斷:執(zhí)行除法指令,結(jié)果溢出產(chǎn)生的 0 號(hào)中斷(相當(dāng)于INT 00H)指令中斷:執(zhí)行中斷調(diào)用指令I(lǐng)NT n 產(chǎn)生的 n 號(hào)中斷斷點(diǎn)中斷:用于斷點(diǎn)調(diào)試(INT 3)的 3 號(hào)中斷溢出中斷:執(zhí)行溢出中斷指令(INTO),OF1產(chǎn)生的 4 號(hào)中斷單步中斷:TF1在每條指令執(zhí)行后產(chǎn)生的 1 號(hào)中斷 (相當(dāng)于INT 01H)3.2.5 標(biāo)志處理和CPU控制類(lèi)指令 標(biāo)志處理指令用來(lái)控制標(biāo)志,主要有CF、DF和IF三個(gè)。處理器控制指令用以控制處理器的工
26、作狀態(tài),均不影響標(biāo)志位我們僅列出了一些常用指令:STC:置進(jìn)位標(biāo)志,CF=1CLC:清進(jìn)位標(biāo)志,CF=0CMC:進(jìn)位標(biāo)志取反CLD:清方向標(biāo)志,DF=0STD:置方向標(biāo)志,DF=1CLI:關(guān)中斷標(biāo)志,IF=0,不允許中斷STI:開(kāi)中斷標(biāo)志,IF=1,允許中斷3.2.5 標(biāo)志處理和CPU控制類(lèi)指令CPU控制類(lèi)指令HLT: 使處理器處于停止?fàn)顟B(tài),不執(zhí)行指令WAIT:使處理器處于等待狀態(tài),TEST線為低時(shí),退 出等待ESC: 使協(xié)處理器從系統(tǒng)指令流中取得指令LOCK:封鎖總線指令,可放在任一條指令前作為前 綴NOP:空操作指令,常用于程序的延時(shí)和調(diào)試3.3 ARM指令系統(tǒng)簡(jiǎn)介ARM處理器指令系統(tǒng)的特
27、點(diǎn)ARM處理器尋址方式的特點(diǎn)ARM處理器指令系統(tǒng)3.3.1 ARM指令系統(tǒng)特點(diǎn)ARM處理器核有兩種指令集32位的ARM指令集16位的Thumb指令集(Thumb指令集是ARM指令集的子集,可隨時(shí)在兩種指令集中進(jìn)行切換)指令長(zhǎng)度固定所有指令有相同的基本格式: S, ,opcode為指令操作碼,cond為執(zhí)行條件,S表示該指令的執(zhí)行是否影響CPSR寄存器的值(若寫(xiě)上則影響CPSR),Rd為目的操作數(shù)(寄存器),Rn為第一源操作數(shù)(寄存器),operand2 為第二個(gè)操作數(shù)。“”符號(hào)內(nèi)的項(xiàng)是必需的,“”符號(hào)內(nèi)的項(xiàng)是可選的。 3.3.1 ARM指令系統(tǒng)特點(diǎn)所有指令均可有條件執(zhí)行執(zhí)行條件(cond)表示
28、指令執(zhí)行的前提條件: 條件碼助記符(cond)CPSR標(biāo)志位狀態(tài)含義EQZ=1相等NEZ=0不相等CS/HSC=1無(wú)符號(hào)數(shù)大于或等于CC/LOC=0無(wú)符號(hào)數(shù)小于例: 指令“ADD EQ R0, R1, R2”在執(zhí)行時(shí)首先檢查CPSR中的Z標(biāo)志位,只有在Z=1時(shí)才執(zhí)行指定的加法運(yùn)算。 轉(zhuǎn)移指令+條件域 條件轉(zhuǎn)移指令算術(shù)/邏輯運(yùn)算只針對(duì)寄存器操作數(shù)存儲(chǔ)器中的操作數(shù)先取到寄存器中 3.3.2 ARM尋址方式的特點(diǎn)立即尋址ARM指令長(zhǎng)度32,留給”立即數(shù)”操作數(shù)的位數(shù)只有12位. 該立即數(shù)空間分為兩段:一段為8位立即數(shù)(immed_8),另一段4位為循環(huán)移位的位數(shù)(rotate_imm)。32位立即數(shù)
29、按如下方式求得: immed_8 循環(huán)右移(2rotate_imm)位出現(xiàn)在指令中的立即數(shù)若能按上述計(jì)算得到,就是合法的立即數(shù);反之不合法.有:直接尋址,寄存器尋址,寄存器間接尋址,寄存器變址尋址等.3.3.2 ARM尋址方式的特點(diǎn)帶移位預(yù)處理的寄存器尋址方式當(dāng)?shù)谝辉床僮鲾?shù)是寄存器尋址時(shí),第二源操作數(shù)可以指定第一源操作的移位方式和移位位數(shù): MOV R0, R2, LSL #3 ;R2邏輯左移3位R0移位類(lèi)型ASR #n (算術(shù)右移n位)LSL #n (邏輯左移n位)LSR #n (邏輯右移n位)ROR #n (循環(huán)右移n位)RRX #n (帶擴(kuò)展的循環(huán)右移n位:在數(shù)據(jù)的最高位與最低位之間添加
30、CPSR中的進(jìn)位標(biāo)志C)3.3.2 ARM尋址方式的特點(diǎn)寄存器變址尋址可自動(dòng)改變基址寄存器的內(nèi)容LDR R0, R1, #4 ; (R0) R1+4(執(zhí)行后R1內(nèi)容不變)LDR R0, R1, #4! ; (R0) R1+4, 之后R1R1+4LDR R0, R1, #4 ; (R0) R1, 之后R1R1+43.3.3 ARM處理器指令簡(jiǎn)介加載指令LDR及存儲(chǔ)指令STRLDR指令從內(nèi)存中取出數(shù)據(jù)加載到寄存器STR指令將寄存器內(nèi)容存儲(chǔ)到內(nèi)存的指定地址。 指令格式: LDRT, 加載指定地址上的數(shù)據(jù)(字),放人Rd中, STRT ,存儲(chǔ)Rd中的數(shù)據(jù)(字)到指定地址的存 儲(chǔ)單元。若指令含 T, 則
31、即使處理器是在特權(quán)模式下,存儲(chǔ)器系統(tǒng)也將該訪問(wèn)看成是處理器處于用戶(hù)模式下.3.3.3 ARM處理器指令簡(jiǎn)介L(zhǎng)DR/STR指令中的地址指明存儲(chǔ)器地址,可用各種尋址方式:LDR R1, R0 寄存器間接尋址LDR R1, R0,#0 x5 寄存器變址尋址LDR R1, R0, R2, LSL #2 寄存器變址尋址 (R2左移2位后作為偏移量來(lái)使用)ARM還提供批量的加載/存儲(chǔ)指令.可將內(nèi)存中一批連續(xù)地址單元的內(nèi)容,通過(guò)一條指令加載到若干寄存器中;或?qū)⑷舾杉拇嫫鞯膬?nèi)容通過(guò)一條指令存儲(chǔ)到內(nèi)存一批連續(xù)地址單元.3.3.3 ARM處理器指令簡(jiǎn)介跳轉(zhuǎn)指令(1)普通的跳轉(zhuǎn)指令B B label BL labe
32、l 例: BEQ NEXT ; 相等時(shí)(Z=1)跳轉(zhuǎn)(2)帶連接的跳轉(zhuǎn)指令BL BL label 執(zhí)行時(shí),先將下一條指令地址拷貝到連接寄存器R14,然后轉(zhuǎn)到指定地址處.類(lèi)似于8086子程序調(diào)用指令,但返回地址不用堆棧,也沒(méi)有子程序返回指令,子程序結(jié)束時(shí)需將R14PC.B及BL的跳轉(zhuǎn)限制在當(dāng)前指令的32MB范圍內(nèi) 3.3.3 ARM處理器指令簡(jiǎn)介(3)帶狀態(tài)切換的跳轉(zhuǎn)指令BX BX Rm 若Rm的第0位為1,則自動(dòng)將CPSR中的標(biāo)志T置1把目標(biāo)地址的代碼解釋為T(mén)humb代碼(處理器處于Thumb狀態(tài));否則自動(dòng)將CPSR中的標(biāo)志T置0把目標(biāo)地址的代碼解釋為ARM代碼. 3.3.3 ARM處理器指
33、令簡(jiǎn)介數(shù)據(jù)傳送指令用于在寄存器之間傳送數(shù)據(jù).(1)MOV MOV s , 功能: 將operand2傳送到目的操作數(shù)Rd.若指令帶S標(biāo)志,則根據(jù)目的操作數(shù)Rd的結(jié)果影響CPSR中的標(biāo)志位.(2)MVN MVN s , 功能: 在數(shù)據(jù)傳送前,先將第二源操作數(shù)operand2按位取反,然后再送目的操作數(shù)Rd中. 3.3.3 ARM處理器指令簡(jiǎn)介運(yùn)算指令均針對(duì)寄存器進(jìn)行操作.(1)算數(shù)運(yùn)算指令 包括:加法指令A(yù)DD,帶進(jìn)位加法指令A(yù)DC,減法指令SUB, 帶借位減法指令SBC,乘法指令等.(2)邏輯運(yùn)算指令 包括:與AND,或ORR, 異或EOR, 位清除指令BIC等.(3) 測(cè)試與比較指令 包括:
34、與測(cè)試TST,異或測(cè)試TEQ; 比較CMP,負(fù)數(shù)比較CMN(減求反后的操作數(shù)) 3.3.3 ARM處理器指令簡(jiǎn)介異常產(chǎn)生指令(1)SWI軟件中斷指令 SWI immed_24 immed_24為24位立即數(shù),值為016777215(a)用于產(chǎn)生軟件中斷 SWI指令執(zhí)行后,程序自動(dòng)轉(zhuǎn)到0 x00000008地址, 同時(shí)還會(huì)將返回地址存入連接寄存器LR。(b)實(shí)現(xiàn)用戶(hù)模式變換到管理模式 SWI指令執(zhí)行后,自動(dòng)從用戶(hù)模式轉(zhuǎn)換到管理模式 (原來(lái)的CPSR保存到管理模式的SPSR中), 這樣用戶(hù)程序就能調(diào)用操作系統(tǒng)的系統(tǒng)例程。(C)向軟中斷服務(wù)程序傳遞參數(shù) 指令中的24位立即數(shù)就是要傳遞的參數(shù),其他參數(shù)
35、的傳遞須借助于寄存器. 3.3.3 ARM處理器指令簡(jiǎn)介(2)BKRT指令 BKRT 用于產(chǎn)生產(chǎn)生軟件斷點(diǎn)中斷,主要用于程序的調(diào)試。 在ARM指令中, immed為16位的數(shù). 作業(yè) 第四章 匯編語(yǔ)言程序設(shè)計(jì)主要內(nèi)容匯編語(yǔ)言程序的結(jié)構(gòu)匯編語(yǔ)言語(yǔ)句類(lèi)型和組成匯編語(yǔ)言程序設(shè)計(jì)8學(xué)時(shí)4.1機(jī)器指令/匯編語(yǔ)言/高級(jí)語(yǔ)言1、機(jī)器指令:計(jì)算機(jī)能識(shí)別的代碼,機(jī)器指令是由二進(jìn)制數(shù)組成的。 例如對(duì)8086/8088: PUSH AX 機(jī)器指令為:010100002、匯編語(yǔ)言:匯編語(yǔ)言是一種符號(hào)語(yǔ)言,用助記符表示操作碼,用符號(hào)或符號(hào)地址表示操作數(shù)或操作數(shù)地址,它與機(jī)器指令是一一對(duì)應(yīng)的。3 、高級(jí)語(yǔ)言:面向過(guò)程(如
36、C, FORTRAN)或?qū)ο?如C+, Java)的語(yǔ)言,不依賴(lài)于機(jī)器,因而有很好的通用性和可移植性 匯編語(yǔ)言與高級(jí)語(yǔ)言的比較特 征匯編語(yǔ)言高級(jí)語(yǔ)言目標(biāo)程序運(yùn)行時(shí)間短長(zhǎng)程序運(yùn)行時(shí)占用的存儲(chǔ)空間小大直接訪問(wèn)硬件的能力強(qiáng)弱程序可讀性和可維護(hù)性差強(qiáng)程序開(kāi)發(fā)的復(fù)雜程序高低程序的可移植性差強(qiáng)對(duì)硬件環(huán)境和軟件的兼容性差強(qiáng)4.1 機(jī)器指令/匯編語(yǔ)言/高級(jí)語(yǔ)言 文件名.ASM 文件名.OBJ 文件名.EXE匯編語(yǔ)言源程序 匯編目標(biāo)程序連接執(zhí)行/調(diào)試程序編輯程序EDIT.EXE匯編程序MASM.EXE連接程序LINK.EXE8086匯編語(yǔ)言程序的開(kāi)發(fā)過(guò)程4.1機(jī)器指令/匯編語(yǔ)言/高級(jí)語(yǔ)言ML 文件名.ASM 8
37、086匯編語(yǔ)言程序的開(kāi)發(fā)過(guò)程1. 源程序的編輯:源程序文件要以ASM為擴(kuò)展名源程序文件的形成(編輯)可以通過(guò)任何一個(gè)文本編輯器實(shí)現(xiàn): 如DOS中的全屏幕文本編輯器EDIT2. 源程序的匯編匯編是將源程序翻譯成由機(jī)器代碼組成的目標(biāo)模塊文件的過(guò)程. MASM 6.x提供的匯編程序是ML.EXE:ML /c hello.asm如果源程序中沒(méi)有語(yǔ)法錯(cuò)誤,MASM將自動(dòng)生成一個(gè)目標(biāo)模塊文件(hello.obj);否則MASM將給出相應(yīng)的錯(cuò)誤信息, 這時(shí)應(yīng)根據(jù)錯(cuò)誤信息,重新編輯修改源程序后,再進(jìn)行匯編 8086匯編語(yǔ)言程序的開(kāi)發(fā)過(guò)程3.目標(biāo)模塊的連接連接程序能把一個(gè)或多個(gè)目標(biāo)文件和庫(kù)文件合成一個(gè)可執(zhí)行程序
38、(.EXE、.COM文件):LINK hello.obj如果沒(méi)有嚴(yán)重錯(cuò)誤,LINK將生成一個(gè)可執(zhí)行文件(hello.exe).ML匯編程序可自動(dòng)調(diào)用LINK連接程序,實(shí)現(xiàn)匯編和連接的依次進(jìn)行ML hello.asm匯編程序ML.EXE可帶其他參數(shù),常用ML /Fl /Sa hello.asm該命令除產(chǎn)生模塊文件hello.obj和可執(zhí)行文件hello.exe外,還將生成列表文件hello.lst. 列表文件是一種文本文件,含有源程序和目標(biāo)代碼,對(duì)我們學(xué)習(xí)匯編語(yǔ)言程序設(shè)計(jì)和發(fā)現(xiàn)錯(cuò)誤很有用。 8086匯編語(yǔ)言程序的開(kāi)發(fā)過(guò)程4.可執(zhí)行程序的運(yùn)行與調(diào)試經(jīng)匯編、連接生成的可執(zhí)行程序在操作系統(tǒng)(DOS)下
39、只要輸入文件名就可以運(yùn)行:hello.exe操作系統(tǒng)裝載該文件進(jìn)入主存,并開(kāi)始運(yùn)行。在DOS下運(yùn)行程序時(shí),COMMAND.COM把.EXE文件裝入內(nèi)存。裝入時(shí)在數(shù)據(jù)段內(nèi)偏移地址0處構(gòu)造一個(gè)100H字節(jié)的程序段前綴PSP,然后是代碼段/數(shù)據(jù)段/堆棧段內(nèi)容。裝入后,自動(dòng)設(shè)置DS和ES寄存器指向程序段前綴,CS、IP、SS、SP寄存器設(shè)置為由連接程序傳過(guò)來(lái)的值(所以必須在程序中給DS、ES賦值)。PSPDS,ES用戶(hù)程序區(qū) 8086匯編語(yǔ)言程序的開(kāi)發(fā)過(guò)程程序結(jié)束返回DOS的方法:程序一開(kāi)始先把PSP的段地址(由DS指向)壓棧,把偏移地址0壓棧。程序結(jié)束時(shí)RET指令使得:棧頂0000H-IP,PSP的
40、段地址-CS,將要執(zhí)行的指令是PSP里的內(nèi)容,PSP里的前兩個(gè)字節(jié)是指令I(lǐng)NT 20H,是DOS中斷調(diào)用,實(shí)現(xiàn)的功能就是“返回DOS”。 START PROC FARPUSH DS MOV AX,0PUSH AX:RETSTART ENDP如果出現(xiàn)運(yùn)行錯(cuò)誤,可以從源程序開(kāi)始排錯(cuò),也可以利用調(diào)試程序幫助發(fā)現(xiàn)錯(cuò)誤.采用DEBUG.EXE調(diào)試程序:DEBUG hello.exe4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)匯編語(yǔ)言的源程序是分段的,由幾個(gè)段形成一個(gè)源程序,每一段有一個(gè)段名,以SEGMENT為段開(kāi)始,以ENDS結(jié)束;源程序最后以END作結(jié)束;一般有DATA段,CODE段,STACK段;一個(gè)段由若
41、干語(yǔ)句組成MY_DATA SEGMENT ;定義數(shù)據(jù)段SUM DB ? ;為符號(hào)SUM保留一個(gè)字節(jié)MY_DATA ENDS ;數(shù)據(jù)段結(jié)束MY_CODE SEGMENT ;定義代碼段ASSUME CS:MY_CODE,DS:MY_DATA;規(guī)定CS,DS的內(nèi)容 PORT_VAL EQU 3 ;端口的符號(hào)名GO: MOV AX,MY_DATA ;DS初始化為 MY_DATA MOV DS,AX MOV SUM,0 ;SUM單元為0CYCLE: CMP SUM,100 ;SUM與100比較 JNA NOT_DONE ;若未超過(guò)轉(zhuǎn)至NOT_DONE MOV AL,SUM ;若超過(guò)把SUM的內(nèi)容 OUT
42、 PORT_VAL,AL ;通過(guò)AL輸出然后停機(jī) HLTNOT_DONE: IN AL,PORT_VAL ;輸入下一個(gè)字節(jié) ADD SUM,AL ;與以前的結(jié)果累加 JMP CYCLE ;轉(zhuǎn)至CYCLEMY_CODE ENDS ;碼段結(jié)束END GO ;整個(gè)程序結(jié)束4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)一、 匯編語(yǔ)言的語(yǔ)句格式由匯編語(yǔ)言編寫(xiě)的源程序是由許多語(yǔ)句(也可稱(chēng)為匯編指令)組成的。每個(gè)語(yǔ)句由14個(gè)部分組成,其格式是: 標(biāo)號(hào): 指令助記符 操作數(shù);注解 名字 偽指令助記符 參數(shù);注解其中用方括號(hào)括起來(lái)的部分,可以有也可以沒(méi)有。每部分之間用空格(至少一個(gè))分開(kāi),一行最多可有132個(gè)字符 . 例
43、: 1標(biāo)號(hào)(名字):是給指令或某一存儲(chǔ)單元地址所起的名字??捎上铝凶址M成:字母:A z ; 數(shù)字:0 9 ; 特殊字符:?、 、一、$ 。數(shù)字不能作標(biāo)識(shí)符的第一個(gè)字符,而圓點(diǎn)僅能用作第一個(gè)字符。標(biāo)識(shí)符最長(zhǎng)為31個(gè)字符。當(dāng)標(biāo)識(shí)符后跟冒號(hào)時(shí),表示是標(biāo)號(hào)。它代表該行指令的起始地址;當(dāng)標(biāo)識(shí)符后不帶冒號(hào)時(shí),表示變量;偽指令前的標(biāo)識(shí)符不加冒號(hào)。2(偽)指令助記符: 表示不同操作的指令,可為8088的指令助記符,或偽指令。3操作(參)數(shù):是指令執(zhí)行的對(duì)象。依指令的要求,可能有一個(gè)、兩個(gè)或者沒(méi)有. 4注解:該項(xiàng)可有可無(wú),是為源程序所加的注解,用于提高程序的可讀性。 RET ;無(wú)操作數(shù)COUNT: INC C
44、X ;一個(gè)操作數(shù)COST DB 3,4,5,6,7 ;偽指令,5個(gè)操作數(shù)MOV AX,BP十4 ;二個(gè)操作數(shù)4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)二、段定義語(yǔ)句與段尋址 一般來(lái)說(shuō),一個(gè)完整的匯編源程序由3個(gè)段組成,即堆棧段、數(shù)據(jù)段和代碼段。段定義偽指令可將源程序劃分成若干段,以便生成目的代碼和連接時(shí)將各同名段進(jìn)行組合。段定義偽指令一般格式為 : 段名 SEGMENT 定位類(lèi)型 組合類(lèi)型 類(lèi)別 段名 ENDS(1)定位類(lèi)型:用來(lái)規(guī)定段起始邊界的要求,可以為以下四種,缺省為 PARA)PAGE: 16位段地址的最低8位必須為0,即從一頁(yè)的起點(diǎn)開(kāi)始。PARA: 16位段地址的最低4位必須為0,即從一段
45、的起點(diǎn)開(kāi)始。WORD: 16位段地址的最低1位必須為0,即從偶地址開(kāi)始。BYTE: 16位段地址可以為任意值,即段可以從任何字節(jié)開(kāi)始4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)(2)組合類(lèi)型(表示本段與其他段的關(guān)系,為連接程序使用,缺省為NONE):NONE:與其他段不發(fā)生關(guān)系,每段都有自己的基地址PUBLIC:與其他同名同類(lèi)別的段連接在一起,使用一個(gè)共同的基地址STACK:與PUBLIC同樣處理,但作為堆棧段COMMON:與其他同名同類(lèi)別的段相互重疊在一起,使用一個(gè)共同的基地址AT表達(dá)式:把本段裝在表達(dá)式值所指定的段地址上(值為16位;不能指定代碼段)MEMORY:把本段定位在所有其他段之上,若有多
46、個(gè)則只有連接時(shí)遇到的第一個(gè)有效, 其余按COMMON處理)(3)類(lèi)別名:為連接程序使用,把類(lèi)別名相同的段放在連續(xù)的存儲(chǔ)區(qū)間(一般有STACK、CODE、DATA)。4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)段尋址匯編程序必須知道程序的段結(jié)構(gòu),并知道在指令執(zhí)行時(shí)哪個(gè)段由哪個(gè)段寄存器指定,這個(gè)信息在代碼段的開(kāi)始由ASSEMU語(yǔ)句提供。格式: ASSUME 段寄存器:段名,段寄存器:段名,由于ASSUME偽指令只指明某一個(gè)段名對(duì)應(yīng)于哪一個(gè)段寄存器,并沒(méi)有包含將段地址送入該寄存器的操作。因此要將真實(shí)段地址裝入段寄存器還需用匯編指令來(lái)實(shí)現(xiàn)。例如,CODE SEGMENT ASSUME CS:CODE,DS:D
47、ATA,SS:STACK MOV AX,DATA ;DATA段值送AX MOV DS,AX ;AX內(nèi)容送DS,DS才有實(shí)際段值CODE ENDS 當(dāng)程序運(yùn)行時(shí),由于DOS的裝入程序負(fù)責(zé)把CS初始化成正確的代碼段地址,SS初始化為正確的堆棧段地址,因此用戶(hù)在程序中就不必設(shè)置。但是,在裝入程序中DS/ES寄存器由于被用作其它用途,因此,在用戶(hù)程序中必須用兩條指令對(duì)DS/ES進(jìn)行初始化,以裝入用戶(hù)的數(shù)據(jù)段地址。 4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)三、過(guò)程定義偽指令PROC和ENDP在程序設(shè)計(jì)中,可將具有一定功能的程序段看成為一個(gè)過(guò)程(相當(dāng)于一個(gè)子程序),它可以被別的程序調(diào)用。一個(gè)過(guò)程由偽指令PRO
48、C和ENDP來(lái)定義,其格式為: 過(guò)程名 PROC 類(lèi)型 過(guò)程體 RET 過(guò)程名 ENDP 其中過(guò)程名是為過(guò)程所起的名稱(chēng),不能省略,過(guò)程的類(lèi)型由FAR(遠(yuǎn)過(guò)程,為段間調(diào)用)和NEAR(近過(guò)程,在本段內(nèi)調(diào)用)來(lái)確定,如果缺省類(lèi)型,則該過(guò)程就默認(rèn)為近過(guò)程。ENDP表示過(guò)程結(jié)束。過(guò)程體內(nèi)至少應(yīng)有一條RET指令,以便返回被調(diào)用處。過(guò)程可以嵌套,也可以遞歸使用。4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)四、定位偽指令ORGORG偽指令規(guī)定了在某一段內(nèi),程序或數(shù)據(jù)代碼存放的起始偏移地址。 一般格式: ORG 例如:DATA SEGMENT ORG2000H BUFF DB STRING DATA ENDS上述變量
49、定義中,BUFF從DATA段偏移為2000H的單元開(kāi)始存放。五、匯編程序結(jié)束偽指令END 該偽指令表示源程序的結(jié)束令匯編程序停止匯編。因此,任何一個(gè)完整的源程序均應(yīng)有END指令。一般格式: END 表達(dá)式 其中表達(dá)式表示該匯編程序的啟動(dòng)地址。例如: END START ;表明該程序的啟動(dòng)地址為START。4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu);title Hello World Program (hello.asm)stacks segment stack stackdw 100h dup(?)stacks endsdata segment ; Contains all variables fo
50、r the programmsgdbHello World!,0Ah,0Dh,$data ends 4.2 8086匯編語(yǔ)言源程序的結(jié)構(gòu)code segment; Contains all codeassume cs:code, ds:data, ss:stacksorg 100hmain proc mov ax, data mov ds, axmov ax, 0900hmov dx, offset msg int 21h mov ax, 4C00h ; terminate the program normallyint 21hmain endpcode endsend main4.3 常量、
51、變量和標(biāo)號(hào)(1) 常量 二進(jìn)制: 10111001B 十進(jìn)制: 1234D或1234 八進(jìn)制: 255Q或255O 十六進(jìn)制: 3A5DH, 第一位為字母時(shí)前面加數(shù)字0 字符串常數(shù):用單引號(hào)括起來(lái)的一個(gè)或多個(gè)字符組成一個(gè)字符串常數(shù),例如:The 在內(nèi)存中以字符的ASCII碼值存放,注意一個(gè)空格也是一個(gè)字符。如The ,在內(nèi)存中是:54H、68H、65H和20H。 4.3 常量、變量和標(biāo)號(hào)(2)變量:代表存放在某些存儲(chǔ)單元的數(shù)據(jù)。這些數(shù)據(jù)在程序運(yùn)行期間隨時(shí)可以修改。變量有三個(gè)屬性:段屬性、偏移屬性和類(lèi)型屬性(所具有的字節(jié)數(shù))。(3) 標(biāo)號(hào) 標(biāo)號(hào)是一條指令的目標(biāo)代碼的符號(hào)地址,它常用作轉(zhuǎn)移指令(或
52、子程序調(diào)用指令)的操作數(shù)。標(biāo)號(hào)有三個(gè)屬性:段屬性、偏移屬性和類(lèi)型屬性。段屬性是該標(biāo)號(hào)的段地址,偏移屬性是該標(biāo)號(hào)的偏移地址,類(lèi)型屬性是表示該標(biāo)號(hào)的范圍是本段(NEAR)或段間(FAR),或稱(chēng)為近或遠(yuǎn)屬性。 4.4 8086匯編其它常用偽指令格式1: 變量名 偽指令名 表達(dá)式1,表達(dá)式2, 這里偽指令可為DB, DW, DD, 表達(dá)式有以下幾種情況: 數(shù)值表達(dá)式 例: DA_BYTE DB 50H , 50 , 0caH DA_WORD DW 0a3f1H , 498dH A1 DD 12345H ; Memory: 45H,23H,01H,00H ? 表達(dá)式,不帶引號(hào)的?表示可預(yù)置任何內(nèi)容 例:
53、 DA_B DB ? , ? ;要求分配兩個(gè)字節(jié)單元 DA_W DW ? , ? ;要求分配兩個(gè)字單元 字符串表達(dá)式 數(shù)據(jù)項(xiàng)可以寫(xiě)成字符串形式,但只能用DB、DW、DD定義,而且DW、DD語(yǔ)句定義的串只允許包含兩個(gè)字符。4.4.1 數(shù)據(jù)定義偽指令 例: S1 DB ABCDEF S2 DW AB, CD, EF S3 DD AB, CD 這幾個(gè)變量在存儲(chǔ)器中存放情況如下: S1 41H S2 42H S3 42H 42H 41H 41H 43H 44H 00H 44H 43H 00H 45H 46H 44H 46H 45H 43H 00H 00H 注意:定義多于兩個(gè)以上字符的字符串時(shí),只能使
54、用DB偽指令,不能使用DW和DD等偽指令。4.4.1數(shù)據(jù)定義偽指令格式2:變量名 偽指令名表達(dá)式DUP(表達(dá)式) 用于定義重復(fù)的數(shù)據(jù)或分配一數(shù)據(jù)塊空間例:D_B1DB 20H DUP(?) ;保留20H個(gè)字節(jié) D_B2 DB 10H DUP(ABCD);字符串ABCD 重復(fù)10H次 D_W1 DW 10H DUP(4) ;字4重復(fù)10H次 4.4.2符號(hào)定義語(yǔ)句1. 等值語(yǔ)句EQU給符號(hào)定義一個(gè)值或別的符號(hào)名,或一條可執(zhí)行的指令。例:NEW_PORT EQU 32 COUNT EQU CX CBD EQU AAD一個(gè)符號(hào)一經(jīng)EQU賦值后,不能重新再定義。2. 等號(hào)(Equal Sign) 語(yǔ)句
55、與EQU類(lèi)似,使用它能對(duì)符號(hào)進(jìn)行再定義。例:B1 = 6 ; B1定義為6 B1 = 10 ;B1重新定義為10 4.5 8086匯編語(yǔ)言表達(dá)式和運(yùn)算符表達(dá)式: 由常數(shù)、操作數(shù)、操作符和運(yùn)算符組成。有六種運(yùn)算符: 算術(shù)運(yùn)算符、邏輯運(yùn)算符和關(guān)系運(yùn)算符、分析運(yùn)算 符、綜合運(yùn)算符和分離運(yùn)算符。 1、算術(shù)運(yùn)算符 +、*、/、MOD(取余)、SHL(左移)、SHR(右移) 例: 32 MOD 5 ;結(jié)果為2 21H SHL 2 ;結(jié)果為84H 2、邏輯運(yùn)算符(按位操作) AND(與) 24H AND 0FH = 04H OR (或) 24H OR 0FH = 2FH XOR (異或) 24H XOR 0
56、FH = 2BH NOT (非) NOT 24H = 0DBH 4.5 8086匯編語(yǔ)言表達(dá)式和運(yùn)算符3、關(guān)系運(yùn)算符 關(guān)系運(yùn)算是邏輯判定,當(dāng)為真時(shí)結(jié)果為全1(0FFFFH),為假時(shí)結(jié)果為全0。 EQ (等于) ;若PP=25,則25 EQ PP = 0FFFFH NE (不等于) ;25 NE PP = 0 LT (小于) ;25 LT 26 = 0FFFFH LE (小于等于) ;25 LE PP = 0FFFFH GT (大于) ;26 GT PP = 0FFFFH GE (大于等于) ;24 GE PP = 0關(guān)系運(yùn)算符一般不單獨(dú)使用,常與其它運(yùn)算符結(jié)合使用。例如: ADD AX, (p
57、ort GT 60) AND 50) OR (port LE 60) AND 70)當(dāng)port 的值大于60時(shí),上述指令匯編為 ADD AX, 50當(dāng)port 的值小于或等于60時(shí),上述指令匯編為 ADD AX, 70 4、分析運(yùn)算符 把存儲(chǔ)器地址操作數(shù)分解成它的組成部分: SEG (求段地址), 格式: SEG 符號(hào)名 OFFSET(求偏移地址), 格式 : OFFSET 符號(hào)名 TYPE (求符號(hào)名類(lèi)型值),格式:TYPE 符號(hào)名 SIZE ,求為符號(hào)名分配的字節(jié)數(shù) 格式: SIZE 符號(hào)名 回送分配給該符號(hào)名的字節(jié)數(shù),但此值是LENGTH的值和TYPE的值的乘積。 類(lèi)型bytewordd
58、wordNEARFAR類(lèi)型值124-1 (0FFFH)-2 (0FFEH) 4.5 8086匯編語(yǔ)言表達(dá)式和運(yùn)算符 LENGTH,求為符號(hào)名分配的項(xiàng)數(shù)。 格式: LENGTH 符號(hào)名 這里為符號(hào)名定義的數(shù)據(jù)項(xiàng)必須是用 重復(fù)格式DUP( )定義的。而對(duì)于其他情況則回送1。 例 :K2 DW 10 DUP (?) 則 LENGTH K2 = 10 TYPE K2 = 2 SIZE K2 = 20 例:AARR DW 2,4,6 則 LENGTH AARR = 1, TYPE AARR = 2 SIZE AARR = 2可以看出: SIZE = ( LENGTH ) * ( TYPE 符號(hào)名) 4.
59、5 8086匯編語(yǔ)言表達(dá)式和運(yùn)算符 4.5 8086匯編語(yǔ)言表達(dá)式和運(yùn)算符5、綜合運(yùn)算符(1) 定義符號(hào)名為新類(lèi)型 格式: 類(lèi)型 PTR 符號(hào)名 PTR的功能歸納如下: 保證運(yùn)算時(shí)操作數(shù)類(lèi)型的匹配 例: F1DB16H,38H F2DW1234H,26ABH MOV AX,WORD PTR F1;AX=3816H MOV BL,BYTE PTR F2;BL=34H 4.5 8086匯編語(yǔ)言表達(dá)式和運(yùn)算符 通過(guò)PTR指明是字單元還是字節(jié)單元 例: MOVBYTE PTR BX,10H;BX為字節(jié)單元MOVWORD PTR SI,20H;SI為字單元 用PTR來(lái)改變距離屬性 例:JMPFAR PT
60、R LLOOP ;段間轉(zhuǎn)移CALLDWORD PTR BX ;遠(yuǎn)程調(diào)用(2)指定新類(lèi)型 格式: 符號(hào)名 EQU THIS 類(lèi)型 例: LABC EQU THIS BYTE ;LABC是字節(jié)類(lèi)型 LABD DW 4321H, 2255H;LABD是字類(lèi)型 MOV AL , LABC ;AL = 21H MOV AX , LABD ;AX = 4321H 4.5 8086匯編語(yǔ)言表達(dá)式和運(yùn)算符(3) 分離運(yùn)算符 取低字節(jié) 格式:LOW 符號(hào)名 取高字節(jié) 格式:HIGH 符號(hào)名 例:設(shè)SSY=2050H mov al , LOW 3080H ; al = 80H mov ah , HIGH SSY
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 嵌入式設(shè)計(jì)課題報(bào)告范文
- 個(gè)人分包旅游線路策劃與推廣合作協(xié)議(2025年)
- 2025年度股份轉(zhuǎn)讓與綠色金融支持合作框架協(xié)議
- 二零二五年度互聯(lián)網(wǎng)行業(yè)個(gè)人工資股權(quán)激勵(lì)合同
- 2025年度旅游區(qū)經(jīng)營(yíng)權(quán)全面承包合同實(shí)施細(xì)則
- 景區(qū)項(xiàng)目合作協(xié)議書(shū)(2025年度)文化體驗(yàn)活動(dòng)組織
- 2025年度汽車(chē)租賃經(jīng)銷(xiāo)商授權(quán)與服務(wù)規(guī)范合同
- 2025年度花店企業(yè)花卉市場(chǎng)調(diào)研與營(yíng)銷(xiāo)策劃合同
- 2025年度水井維修保養(yǎng)承包服務(wù)合同
- 二零二五年度養(yǎng)老服務(wù)業(yè)墊資協(xié)議
- 在社區(qū)結(jié)對(duì)共建簽約儀式上的講話3篇
- 新生兒傳統(tǒng)四病篩查
- 2023年湖北省煙草專(zhuān)賣(mài)局(公司)考試真題
- 小班社會(huì)《多喝水身體好》課件
- 2024年單招必備時(shí)事政治200題(含答案)
- 公安食藥環(huán)培訓(xùn)課件
- 人工智能時(shí)代的就業(yè)與職業(yè)發(fā)展
- 小米手環(huán)產(chǎn)品營(yíng)銷(xiāo)方案
- 經(jīng)典成語(yǔ)故事聞雞起舞
- 農(nóng)民專(zhuān)業(yè)合作社章程(參考范本)
- 拆除工程重點(diǎn)和難點(diǎn)及安全保證措施
評(píng)論
0/150
提交評(píng)論