匯編語言程序設(shè)計(jì)(44)課件_第1頁
匯編語言程序設(shè)計(jì)(44)課件_第2頁
匯編語言程序設(shè)計(jì)(44)課件_第3頁
匯編語言程序設(shè)計(jì)(44)課件_第4頁
匯編語言程序設(shè)計(jì)(44)課件_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 IBM PC 匯編語言匯編語言 課本: 80X86匯編語言程序設(shè)計(jì) 廖開際 華南理工大學(xué)出版社參考書: IBM-PC匯編語言程序設(shè)計(jì) 沈美明 溫冬蟬 編著 清華大學(xué)出版社教學(xué)安排 40學(xué)時(shí) 24學(xué)時(shí)理論課 16學(xué)時(shí)上機(jī)。成績 70% 期末成績 30% 平時(shí)成績 (課堂提問,作業(yè),出勤,做實(shí)驗(yàn),實(shí)驗(yàn)報(bào)告)前言個(gè)人計(jì)算機(jī)的核心是微處理器,它負(fù)責(zé)處理計(jì)算機(jī)在算術(shù)運(yùn)算、邏輯運(yùn)算和控制方面的需求。(前言) 每種處理器系列都有它自己唯一的指令集。 這些指令集被稱為系統(tǒng)的機(jī)器語言。這種指令集非常復(fù)雜,在用于程序開發(fā)時(shí)又令人很難理解。(PREFACE) 匯編語言是一種能夠代替各種機(jī)器指令的更容易理解的符號代

2、碼。例如: 機(jī)器機(jī)器 語言語言 匯編語言匯編語言 A0 00 20 MOV AL, VAR1 02 06 01 20 ADD AL, VAR2 A2 02 20 MOV VAR3, AL (PREFACE) 高級語言, 例如C語言和BASIC語言,被設(shè)計(jì)成與特定計(jì)算機(jī)的技術(shù)細(xì)節(jié)無關(guān)的語言,然而,匯編語言作為一種低級語言,它是為專門的處理器系列設(shè)計(jì)的。使用匯編語言匯編語言的優(yōu)點(diǎn)優(yōu)點(diǎn): 占用內(nèi)存少少,運(yùn)行快快 要求程序員具有高超的技術(shù)能力 理解底層機(jī)器架構(gòu)底層機(jī)器架構(gòu)(計(jì)算機(jī)計(jì)算機(jī)體系結(jié)構(gòu)) 常駐程序常駐程序和中斷服務(wù)程序中斷服務(wù)程序都是用匯編語言來編寫的1. PC硬件的基本特征(1. PC硬件的

3、基本特征)v基本硬件的解釋: 位, 字節(jié), 寄存器,內(nèi)存, 處理器 和數(shù)據(jù)總線.v主要的內(nèi)部硬件: 微處理器, 內(nèi)存, 寄存器; 外部硬件: 計(jì)算機(jī)的輸入/輸出設(shè)備.位和字節(jié) 計(jì)算機(jī)存儲的基本構(gòu)造單元是“位位” “位位”的值是“0”和“1” 位內(nèi)容(A): 0100 0001 位編號: 7654 3210 最低位(位和字節(jié)) 8個(gè)相關(guān)的位稱為字節(jié)字節(jié) 8個(gè)位允許有256(28)個(gè)1-0狀態(tài)的不同組合 范圍: 0255, -128 +127相關(guān)字節(jié)處理器支持的數(shù)據(jù)大小: 字. 2-字節(jié) (16 位) 雙字. 4-字節(jié) (32 位) 四字. 8-字節(jié) (64 位) 8字. 16-字節(jié) ( 128

4、位) (相關(guān)字節(jié)) 千字節(jié)(KB). 1KB=1024 B (210 字節(jié)) 兆字節(jié)(MB). 1MB=1024 KB (220 字節(jié)) 十億字節(jié)(GB). 1GB=1024 MB (230 字節(jié))(相關(guān)字節(jié)) 在一個(gè)字字中,各位從右到左的編號是0到15.位內(nèi)容 (PC) : 0 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1位編號: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 高字節(jié) 低字節(jié) 第二位字節(jié) 第一字節(jié) 1 字=2 字節(jié) =16 位(相關(guān)字節(jié)) 在存儲器中,每個(gè)字都有唯一的地址 第一個(gè)字節(jié)在最低的存儲器單元中,編號為0,第二個(gè)字節(jié)編號為1

5、,等等。 負(fù)的二進(jìn)制數(shù) 負(fù)二進(jìn)制數(shù)是用二進(jìn)制補(bǔ)碼表示法來表示的; 表示負(fù)二進(jìn)制數(shù)的規(guī)則是:逐位求反,末位加1 例子: +65 01000001 按位求反 10111110 加 1 1 數(shù) - 65 10111111(負(fù)二進(jìn)制數(shù)) 為了求得一個(gè)負(fù)二進(jìn)制數(shù)的絕對值,需要采用二進(jìn)制補(bǔ)碼規(guī)則:例子: - 65 10111111 按位求反 加 1 1 數(shù) +65 01000001(負(fù)二進(jìn)制數(shù)) 減法 減去減去一個(gè)二進(jìn)制數(shù)=加該數(shù)的二進(jìn)制的補(bǔ)碼 +65 0100 0001 + (- 65) 1011 1111 00 (1)0000 0000有數(shù)字進(jìn)入符號位,并且溢出,結(jié)果是正確的。 十六進(jìn)制表示二進(jìn)制 1

6、111 1110 1101 1100 1011 1010 1001 1000十進(jìn)制 15 14 13 12 11 10 9 8十六進(jìn)制 F E D C B A 9 8二進(jìn)制 0111 0110 0101 0100 0011 0010 0001 0000十進(jìn)制 7 6 5 4 3 2 1 0 十六進(jìn)制 7 6 5 4 3 2 1 0 為了在程序中指明用十六進(jìn)制數(shù),在這個(gè)數(shù)的后面寫上一個(gè)“H”ASCII 碼 為了使數(shù)據(jù)表示標(biāo)準(zhǔn)化,微計(jì)算機(jī)設(shè)計(jì)人員采用ASCII(美國標(biāo)準(zhǔn)信息交換碼);它使不同計(jì)算機(jī)之間的數(shù)據(jù)交換更加方便。(ASCII 碼) 8位ASCII碼可以提供256個(gè)字符(附錄 B),包括外國

7、得字母符號在內(nèi)。例子: 0100 0001(hex 41) 表示字母A.PC 組成 計(jì)算機(jī)結(jié)構(gòu)如下圖所示: 內(nèi)部 總線 處理器 總線 輸入/輸出 存儲器 80286 系統(tǒng) 80386 RAM 80486 屏幕 ROM 80586 打印機(jī) Pentium 鍵盤 處理器 PC的大腦是處理器,用來完成所有的指令執(zhí)行和數(shù)據(jù)處理。 各種處理器的速度,尋址空間大小,寄存器以及數(shù)據(jù)總線是不相同的。 數(shù)據(jù)總線在處理器,存儲器和外設(shè)之間傳輸數(shù)據(jù)執(zhí)行部件和總線接口部件處理器劃分為兩個(gè)邏輯部件:執(zhí)行部件(EU)和總線接口部件(BIU)。 構(gòu)造 功能: 執(zhí)行部件執(zhí)行指令. 總線接口部件把指令和數(shù)據(jù)傳送給執(zhí)行部件3)

8、并行工作 總線接口部件保持領(lǐng)先一步 內(nèi)存儲器 在PC中有兩種類型的內(nèi)存儲器: 隨機(jī)存取存儲器(RAM),在之后課程中,統(tǒng)一稱RAM為“內(nèi)存”。 只讀存儲器(ROM), 因?yàn)橹噶詈蛿?shù)據(jù)是永久性地“燒進(jìn)”芯片中的,所以,它們不能被修改。(內(nèi)存儲器) 字節(jié)在內(nèi)存中被連續(xù)地編號,從00開始,所以,內(nèi)存中的每個(gè)位置都有唯一的地址。(XMS)擴(kuò)展內(nèi)存擴(kuò)展內(nèi)存(100000H )系統(tǒng)空間384K=128+192+64(A0000FFFFFH)(TPA) 臨時(shí)程序空間臨時(shí)程序空間640K(00000A0000H)Figure 1-個(gè)人計(jì)算機(jī)內(nèi)存第一個(gè)第一個(gè) 1MB內(nèi)存是實(shí)存儲內(nèi)存是實(shí)存儲器器(內(nèi)存儲器) 內(nèi)存

9、會一直保持其中的內(nèi)容,直到有新的內(nèi)容載入。 計(jì)算機(jī)中的地址是用二進(jìn)制來表示的,也可以方便地寫成十六進(jìn)制。內(nèi)存中數(shù)據(jù)尋址 系統(tǒng)在內(nèi)存中存儲數(shù)據(jù),處理器從內(nèi)存中按字進(jìn)行檢索:低內(nèi)存地址中內(nèi)容 放在低字節(jié)高內(nèi)存地址中內(nèi)容 放在高字節(jié)(內(nèi)存中數(shù)據(jù)尋址)例子: 處理器自動把0529H傳送到地址7612H和7613H的地址中 7612H 字節(jié) 內(nèi)容: 內(nèi)容 地址(7612H)=29H 05 7613H字的內(nèi)容由低地址所表示 29 7612H(7612H)=0529H 內(nèi)存(內(nèi)存中數(shù)據(jù)尋址) 內(nèi)存用來存儲程序指令和數(shù)據(jù) 存儲內(nèi)存地址中的具體信息被稱為內(nèi)存地址的內(nèi)容 例如: (00004H)=34H ; 字節(jié)

10、內(nèi)容是 34H (00004H)=1234H ;字的內(nèi)容 (01234H)=2F1EH 01237H01237H01236H01236H01235H 2FH01235H 2FH01234H 1EH01234H 1EH00007H00007H 00006H00006H00005H 12H00005H 12H00004H00004H34H34H00003H00003H00002H00002H00001H00001H00000H00000H Address contentI/O 端口 和 I/O 地址空間 在每個(gè)外設(shè)中,都有數(shù)據(jù)寄存器,狀態(tài)寄存器,指令寄存器等各類的寄存器。 I/O地址空間是對外部設(shè)

11、備的寄存器的一種編碼,旨在方便處理器訪問這些寄存器 (I/O 地址空間 ) 外設(shè)的寄存器編碼就是外設(shè)的寄存器編碼就是端口地址端口地址。 I/O是獨(dú)立于內(nèi)存的地址空間的。是獨(dú)立于內(nèi)存的地址空間的。 IBM-PC I/O 空間是64K( 0000HFFFFH ),因此,計(jì)算機(jī)可以訪問64k 的不同的8位I/O設(shè)備。 (I/O 地址空間 ) 操作系統(tǒng)把復(fù)雜的外設(shè)操作封裝成例行程序,因此,用戶可以通過調(diào)用中斷指令(INT)來運(yùn)行例行程序(DOS 或者 BIOS)。段與尋址問題: 怎樣用16位數(shù)字 來尋址1MB的空間?(SEGMENT AND ADDRESSING)答案: 15 0 16位段 起始地址

12、0000 15 0 + 16 位 偏移地址 19 0 20位物理地址 (段與尋址)物理地址= 10H * 段地址+偏移地址 (段與尋址)段是在程序中定義的一個(gè)專門的區(qū)域,從段邊界開始 能被16或者h(yuǎn)ex10除盡的單元。 段能夠位于存儲器的幾乎所有地方,大小可變,在實(shí)模式下可以多達(dá)64KB(0000H-FFFFH)。 如果代碼(數(shù)據(jù)或者堆棧)區(qū)域需要大于64K的空間,那么,就需要在程序中定義一個(gè)以上的代碼段(數(shù)據(jù)或者堆棧) (段與尋址)三個(gè)主要的段分別是代碼斷,數(shù)據(jù)段和堆棧段。代碼斷代碼斷(CS)包括要執(zhí)行的機(jī)器指令數(shù)據(jù)段數(shù)據(jù)段(DS)包括程序所定義的數(shù)據(jù)堆棧段堆棧段(SS) 包括程序需要暫存的

13、任何數(shù)據(jù)和地址,或由你自己“調(diào)用”的子程序所用的數(shù)據(jù)與地址段邊界 段寄存器包含段的起始地址 (段邊界) 寄存器和段不一定是所顯示的順序,可以是任何順序存放。 內(nèi)存 地址 地址 地址代碼斷數(shù)據(jù)段堆棧段SSDSCS段寄存器在存儲器中可再定位Figure 1-4 段與寄存器 (段邊界) 因?yàn)樵谒星闆r下,最右邊的十六進(jìn)制數(shù)位都是0,所以存放數(shù)字0到段寄存器中是沒有必要的。本書使用方括號( )指明最右邊的十六進(jìn)制的0. 例如: 038E0段偏移值 在一個(gè)程序中,一段范圍內(nèi)的所有存儲單元都是相對于段起始地址的。 一個(gè)段內(nèi)從段地址到另一個(gè)單元以字節(jié)位單位的距離稱為偏移值例子: (DS) =038EH DS

14、 段地址: 038E0H 偏移值: 0032H 實(shí)際地址: 03912H寄存器(寄存器)v段寄存器CS 寄存器寄存器 有效程序代碼段得起始地址. 加上在指令指針(IP)寄存器中的偏移值,就指明了為執(zhí)行指令所要取得的指令地址。 (CS)+(IP)= 下一條指令的地址(寄存器) DS 寄存器寄存器包含程序數(shù)據(jù)段得起始地址,該地址加上在指令中的偏移值,就可以訪問位于數(shù)據(jù)段中的指定字節(jié)單元。(DS)+(BX)=數(shù)據(jù)段中數(shù)據(jù)的地址(DS)+(DI)=數(shù)據(jù)段中數(shù)據(jù)的地址(DS)+(SI)=數(shù)據(jù)段中數(shù)據(jù)的地址(DS)+(16位 立即數(shù))=數(shù)據(jù)段中數(shù)據(jù)的地址( 寄存器) SS 寄存器寄存器允許在寄存器中實(shí)現(xiàn)堆

15、棧。加上堆棧指針(SP)寄存器中的偏移值,就指明了正被尋址的堆棧中的當(dāng)前字。(SS)+(SP)=堆棧中的當(dāng)前字的地址(SS)+(BP)=堆棧中的數(shù)據(jù)的地址(寄存器) ES寄存器寄存器 程序中其他段得起始地址。 用于某些串操作中 和DI寄存器相關(guān)聯(lián) (ES)+(DI)=串地址的結(jié)尾v指針寄存器指針寄存器指令指針指令指針(IP)的的 寄存器寄存器 包含要執(zhí)行的下一條指令的偏移地址 IP是和CS寄存器相關(guān)聯(lián)的 堆棧指針堆棧指針(SP) 寄存器寄存器包含了在堆棧中被尋址的當(dāng)前字的偏移地址 SP和BP寄存器與SS寄存器相關(guān)聯(lián)v通用寄存器AX: 主累加器主累加器. 用于有關(guān)輸入/輸出和大多數(shù)算術(shù)運(yùn)算操作.

16、例如, 乘法,除法 AX 16位 AH AL EAX 32位BX:基址寄存器,可以用作擴(kuò)展尋址的變址CX: 計(jì)數(shù)寄存器DX:數(shù)據(jù)寄存器v變址寄存器變址寄存器SI: 16位源變址寄存器,與DS相關(guān)聯(lián)DI: 16位目的變址寄存器,與ES相關(guān)聯(lián)v標(biāo)志寄存器標(biāo)志寄存器 標(biāo)志寄存器指明處理器的狀態(tài)和指令運(yùn)行的結(jié)果 當(dāng)一條指令設(shè)置了一個(gè)標(biāo)志位,這個(gè)標(biāo)準(zhǔn)位會一直保留,直到其他指令對其進(jìn)行更改 標(biāo)志寄存器在實(shí)模式下,包含了一下的標(biāo)志位標(biāo)志標(biāo)志: O D I T S Z A P C位號位號. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0O (溢出標(biāo)志溢出標(biāo)志): 指出在算術(shù)運(yùn)算后高

17、階(最左邊)位的溢出 JO 和 JNO 可以測試這個(gè)位 (結(jié)果溢出,O=1) . 如果機(jī)器字長度是8位,表示范圍: : -128+127D (方向標(biāo)志方向標(biāo)志): 確定傳送或比較串(字符)數(shù)據(jù)時(shí)的左右方向 (D=1,地址遞減 )數(shù)據(jù)傳送; (D=0,地址遞增) STD 設(shè)置方向標(biāo)志, D=1 CLD 清除方向標(biāo)志, D=0I (中斷標(biāo)志中斷標(biāo)志): 指明處理所有的外部中斷 (STI, I=1)還是忽略( CLI, I=0). T(陷阱標(biāo)志陷阱標(biāo)志): 當(dāng)被設(shè)置為當(dāng)被設(shè)置為1時(shí)(時(shí)(T=1),允許處理器以),允許處理器以單步方式工作單步方式工作 Z (零標(biāo)志零標(biāo)志): 指明算術(shù)運(yùn)算或比較操作的結(jié)果指明算術(shù)運(yùn)算或比較操作的結(jié)果(0=結(jié)果為非零,結(jié)果為非零,1=結(jié)果為結(jié)果為0) JE 和 JZ 可以測試這個(gè)標(biāo)準(zhǔn)位.S(符號標(biāo)志符號標(biāo)志): 包含一次算術(shù)運(yùn)算操作的結(jié)果的符號(0=正,正,1=負(fù))負(fù))A(輔助

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論