版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第1章 基礎(chǔ)知識(shí)1.1 機(jī)器語言 1. 9 數(shù)據(jù)總線1.2 匯編語言的產(chǎn)生 1.10 控制總線1.3 匯編語言的組成 1.11 內(nèi)存地址空間(概述)1.4 存儲(chǔ)器 1.12 主板1.5 指令和數(shù)據(jù) 1.13 接口卡1.6 存儲(chǔ)單元 1.14 各類存儲(chǔ)器芯片1.7 CPU對(duì)存儲(chǔ)器的讀寫 1.15 內(nèi)存地址空間1.8 地址總線 第1章 基礎(chǔ)知識(shí)1.1 機(jī)器語言 引言匯編語言是直接在硬件之上工作的編程語言,首先要了解硬件系統(tǒng)的結(jié)構(gòu),才能有效的應(yīng)用匯編語言對(duì)其編程。在本章中,對(duì)硬件系統(tǒng)結(jié)構(gòu)的問題進(jìn)行一部分的探討,以使后續(xù)的課程可在一個(gè)好的基礎(chǔ)上進(jìn)行。引言匯編語言是直接在硬件之上工作的編程語言,首先要了
2、解硬件系引言當(dāng)課程進(jìn)行到需要補(bǔ)充新的基礎(chǔ)知識(shí)(關(guān)于編程結(jié)構(gòu)或其他的)時(shí)候,再對(duì)相關(guān)的基礎(chǔ)知識(shí)進(jìn)行介紹和探討。本書的原則是,以后用到的知識(shí),以后再說。引言當(dāng)課程進(jìn)行到需要補(bǔ)充新的基礎(chǔ)知識(shí)(關(guān)于編程結(jié)構(gòu)或其他的)引言匯編課程的研究重點(diǎn)放在如何利用硬件系統(tǒng)的編程結(jié)構(gòu)和指令集有效靈活的控制系統(tǒng)進(jìn)行工作。引言匯編課程的研究重點(diǎn)放在如何利用硬件系統(tǒng)的編程結(jié)構(gòu)和指令集1.1 機(jī)器語言機(jī)器語言是機(jī)器指令的集合。機(jī)器指令展開來講就是一臺(tái)機(jī)器可以正確執(zhí)行的命令。1.1 機(jī)器語言1.1 機(jī)器語言指令:01010000 (PUSH AX)電平脈沖: 1.1 機(jī)器語言指令:01010000 (PUSH AX)1.1 機(jī)
3、器語言以后我們提到的計(jì)算機(jī)是指由CPU 和其他受CPU 直接或間接控制的芯片、器件、設(shè)備組成的計(jì)算機(jī)系統(tǒng);比如我們最常見的PC 機(jī)。1.1 機(jī)器語言以后我們提到的計(jì)算機(jī)是指由CPU 和其他受C1.1 機(jī)器語言程序員們將 0、1 數(shù)字編程的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過紙帶機(jī)或卡片機(jī)輸入計(jì)算機(jī),進(jìn)行運(yùn)算。示例 應(yīng)用8086CPU完成運(yùn)算: S = 768 + 12288 12801.1 機(jī)器語言程序員們將 0、1 數(shù)字編程的程序代碼打在紙1.1 機(jī)器語言S = 768 + 12288 - 1280機(jī)器碼: 101100000000000000000011 0000010
4、10000000000110000 001011010000000000000101 假如將程序錯(cuò)寫成以下這樣,請(qǐng)找處錯(cuò)誤: 101100000000000000000011 000001010000000000110000 0001011010000000000001011.1 機(jī)器語言S = 768 + 12288 - 12801.1 機(jī)器語言在顯示器上輸出“welcome to masm”。 機(jī)器碼看到這樣的程序,你會(huì)有什么感想?如果程序里有一個(gè)“ 1 ”被誤寫為“ 0 ”,又如何去查找呢?1.1 機(jī)器語言在顯示器上輸出“welcome to mas1.2 匯編語言的產(chǎn)生匯編語言的主體是
5、匯編指令。匯編指令和機(jī)器指令的差別在于指令的表示方法上。匯編指令是機(jī)器指令便于記憶的書寫格式。匯編指令是機(jī)器指令的助記符。1.2 匯編語言的產(chǎn)生匯編語言的主體是匯編指令。1.2 匯編語言的產(chǎn)生機(jī)器指令: 1000100111011000操作:寄存器BX的內(nèi)容送到AX中匯編指令:MOV AX,BX這樣的寫法與人類語言接近,便于閱讀和記憶。1.2 匯編語言的產(chǎn)生機(jī)器指令: 1000100111011寄存器寄存器:簡(jiǎn)單的講是CPU中可以存儲(chǔ)數(shù)據(jù)的器件,一個(gè)CPU中有多個(gè)寄存器。AX是其中一個(gè)寄存器的代號(hào),BX是另一個(gè)寄存器的代號(hào)。更詳細(xì)的內(nèi)容我們?cè)谝院蟮恼n程中將會(huì)講到。寄存器寄存器:簡(jiǎn)單的講是CPU
6、中可以存儲(chǔ)數(shù)據(jù)的器件,一個(gè)CP1.2 匯編語言的產(chǎn)生計(jì)算機(jī)能讀懂的只有機(jī)器指令,那么如何讓計(jì)算機(jī)執(zhí)行程序員用匯編指令編寫的程序呢?1.2 匯編語言的產(chǎn)生用匯編語言編寫程序的工作過程用匯編語言編寫程序的工作過程1.3 匯編語言的組成匯編語言由以下3類組成:1、匯編指令(機(jī)器碼的助記符)2、偽指令 (由編譯器執(zhí)行)3、其它符號(hào)(由編譯器識(shí)別)匯編語言的核心是匯編指令,它決定了匯編語言的特性。 1.3 匯編語言的組成匯編語言由以下3類組成:1.4 存儲(chǔ)器CPU 是計(jì)算機(jī)的核心部件它控制整個(gè)計(jì)算機(jī)的運(yùn)作并進(jìn)行運(yùn)算,要想讓一個(gè)CPU 工作,就必須向它提供指令和數(shù)據(jù)。指令和數(shù)據(jù)在存儲(chǔ)器中存放,也就是平時(shí)所
7、說的內(nèi)存。1.4 存儲(chǔ)器CPU 是計(jì)算機(jī)的核心部件它控制整個(gè)計(jì)算機(jī)的1.4 存儲(chǔ)器在一臺(tái)PC機(jī)中內(nèi)存的作用僅次于CPU。離開了內(nèi)存,性能再好的CPU也無法工作。1.4 存儲(chǔ)器1.4 存儲(chǔ)器磁盤不同于內(nèi)存,磁盤上的數(shù)據(jù)或程序如果不讀到內(nèi)存中,就無法被CPU 使用。1.4 存儲(chǔ)器1.5 指令和數(shù)據(jù)指令和數(shù)據(jù)是應(yīng)用上的概念。在內(nèi)存或磁盤上,指令和數(shù)據(jù)沒有任何區(qū)別,都是二進(jìn)制信息。1.5 指令和數(shù)據(jù)1.5 指令和數(shù)據(jù)二進(jìn)制信息: 1000100111011000 89D8H (數(shù)據(jù)) 1000100111011000 MOV AX,BX (程序)1.5 指令和數(shù)據(jù)二進(jìn)制信息:1.6 存儲(chǔ)單元存儲(chǔ)器被劃
8、分為若干個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元從0開始順序編號(hào);例如: 一個(gè)存儲(chǔ)器有128個(gè)存儲(chǔ)單元, 編號(hào)從0127。 如右圖示:1.6 存儲(chǔ)單元存儲(chǔ)器被劃分為若干個(gè)存儲(chǔ)單元,每個(gè)存儲(chǔ)單元從1.6 存儲(chǔ)單元對(duì)于大容量的存儲(chǔ)器一般還用以下單位來計(jì)量容量(以下用B來代表Byte):1KB=1024B1MB=1024KB1GB=1024MB1TB=1024GB磁盤的容量單位同內(nèi)存的一樣,實(shí)際上以上單位是微機(jī)中常用的計(jì)量單位。1.6 存儲(chǔ)單元對(duì)于大容量的存儲(chǔ)器一般還用以下單位來計(jì)量容量1.7 CPU對(duì)存儲(chǔ)器的讀寫CPU要想進(jìn)行數(shù)據(jù)的讀寫,必須和外部器件(標(biāo)準(zhǔn)的說法是芯片)進(jìn)行三類信息的交互:存儲(chǔ)單元的地址(地址信
9、息)器件的選擇,讀或?qū)懨睿刂菩畔ⅲ┳x或?qū)懙臄?shù)據(jù)(數(shù)據(jù)信息)1.7 CPU對(duì)存儲(chǔ)器的讀寫CPU要想進(jìn)行數(shù)據(jù)的讀寫,必須和1.7 CPU對(duì)存儲(chǔ)器的讀寫那么CPU是通過什么將地址、數(shù)據(jù)和控制信息傳到存儲(chǔ)芯片中的呢?電子計(jì)算機(jī)能處理、傳輸?shù)男畔⒍际请娦盘?hào),電信號(hào)當(dāng)然要用導(dǎo)線傳送。1.7 CPU對(duì)存儲(chǔ)器的讀寫那么CPU是通過什么將地址、數(shù)據(jù)1.7 CPU對(duì)存儲(chǔ)器的讀寫在計(jì)算機(jī)中專門有連接CPU和其他芯片的導(dǎo)線,通常稱為總線。物理上:一根根導(dǎo)線的集合;邏輯上劃分為: 地址總線數(shù)據(jù)總線控制總線圖示1.7 CPU對(duì)存儲(chǔ)器的讀寫在計(jì)算機(jī)中專門有連接CPU和其他1.7 CPU對(duì)存儲(chǔ)器的讀寫總線在邏輯上劃分的圖
10、示:1.7 CPU對(duì)存儲(chǔ)器的讀寫總線在邏輯上劃分的圖示:1.7 CPU對(duì)存儲(chǔ)器的讀寫CPU在內(nèi)存中讀或?qū)懙臄?shù)據(jù)演示:讀演示寫演示從上面我們知道CPU是如何進(jìn)行數(shù)據(jù)讀寫的??墒俏覀?nèi)绾蚊钣?jì)算機(jī)進(jìn)行數(shù)據(jù)的讀寫呢?1.7 CPU對(duì)存儲(chǔ)器的讀寫CPU在內(nèi)存中讀或?qū)懙臄?shù)據(jù)演示:1.7 CPU對(duì)存儲(chǔ)器的讀寫1.7 CPU對(duì)存儲(chǔ)器的讀寫1.7 CPU對(duì)存儲(chǔ)器的讀寫1.7 CPU對(duì)存儲(chǔ)器的讀寫1.7 CPU對(duì)存儲(chǔ)器的讀寫對(duì)于8086CPU,下面的機(jī)器碼能夠完成從3號(hào)單元讀數(shù)據(jù):機(jī)器碼: 101000000000001100000000含義:從3號(hào)單元讀取數(shù)據(jù)送入寄存器AXCPU接收這條機(jī)器碼后將完成上面所述
11、的讀寫工作。1.7 CPU對(duì)存儲(chǔ)器的讀寫對(duì)于8086CPU,下面的機(jī)器碼1.7 CPU對(duì)存儲(chǔ)器的讀寫機(jī)器碼難于記憶,用匯編指令來表示,情況如下:機(jī)器碼:101000000000001100000000對(duì)應(yīng)的匯編指令:MOV AX,3含義:傳送3號(hào)單元的內(nèi)容到AX1.7 CPU對(duì)存儲(chǔ)器的讀寫機(jī)器碼難于記憶,用匯編指令來表示1.8 地址總線CPU是通過地址總線來指定存儲(chǔ)單元的。地址總線上能傳送多少個(gè)不同的信息,CPU就可以對(duì)多少個(gè)存儲(chǔ)單元進(jìn)行尋址。1.8 地址總線CPU是通過地址總線來指定存儲(chǔ)單元的。1.8 地址總線地址總線發(fā)送地址信息演示1.8 地址總線1.8 地址總線1.8 地址總線1.8 地
12、址總線一個(gè)CPU有N根地址總線,則可以說這個(gè)CPU的地址總線的寬度為N。這樣的CPU最多可以尋找的N次方個(gè)內(nèi)存單元。1.8 地址總線一個(gè)CPU有N根地址總線,則可以說這個(gè)CPU1.9 數(shù)據(jù)總線CPU與內(nèi)存或其它器件之間的數(shù)據(jù)傳送是通過數(shù)據(jù)總線來進(jìn)行的。數(shù)據(jù)總線的寬度決定了CPU和外界的數(shù)據(jù)傳送速度。1.9 數(shù)據(jù)總線CPU與內(nèi)存或其它器件之間的數(shù)據(jù)傳送是通過數(shù)1.9 數(shù)據(jù)總線我們來分別看一下它們向內(nèi)存中寫入數(shù)據(jù)89D8H時(shí),是如何通過數(shù)據(jù)總線傳送數(shù)據(jù)的:8088CPU數(shù)據(jù)總線上的數(shù)據(jù)傳送情況8086CPU數(shù)據(jù)總線上的數(shù)據(jù)傳送情況1.9 數(shù)據(jù)總線我們來分別看一下它們向內(nèi)存中寫入數(shù)據(jù)89D81.9
13、數(shù)據(jù)總線 8位數(shù)據(jù)總線上傳送的信息1.9 數(shù)據(jù)總線 8位數(shù)據(jù)總線上傳送的信息1.9 數(shù)據(jù)總線 16位數(shù)據(jù)總線上傳送的信息1.9 數(shù)據(jù)總線 16位數(shù)據(jù)總線上傳送的信息1.10 控制總線CPU對(duì)外部器件的控制是通過控制總線來進(jìn)行的。在這里控制總線是個(gè)總稱,控制總線是一些不同控制線的集合。有多少根控制總線,就意味著CPU提供了對(duì)外部器件的多少種控制。所以,控制總線的寬度決定了CPU對(duì)外部器件的控制能力??刂瓶偩€上發(fā)送的控制信息1.10 控制總線CPU對(duì)外部器件的控制是通過控制總線來進(jìn)行1.10 控制總線1.10 控制總線1.10 控制總線前面所講的內(nèi)存讀或?qū)懨钍怯蓭赘刂凭€綜合發(fā)出的:其中有一根名
14、為讀信號(hào)輸出控制線負(fù)責(zé)由CPU 向外傳送讀信號(hào),CPU 向該控制線上輸出低電平表示將要讀取數(shù)據(jù);有一根名為寫信號(hào)輸出控制線負(fù)責(zé)由CPU向外傳送寫信號(hào)。1.10 控制總線前面所講的內(nèi)存讀或?qū)懨钍怯蓭赘刂凭€綜合1.1節(jié)1.10節(jié) 小結(jié)(1)匯編指令是機(jī)器指令的助記符,同機(jī)器指令一一對(duì)應(yīng)。(2)每一種CPU都有自己的匯編指令集。1.1節(jié)1.10節(jié) 小結(jié)1.1節(jié)1.10節(jié) 小結(jié)(3)CPU可以直接使用的信息在存儲(chǔ)器中存放。(4)在存儲(chǔ)器中指令和數(shù)據(jù)沒有任何區(qū)別,都是二進(jìn)制信息。1.1節(jié)1.10節(jié) 小結(jié)1.1節(jié)1.10節(jié) 小結(jié)(5)存儲(chǔ)單元從零開始順序編號(hào)。(6)一個(gè)存儲(chǔ)單元可以存儲(chǔ) 8 個(gè) bit
15、 (用作單位寫成“b”),即 8 位二進(jìn)制數(shù)。(7)1B = 8b1KB = 1024B 1MB = 1024KB 1GB = 1024MB1.1節(jié)1.10節(jié) 小結(jié)(5)存儲(chǔ)單元從零開始順序編號(hào)。1.1節(jié)1.10節(jié) 小結(jié)(續(xù))(8)每一個(gè)CPU芯片都有許多管腳,這些管腳和總線相連。也可以說,這些管腳引出總線。一個(gè)CPU可以引出三種總線的寬度標(biāo)志了這個(gè)CPU的不同方面的性能:地址總線的寬度決定了CPU的尋址能力;數(shù)據(jù)總線的寬度決定了CPU與其它器件進(jìn)行數(shù)據(jù)傳送時(shí)的一次數(shù)據(jù)傳送量;控制總線寬度決定了CPU對(duì)系統(tǒng)中其它器件的控制能力。1.1節(jié)1.10節(jié) 小結(jié)(續(xù))(8)每一個(gè)CPU芯片都有許1.1節(jié)
16、1.10節(jié) 小結(jié)(續(xù))在匯編課程中,我們從功能的角度介紹了這三類總線,對(duì)實(shí)際的連接情況不做討論。特別提示1.1節(jié)1.10節(jié) 小結(jié)(續(xù))特別提示檢測(cè)點(diǎn) 1.1(Page 8)沒有通過檢測(cè)點(diǎn)請(qǐng)不要向下學(xué)習(xí)! 特別提示1.11 內(nèi)存地址空間(概述)什么是內(nèi)存地址空間呢?一個(gè)CPU的地址線寬度為10,那么可以尋址1024個(gè)內(nèi)存單元,這1024個(gè)可尋到的內(nèi)存單元就構(gòu)成這個(gè)CPU的內(nèi)存地址空間。下面深入討論。首先需要介紹兩部分基本知識(shí),主板和接口卡。1.11 內(nèi)存地址空間(概述)什么是內(nèi)存地址空間呢?1.12 主板在每一臺(tái)PC機(jī)中,都有一個(gè)主板,主板上有核心器件和一些主要器件。這些器件通過總線(地址總線、
17、數(shù)據(jù)總線、控制總線)相連。1.12 主板在每一臺(tái)PC機(jī)中,都有一個(gè)主板,主板上有核心器1.13 接口卡計(jì)算機(jī)系統(tǒng)中,所有可用程序控制其工作的設(shè)備,必須受到CPU的控制。CPU對(duì)外部設(shè)備不能直接控制,如顯示器、音箱、打印機(jī)等。直接控制這些設(shè)備進(jìn)行工作的是插在擴(kuò)展插槽上的接口卡。1.13 接口卡計(jì)算機(jī)系統(tǒng)中,所有可用程序控制其工作的設(shè)備,1.14 各類存儲(chǔ)器芯片從讀寫屬性上看分為兩類:隨機(jī)存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)從功能和連接上分類:隨機(jī)存儲(chǔ)器RAM裝有BIOS的ROM接口卡上的RAMPC機(jī)中各類存儲(chǔ)器的邏輯連接情況1.14 各類存儲(chǔ)器芯片從讀寫屬性上看分為兩類:1.14 各類存儲(chǔ)器芯
18、片裝有BIOS的ROM BIOS:Basic Input/Output System,基本輸入輸出系統(tǒng)。 BIOS是由主板和各類接口卡(如:顯卡、網(wǎng)卡等)廠商提供的軟件系統(tǒng),可以通過它利用該硬件設(shè)備進(jìn)行最基本的輸入輸出。在主板和某些接口卡上插有存儲(chǔ)相應(yīng)BIOS的ROM。1.14 各類存儲(chǔ)器芯片裝有BIOS的ROM匯編語言第二版(全部)課件1.15 內(nèi)存地址空間上述的那些存儲(chǔ)器在物理上是獨(dú)立的器件。但是它們?cè)谝韵聝牲c(diǎn)上相同: 1、都和CPU的總線相連。 2、CPU對(duì)它們進(jìn)行讀或?qū)懙臅r(shí)候都通過控制線發(fā)出內(nèi)存讀寫命令。1.15 內(nèi)存地址空間上述的那些存儲(chǔ)器在物理上是獨(dú)立的器件。1.15 內(nèi)存地址空間
19、將各各類存儲(chǔ)器看作一個(gè)邏輯存儲(chǔ)器:所有的物理存儲(chǔ)器被看作一個(gè)由若干存儲(chǔ)單元組成的邏輯存儲(chǔ)器;每個(gè)物理存儲(chǔ)器在這個(gè)邏輯存儲(chǔ)器中占有一個(gè)地址段,即一段地址空間;CPU在這段地址空間中讀寫數(shù)據(jù),實(shí)際上就是在相對(duì)應(yīng)的物理存儲(chǔ)器中讀寫數(shù)據(jù)。1.15 內(nèi)存地址空間將各各類存儲(chǔ)器看作一個(gè)邏輯存儲(chǔ)器:匯編語言第二版(全部)課件1.15 內(nèi)存地址空間假設(shè),上圖中的內(nèi)存空間地址段分配如下:地址07FFFH的32KB空間為主隨機(jī)存儲(chǔ)器的地址空間;地址8000H9FFFH的8KB空間為顯存地址空間;地址A000HFFFFH的24KB空間為各個(gè)ROM的地址空間。1.15 內(nèi)存地址空間假設(shè),上圖中的內(nèi)存空間地址段分配如下
20、:1.15 內(nèi)存地址空間不同的計(jì)算機(jī)系統(tǒng)的內(nèi)存地址空間分配情況是不同的。8086PC機(jī)內(nèi)存地址空間分配的基本情況1.15 內(nèi)存地址空間不同的計(jì)算機(jī)系統(tǒng)的內(nèi)存地址空間分配情況8086PC機(jī)的內(nèi)存地址空間分配8086PC機(jī)的內(nèi)存地址空間分配1.15 內(nèi)存地址空間內(nèi)存地址空間:最終運(yùn)行程序的是CPU,我們用匯編編程的時(shí)候,必須要從CPU角度考慮問題。對(duì)CPU來講,系統(tǒng)中的所有存儲(chǔ)器中的存儲(chǔ)單元都處于一個(gè)統(tǒng)一的邏輯存儲(chǔ)器中,它的容量受CPU尋址能力的限制。這個(gè)邏輯存儲(chǔ)器即是我們所說的內(nèi)存地址空間。1.15 內(nèi)存地址空間內(nèi)存地址空間:小結(jié)小結(jié)匯編語言課件王爽 著清華大學(xué)出版社制作工具:Microsoft
21、 PowerPoint2003本課件由匯編網(wǎng)()制作提供匯編語言課件王爽 著清華大學(xué)出第2章 寄存器(CPU工作原理)2.1 通用寄存器2.2 字在寄存器中的存儲(chǔ)2.3 幾條匯編指令2.4 物理地址2.5 16位結(jié)構(gòu)的CPU2.6 8086CPU給出物理地址的方法2.7 “段地址16+偏移地址 =物理地址”的本質(zhì)含義2.8 段的概念2.9 段寄存器2.10 CS和IP2.12 代碼段第2章 寄存器(CPU工作原理)2.1 通用寄存器2.7 “CPU概述一個(gè)典型的CPU由運(yùn)算器、控制器、寄存器等器件組成,這些器件靠?jī)?nèi)部總線相連。內(nèi)部總線實(shí)現(xiàn)CPU內(nèi)部各個(gè)器件之間的聯(lián)系。外部總線實(shí)現(xiàn)CPU和主板上
22、其它器件的聯(lián)系。CPU概述一個(gè)典型的CPU由運(yùn)算器、控制器、寄存器等器件組成寄存器概述8086CPU有14個(gè)寄存器 它們的名稱為: AX、BX、CX、DX、SI、DI、SP、BP、 IP、CS、SS、DS、ES、PSW。這些寄存器以后會(huì)陸續(xù)介紹寄存器概述8086CPU有14個(gè)寄存器 它們的名稱為:2.1 通用寄存器8086CPU所有的寄存器都是16位的,可以存放兩個(gè)字節(jié)。AX、BX、CX、DX 通常用來存放一般性數(shù)據(jù)被稱為通用寄存器。下面以AX為例,我們看一下寄存器的邏輯結(jié)構(gòu)。2.1 通用寄存器8086CPU所有的寄存器都是16位的,可一個(gè)16位寄存器可以存儲(chǔ)一個(gè)16位的數(shù)據(jù)。(數(shù)據(jù)的存放情況
23、)一個(gè)16位寄存器所能存儲(chǔ)的數(shù)據(jù)的最大值為多少? 答案:216-1。2.1 通用寄存器一個(gè)16位寄存器可以存儲(chǔ)一個(gè)16位的數(shù)據(jù)。(數(shù)據(jù)的存放情況)16位數(shù)據(jù)在寄存器中的存放情況數(shù)據(jù):18二進(jìn)制表示:10010在寄存器AX中的存儲(chǔ):16位數(shù)據(jù)在寄存器中的存放情況數(shù)據(jù):1816位數(shù)據(jù)在寄存器中的存放情況數(shù)據(jù):20000二進(jìn)制表示:0100111000100000在寄存器AX中的存儲(chǔ):16位數(shù)據(jù)在寄存器中的存放情況數(shù)據(jù):200002.1 通用寄存器8086上一代CPU中的寄存器都是8位的;為保證兼容性,這四個(gè)寄存器都可以分為兩個(gè)獨(dú)立的8位寄存器使用。AX可以分為AH和AL;BX可以分為BH和BL;C
24、X可以分為CH和CL;DX可以分為DH和DL。8086CPU的8位寄存器存儲(chǔ)邏輯2.1 通用寄存器8086上一代CPU中的寄存器都是8位的;2.1 通用寄存器以AX為例,8086CPU的16位寄存器分為兩個(gè)8位寄存器的情況:2.1 通用寄存器以AX為例,8086CPU的16位寄存器分2.1 通用寄存器AX的低8位(0位7位)構(gòu)成了AL寄存器,高8位(8位15位)構(gòu)成了AH寄存器。AH和AL寄存器是可以獨(dú)立使用的8位寄存器。8086CPU的8位寄存器數(shù)據(jù)存儲(chǔ)情況一個(gè)8位寄存器所能存儲(chǔ)的數(shù)據(jù)的最大值是多少? 答案:28-1。2.1 通用寄存器AX的低8位(0位7位)構(gòu)成了AL寄存器2.1 通用寄存
25、器2.1 通用寄存器2.2 字在寄存器中的存儲(chǔ)一個(gè)字可以存在一個(gè)16位寄存器中,這個(gè)字的高位字節(jié)和低位字節(jié)自然就存在這個(gè)寄存器的高8位寄存器和低8位寄存器中。2.2 字在寄存器中的存儲(chǔ)一個(gè)字可以存在一個(gè)16位寄存器中,關(guān)于數(shù)制的討論由于一個(gè)內(nèi)存單元可以存放 8位數(shù)據(jù),CPU中的寄存器又可存放 n 個(gè) 8位數(shù)據(jù)。也就是說,計(jì)算機(jī)中的數(shù)據(jù)大多 是由1N個(gè)8位數(shù)據(jù)構(gòu)成的。用十六進(jìn)制來表示數(shù)據(jù)可以直觀的看 出這個(gè)數(shù)據(jù)是由哪些8位數(shù)據(jù)構(gòu)成的。示例關(guān)于數(shù)制的討論由于一個(gè)內(nèi)存單元可以存放 8位數(shù)據(jù),CPU中的2.3 幾條匯編指令匯編指令不區(qū)分大小寫2.3 幾條匯編指令匯編指令不區(qū)分大小寫2.3 幾條匯編指令
26、CPU執(zhí)行下表中的程序段的每條指令后,對(duì)寄存器中的數(shù)據(jù)進(jìn)行的改變。2.3 幾條匯編指令CPU執(zhí)行下表中的程序段的每條指令后,對(duì)2.3 幾條匯編指令2.3 幾條匯編指令2.3 幾條匯編指令這里的丟失,指的是進(jìn)位制不能在 8 位寄存器中保存,但是 CPU 不是并真的不丟棄 這個(gè)進(jìn)位值,這個(gè)問題會(huì)在后面的課程中討論。2.3 幾條匯編指令特別提示檢測(cè)點(diǎn)2.1(Page 18)沒有通過檢測(cè)點(diǎn)請(qǐng)不要向下學(xué)習(xí)!特別提示2.4 物理地址CPU訪問內(nèi)存單元時(shí)要給出內(nèi)存單元的地址。所有的內(nèi)存單元構(gòu)成的存儲(chǔ)空間是一個(gè)一維的線性空間。每一個(gè)內(nèi)存單元在這個(gè)空間中都有唯一的地址,這個(gè)唯一的地址稱為物理地址。2.4 物理地
27、址CPU訪問內(nèi)存單元時(shí)要給出內(nèi)存單元的地址。所2.5 16位結(jié)構(gòu)的CPU概括的講,16位結(jié)構(gòu)描述了一個(gè)CPU具有以下幾個(gè)方面特征:1、運(yùn)算器一次最多可以處理16位的數(shù)據(jù)。2、寄存器的最大寬度為16位。3、寄存器和運(yùn)算器之間的通路是16位的。2.5 16位結(jié)構(gòu)的CPU概括的講,16位結(jié)構(gòu)描述了一個(gè)CP2.6 8086CPU給出物理地址的方法8086有20位地址總線,可傳送20位地址,尋址能力為1M。8086內(nèi)部為16位結(jié)構(gòu),它只能傳送16位的地址,表現(xiàn)出的尋址能力卻只有64K。2.6 8086CPU給出物理地址的方法8086有20位地址2.6 8086CPU給出物理地址的方法8086CPU采用一
28、種在內(nèi)部用兩個(gè)16位地址合成的方法來形成一個(gè)20位的物理地址。8086CPU相關(guān)部件的邏輯結(jié)構(gòu)2.6 8086CPU給出物理地址的方法在8086CPU內(nèi)部用兩個(gè)16位地址合成的方法來形成一個(gè)20位的物理地址在8086CPU內(nèi)部用兩個(gè)16位地址合成的方法來形成一個(gè)20地址加法器地址加法器合成物理地址的方法: 物理地址=段地址16+偏移地址例如: 8086CPU訪問地址為123C8H的內(nèi)存單元 由段地址16引發(fā)的討論地址加法器地址加法器合成物理地址的方法:匯編語言第二版(全部)課件觀察移位次數(shù)和各種形式數(shù)據(jù)的關(guān)系:(1)一個(gè)數(shù)據(jù)的二進(jìn)制形式左移1位,相當(dāng)于該數(shù)據(jù)乘以2;(2)一個(gè)數(shù)據(jù)的二進(jìn)制形式左
29、移N位,相當(dāng)于該數(shù)據(jù)乘以2的N次方;(3)地址加法器如何完成段地址16的運(yùn)算? 以二進(jìn)制形式存放的段地址左移4位。由段地址16引發(fā)的討論觀察移位次數(shù)和各種形式數(shù)據(jù)的關(guān)系:由段地址16引發(fā)的討論2.7 “段地址16+偏移地址=物理地址”的本質(zhì)含義兩個(gè)比喻說明:說明“基礎(chǔ)地址+偏移地址 = 物理地址” 的思想:第一個(gè)比喻說明“段地址16+偏移地址=物理地址”的思想:第二個(gè)比喻 8086CPU就是這樣一個(gè)只能提供兩張3位數(shù)據(jù)紙條的CPU。2.7 “段地址16+偏移地址=物理地址”的本質(zhì)含義兩個(gè)比“基礎(chǔ)地址+偏移地址 = 物理地址”比如說,學(xué)校、體育館同在一條筆直的單行路上(學(xué)校位于路的起點(diǎn)0米處)。
30、讀者在學(xué)校,要去圖書館,問我那里的地址,我可以用幾種方式描述這個(gè)地址?“基礎(chǔ)地址+偏移地址 = 物理地址”比如說,學(xué)校、體育館同在“基礎(chǔ)地址+偏移地址 = 物理地址”(1)從學(xué)校走2826m到圖書館。這2826可以認(rèn)為是圖書館的物理地址。(2)從學(xué)校走2000m到體育館,從體育館再走826m到圖書館。第一個(gè)距離2000m是相對(duì)于起點(diǎn)的基礎(chǔ)地址;第二個(gè)距離826m是將對(duì)于基礎(chǔ)地址的偏移地址?!盎A(chǔ)地址+偏移地址 = 物理地址”(1)從學(xué)校走2826m“段地址16+偏移地址=物理地址”比如我們只能通過紙條來通信,讀者問我圖書館的地址,我只能將它寫在紙上告訴讀者。顯然我必須有一張可以容納 4 位數(shù)據(jù)
31、的紙條才能寫下2826這個(gè)數(shù)據(jù):“段地址16+偏移地址=物理地址”比如我們只能通過紙條來通“段地址16+偏移地址=物理地址”不巧的是,沒有能容納4位數(shù)據(jù)的紙條,僅有兩張可以容納3位數(shù)據(jù)的紙條。這樣我只能以這種方式告訴讀者2826這個(gè)數(shù)據(jù):“段地址16+偏移地址=物理地址”不巧的是,沒有能容納4位2.8 段的概念錯(cuò)誤認(rèn)識(shí):內(nèi)存被劃分成了一個(gè)一個(gè)的段,每一個(gè)段有一個(gè)段地址。其實(shí):內(nèi)存并沒有分段,段的劃分來自于CPU,由于8086CPU用“(段地址16)+偏移地址=物理地址”的方式給出內(nèi)存單元的物理地址,使得我們可以用分段的方式來管理內(nèi)存。2.8 段的概念錯(cuò)誤認(rèn)識(shí):2.8 段的概念我們可以認(rèn)為:地址
32、10000H100FFH的內(nèi)存單元組成一個(gè)段,該段的起始地址( 基礎(chǔ)地址)為10000H,段地址為1000H,大小為100H。2.8 段的概念我們可以認(rèn)為:地址10000H100FFH2.8 段的概念我們也可以認(rèn)為地址10000H1007FH、10080H100FFH 的內(nèi)存單元組成兩個(gè)段,它們的起始地址( 基礎(chǔ)地址 )為10000H和10080H,段地址為:1000H 和1008H,大小都為80H。2.8 段的概念我們也可以認(rèn)為地址10000H1007FH2.8 段的概念以后,在編程時(shí)可以根據(jù)需要,將若干地址連續(xù)的內(nèi)存單元看作一個(gè)段,用段地址16定位段的起始地址(基礎(chǔ)地址),用偏移地址定位段
33、中的內(nèi)存單元。兩點(diǎn)需要注意內(nèi)存單元地址小結(jié)特別提示2.8 段的概念以后,在編程時(shí)可以根據(jù)需要,將若干地址連續(xù)的兩點(diǎn)需要注意(1)段地址16 必然是 16的倍數(shù),所以一個(gè)段的起始地址也一定是16的倍數(shù);(2)偏移地址為16位,16 位地址的尋址能力為 64K,所以一個(gè)段的長度最大為64K。兩點(diǎn)需要注意(1)段地址16 必然是 16的倍數(shù),所以一個(gè)內(nèi)存單元地址小結(jié)CPU訪問內(nèi)存單元時(shí),必須向內(nèi)存提供內(nèi)存單元的物理地址。8086CPU在內(nèi)部用段地址和偏移地址移位相加的方法形成最終的物理地址。思考兩個(gè)問題內(nèi)存單元地址小結(jié)CPU訪問內(nèi)存單元時(shí),必須向內(nèi)存提供內(nèi)存單元(1)觀察下面的地址,讀者有什么發(fā)現(xiàn)?
34、結(jié)論:CPU可以用不同的段地址和偏移地址形成同一個(gè)物理地址。內(nèi)存單元地址小結(jié)(1)觀察下面的地址,讀者有什么發(fā)現(xiàn)??jī)?nèi)存單元地址小結(jié)內(nèi)存單元地址小結(jié)(2)如果給定一個(gè)段地址,僅通過變化偏移地址來進(jìn)行尋址,最多可以定位多少內(nèi)存單元?結(jié)論:偏移地址16位,變化范圍為0FFFFH,僅用偏移地址來尋址最多可尋64K個(gè)內(nèi)存單元。比如:給定段地址1000H,用偏移地址尋址,CPU的尋址范圍為:10000H1FFFFH。內(nèi)存單元地址小結(jié)(2)如果給定一個(gè)段地址,僅通過變化偏移地址內(nèi)存單元地址小結(jié)在8086PC機(jī)中,存儲(chǔ)單元的地址用兩個(gè)元素來描述。即段地址和偏移地址?!皵?shù)據(jù)在21F60H內(nèi)存單元中。”對(duì)于808
35、6PC機(jī)的兩種描述:(a)數(shù)據(jù)存在內(nèi)存2000:1F60單元中;(b)數(shù)據(jù)存在內(nèi)存的2000段中的1F60H單元中。可根據(jù)需要,將地址連續(xù)、起始地址為16的倍數(shù)的一組內(nèi)存單元定義為一個(gè)段。內(nèi)存單元地址小結(jié)在8086PC機(jī)中,存儲(chǔ)單元的地址用兩個(gè)元素特別提示檢測(cè)點(diǎn)2.2(Page 23)沒有通過檢測(cè)點(diǎn)請(qǐng)不要向下學(xué)習(xí)!特別提示2.9 段寄存器段寄存器就是提供段地址的。 8086CPU有4個(gè)段寄存器:CS、DS、SS、ES當(dāng)8086CPU要訪問內(nèi)存時(shí),由這4個(gè)段寄存器提供內(nèi)存單元的段地址。2.9 段寄存器段寄存器就是提供段地址的。2.10 CS和IPCS和IP是8086CPU中最關(guān)鍵的寄存器,它們指
36、示了CPU當(dāng)前要讀取指令的地址。 CS為代碼段寄存器; IP為指令指針寄存器。2.10 CS和IPCS和IP是8086CPU中最關(guān)鍵的寄存8086PC讀取和執(zhí)行指令相關(guān)部件8086PC讀取和執(zhí)行指令演示8086PC工作過程的簡(jiǎn)要描述8086PC讀取和執(zhí)行指令相關(guān)部件8086PC讀取和執(zhí)行指令匯編語言第二版(全部)課件8086PC工作過程的簡(jiǎn)要描述(1)從CS:IP指向內(nèi)存單元讀取指令,讀取的指令進(jìn)入指令緩沖器;(2)IP = IP + 所讀取指令的長度,從而指向下一條指令;(3)執(zhí)行指令。 轉(zhuǎn)到步驟 (1),重復(fù)這個(gè)過程。8086PC工作過程的簡(jiǎn)要描述(1)從CS:IP指向內(nèi)存單元8086PC
37、工作過程的簡(jiǎn)要描述在 8086CPU 加電啟動(dòng)或復(fù)位后( 即 CPU剛開始工作時(shí))CS和IP被設(shè)置為CS=FFFFH,IP=0000H,即在8086PC機(jī)剛啟動(dòng)時(shí),CPU從內(nèi)存FFFF0H單元中讀取指令執(zhí)行,F(xiàn)FFF0H單元中的指令是8086PC機(jī)開機(jī)后執(zhí)行的第一條指令。8086PC工作過程的簡(jiǎn)要描述在 8086CPU 加電啟動(dòng)或2.10 CS和IP內(nèi)存中指令和數(shù)據(jù)沒有任何區(qū)別,都是二進(jìn)制信息,CPU在工作的時(shí)候把有的信息看作指令,有的信息看作數(shù)據(jù)。CPU根據(jù)什么將內(nèi)存中的信息看作指令? CPU將CS:IP指向的內(nèi)存單元中的內(nèi)容看作指令。2.10 CS和IP內(nèi)存中指令和數(shù)據(jù)沒有任何區(qū)別,都是二
38、進(jìn)制2.10 CS和IP在任何時(shí)候,CPU將CS、IP中的內(nèi)容當(dāng)作指令的段地址和偏移地址,用它們合成指令的物理地址,到內(nèi)存中讀取指令碼,執(zhí)行。如果說,內(nèi)存中的一段信息曾被CPU執(zhí)行過的話,那么,它所在的內(nèi)存單元必然被CS:IP指向過。2.10 CS和IP在任何時(shí)候,CPU將CS、IP中的內(nèi)容當(dāng)2.11 修改CS、IP的指令在CPU中,程序員能夠用指令讀寫的部件只有寄存器,程序員可以通過改變寄存器中的內(nèi)容實(shí)現(xiàn)對(duì)CPU的控制。CPU從何處執(zhí)行指令是由CS、IP中的內(nèi)容決定的,程序員可以通過改變CS、IP中的內(nèi)容來控制CPU執(zhí)行目標(biāo)指令。我們?nèi)绾胃淖僀S、IP的值呢?2.11 修改CS、IP的指令在
39、CPU中,程序員能夠用指令讀2.11 修改CS、IP的指令8086CPU必須提供相應(yīng)的指令先回想我們?nèi)绾涡薷腁X中的值?mov指令不能用于設(shè)置CS、IP的值, 8086CPU沒有提供這樣的功能。8086CPU為CS、IP提供了另外的指令來改變它們的值:轉(zhuǎn)移指令2.11 修改CS、IP的指令8086CPU必須提供相應(yīng)的指如何修改AX中的值?mov 指令如:mov ax,123mov指令可以改變8086CPU大部分寄存器的值,被稱為傳送指令。能夠通過mov 指令改變CS、IP的值嗎?如何修改AX中的值?mov 指令2.11 修改CS、IP的指令同時(shí)修改CS、IP的內(nèi)容:jmp 段地址:偏移地址jm
40、p 2AE3:3jmp 3:0B16功能:用指令中給出的段地址修改CS,偏移地址修改IP。2.11 修改CS、IP的指令同時(shí)修改CS、IP的內(nèi)容:2.11 修改CS、IP的指令僅修改IP的內(nèi)容:jmp 某一合法寄存器jmp ax (類似于 mov IP,ax)jmp bx功能:用寄存器中的值修改IP。2.11 修改CS、IP的指令僅修改IP的內(nèi)容:內(nèi)存中存放的機(jī)器碼和對(duì)應(yīng)匯編指令情況: (初始:CS=2000H,IP=0000H)請(qǐng)寫出指令執(zhí)行序列:?jiǎn)栴}分析內(nèi)存中存放的機(jī)器碼和對(duì)應(yīng)匯編指令情況: (初始:CS=200問題分析結(jié)果:(1)mov ax,6622(2)jmp 1000:3(3)mo
41、v ax,0000(4)mov bx,ax(5)jmp bx(6)mov ax,0123H(7)轉(zhuǎn)到第(3)步執(zhí)行問題分析結(jié)果:(1)mov ax,66222.12 代碼段對(duì)于8086PC機(jī),在編程時(shí),可以根據(jù)需要,將一組內(nèi)存單元定義為一個(gè)段??梢詫㈤L度為 N( N64KB )的一組代碼,存在一組地址連續(xù)、起始地址為 16的倍數(shù)的內(nèi)存單元中,這段內(nèi)存是用來存放代碼的,從而定義了一個(gè)代碼段。例如2.12 代碼段對(duì)于8086PC機(jī),在編程時(shí),可以根據(jù)需要,2.12 代碼段這段長度為 10 字節(jié)的字節(jié)的指令,存在從123B0H123B9H的一組內(nèi)存單元中,我們就可以認(rèn)為,123B0H123B9H這段
42、內(nèi)存單元是用來存放代碼的 ,是一個(gè)代碼段 ,它的段地址為123BH,長度為10字節(jié)。2.12 代碼段這段長度為 10 字節(jié)的字節(jié)的指令,存在從12.12 代碼段如何使得代碼段中的指令被執(zhí)行呢?將一段內(nèi)存當(dāng)作代碼段,僅僅是我們?cè)诰幊虝r(shí)的一種安排,CPU 并不會(huì)由于這種安排,就自動(dòng)地將我們定義得代碼段中的指令當(dāng)作指令來執(zhí)行。CPU 只認(rèn)被 CS:IP 指向的內(nèi)存單元中的內(nèi)容為指令。所以要將CS:IP指向所定義的代碼段中的第一條指令的首地址。CS = 123BH,IP = 0000H。2.12 代碼段如何使得代碼段中的指令被執(zhí)行呢?2.9節(jié)2.12節(jié) 小結(jié)1、段地址在8086CPU的寄存器中存放。當(dāng)
43、8086CPU要訪問內(nèi)存時(shí),由段寄存器提供內(nèi)存單元的段地址。8086CPU有4個(gè)段寄存器,其中CS用來存放指令的段地址。2、CS存放指令的段地址,IP存放指令的偏移地址。 8086機(jī)中,任意時(shí)刻,CPU將CS:IP指向的內(nèi)容當(dāng)作指令執(zhí)行。2.9節(jié)2.12節(jié) 小結(jié)1、段地址在8086CPU的寄存器2.9節(jié)2.12節(jié) 小結(jié)(續(xù))3、8086CPU的工作過程:(1)從CS:IP指向內(nèi)存單元讀取指令,讀取的指令進(jìn)入指令緩沖器;(2)IP指向下一條指令;(3)執(zhí)行指令。(轉(zhuǎn)到步驟(1),重復(fù)這個(gè)過程。)4、8086CPU提供轉(zhuǎn)移指令修改CS、IP的內(nèi)容。2.9節(jié)2.12節(jié) 小結(jié)(續(xù))3、8086CPU的
44、工作過程特別提示檢測(cè)點(diǎn)2.3(Page 33)沒有通過檢測(cè)點(diǎn)請(qǐng)不要向下學(xué)習(xí)!特別提示小結(jié)小結(jié)匯編語言課件王爽 著清華大學(xué)出版社制作工具:Microsoft PowerPoint2003本課件由匯編網(wǎng)()制作提供匯編語言課件王爽 著清華大學(xué)出第3 章寄存器(內(nèi)存訪問)3.1 內(nèi)存中字的存儲(chǔ)3.2 DS和address3.3 字的傳送3.4 mov、add、sub指令3.5 數(shù)據(jù)段3.6 棧3.7 CPU提供的棧機(jī)制3.8 棧頂超界的問題3.9 push、pop指令3.10 棧段第3 章寄存器(內(nèi)存訪問)3.1 內(nèi)存中字的存儲(chǔ)引言在第2章中,我們主要從 CPU 如何執(zhí)行指令的角度講解了8086CP
45、U的邏輯結(jié)構(gòu)、形成物理地址的方法、相關(guān)的寄存器以及一些指令。這一章中,我們從訪問內(nèi)存的角度繼續(xù)學(xué)習(xí)幾個(gè)寄存器。引言在第2章中,我們主要從 CPU 如何執(zhí)行指令的角度講解了在0地址處開始存放20000:0號(hào)單元是低地址單元,1號(hào)單元是高地址單元。3.1 內(nèi)存中字的存儲(chǔ)在0地址處開始存放20000:3.1 內(nèi)存中字的存儲(chǔ)3.1 內(nèi)存中字的存儲(chǔ)問題:(1)0地址單元中存放的字節(jié)型數(shù)據(jù)是多少?(2)0地址字單元中存放的字型數(shù)據(jù)是多少?(3)2地址字單元中存放的字節(jié)型數(shù)據(jù)是多少?3.1 內(nèi)存中字的存儲(chǔ)問題:3.1 內(nèi)存中字的存儲(chǔ)問題(續(xù)):(4)2地址單元中存放的字型數(shù)據(jù)是多少?(5)1地址字單元中存放
46、的字型數(shù)據(jù)是多少?結(jié)論3.1 內(nèi)存中字的存儲(chǔ)問題(續(xù)):3.1 內(nèi)存中字的存儲(chǔ)結(jié)論: 任何兩個(gè)地址連續(xù)的內(nèi)存單元,N號(hào)單元和 N+1號(hào)單元,可以將它們看成兩個(gè)內(nèi)存單元 ,也可以看成一個(gè)地址為N的字單元中的高位字節(jié)單元和低位字節(jié)單元。3.1 內(nèi)存中字的存儲(chǔ)結(jié)論:3.2 DS和addressCPU要讀取一個(gè)內(nèi)存單元的時(shí)候,必須先給出這個(gè)內(nèi)存單元的地址;在8086PC中,內(nèi)存地址由段地址和偏移地址組成。8086CPU中有一個(gè) DS寄存器,通常用來存放要訪問的數(shù)據(jù)的段地址。例如3.2 DS和addressCPU要讀取一個(gè)內(nèi)存單元的時(shí)3.2 DS和address例如:我們要讀取10000H單元的內(nèi)容可以
47、用如下程序段進(jìn)行: mov bx,1000H mov ds,bx mov al,0上面三條指令將10000H(1000:0)中的數(shù)據(jù)讀到al中。3.2 DS和address例如:我們要讀取10000H3.2 DS和address mov al,0已知的mov指令可完成的兩種傳送功能:(1)將數(shù)據(jù)直接送入寄存器;(2)將一個(gè)寄存器中的內(nèi)容送入另一個(gè)寄存器中。 mov 指令 還可以將一個(gè)內(nèi)存單元中的內(nèi)容送入一個(gè)寄存器。3.2 DS和address mov al,03.2 DS和address從哪個(gè)內(nèi)存單元送到哪個(gè)寄存器中呢?mov指令的格式: mov 寄存器名,內(nèi)存單元地址“”表示一個(gè)內(nèi)存單元,
48、“”中的0表示內(nèi)存單元的偏移地址。那么內(nèi)存單元的段地址是多少呢?3.2 DS和address從哪個(gè)內(nèi)存單元送到哪個(gè)寄存器3.2 DS和address執(zhí)行指令時(shí),8086CPU自動(dòng)取DS中的數(shù)據(jù)為內(nèi)存單元的段地址。如何用mov指令從10000H中讀取數(shù)據(jù)?10000H表示為1000:0(段地址:偏移地址)將段地址1000H放入ds用mov al,0完成傳送(mov指令中的說明操作對(duì)象是一個(gè)內(nèi)存單元,中的0說明這個(gè)內(nèi)存單元的偏移地址是0,它的段地址默認(rèn)放在ds中)如何把1000H送入ds?3.2 DS和address執(zhí)行指令時(shí),8086CPU自3.2 DS和address如何把1000H送入ds?
49、傳送指令 mov ax,1相似的方式 mov ds,1000H?8086CPU不支持將數(shù)據(jù)直接送入段寄存器的操作,ds是一個(gè)段寄存器。 (硬件設(shè)計(jì)的問題)mov ds,1000H 是非法的。數(shù)據(jù)一般的寄存器段寄存器3.2 DS和address如何把1000H送入ds?3.2 DS和address問題: 寫幾條指令,將al中的數(shù)據(jù)送入內(nèi)存單元10000H?(思考后分析)分析問題本質(zhì): 怎樣將數(shù)據(jù)從寄存器送入內(nèi)存單元?結(jié)論:mov bx,1000H mov ds,bx mov 0,al (一種合理的回答)3.2 DS和address問題:3.3 字的傳送因?yàn)?086CPU是16位結(jié)構(gòu),有16根數(shù)據(jù)
50、線,所以,可以一次性傳送16位的數(shù)據(jù),也就是一次性傳送一個(gè)字。 3.3 字的傳送因?yàn)?086CPU是16位結(jié)構(gòu),有16根數(shù)據(jù)問題3.3:內(nèi)存中的情況如右圖,寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值。思考后看分析。(單步跟蹤)3.3 字的傳送問題3.3:內(nèi)存中的情況如右圖,寫出下面指令執(zhí)行后寄存器ax問題3.3分析問題3.3分析問題3.4:內(nèi)存中的情況如右圖,寫出下面指令執(zhí)行后寄存器ax,bx,cx中的值。思考后看分析。(單步跟蹤)3.3 字的傳送問題3.4:內(nèi)存中的情況如右圖,寫出下面指令執(zhí)行后寄存器ax問題3.4分析問題3.4分析3.4 mov、add、sub指令已學(xué)mov指令的幾種形
51、式: mov 寄存器,數(shù)據(jù) mov 寄存器,寄存器 mov 寄存器,內(nèi)存單元 mov 內(nèi)存單元,寄存器 mov 段寄存器,寄存器根據(jù)已知指令進(jìn)行推測(cè)3.4 mov、add、sub指令已學(xué)mov指令的幾種形式:3.4 mov、add、sub指令根據(jù)已知指令進(jìn)行推測(cè):mov 段寄存器,寄存器 mov 寄存器,段寄存器(驗(yàn)證)mov 內(nèi)存單元,寄存器 mov 內(nèi)存單元,段寄存器 mov 段寄存器,內(nèi)存單元3.4 mov、add、sub指令根據(jù)已知指令進(jìn)行推測(cè):驗(yàn)證(Debug)mov 段寄存器,寄存器 mov 寄存器,段寄存器驗(yàn)證(Debug)mov 段寄存器,寄存器add和sub指令同mov一樣,
52、都有兩個(gè)操作對(duì)象。它們可以對(duì)段寄存器進(jìn)行操作嗎?(請(qǐng)自行在Debug中試驗(yàn))3.4 mov、add、sub指令add和sub指令同mov一樣,都有兩個(gè)操作對(duì)象。3.4 m3.5 數(shù)據(jù)段前面講過,對(duì)于8086PC機(jī),我們可以根據(jù)需要將一組內(nèi)存單元定義為一個(gè)段。我們可以將一組長度為N(N64K)、地址連續(xù)、起始地址為16的倍數(shù)的內(nèi)存單元當(dāng)作專門存儲(chǔ)數(shù)據(jù)的內(nèi)存空間,從而定義了一個(gè)數(shù)據(jù)段。比如我們用123B0H123B9H這段空間來存放數(shù)據(jù):段地址:123BH長度:10字節(jié)3.5 數(shù)據(jù)段前面講過,對(duì)于8086PC機(jī),我們可以根據(jù)需要3.5 數(shù)據(jù)段如何訪問數(shù)據(jù)段中的數(shù)據(jù)呢?將一段內(nèi)存當(dāng)作數(shù)據(jù)段,是我們?cè)?/p>
53、編程時(shí)的一種安排,我們可以在具體操作的時(shí)候 ,用 ds 存放數(shù)據(jù)段的段地址,再根據(jù)需要,用相關(guān)指令訪問數(shù)據(jù)段中的具體單元。示例3.5 數(shù)據(jù)段如何訪問數(shù)據(jù)段中的數(shù)據(jù)呢?3.5 數(shù)據(jù)段我們將123B0H123BAH的內(nèi)存單元定義為數(shù)據(jù)段,我們現(xiàn)在要累加這個(gè)數(shù)據(jù)段中的前3個(gè)單元中的數(shù)據(jù),代碼如下:3.5 數(shù)據(jù)段我們將123B0H123BAH的內(nèi)存單元定義3.5 數(shù)據(jù)段問題3.5寫幾條指令,累加數(shù)據(jù)段中的前3個(gè)字型數(shù)據(jù)。思考后看分析。3.5 數(shù)據(jù)段問題3.5問題3.5分析注意:一個(gè)字型數(shù)據(jù)占兩個(gè)單元,所以偏移地址是0、2、4。問題3.5分析注意:一個(gè)字型數(shù)據(jù)占兩個(gè)單元,所以偏移地址是03.1節(jié)3.5節(jié)
54、 小結(jié)(1)字在內(nèi)存中存儲(chǔ)時(shí) ,要用兩個(gè)地址連續(xù)的內(nèi)存單元來存放,字的低位字節(jié)存放在低地址單元中,高位字節(jié)存放再高地址單元中。(2)用 mov 指令要訪問內(nèi)存單元,可以在mov指令中只給出單元的偏移地址,此時(shí),段地址默認(rèn)在DS寄存器中。(3)address表示一個(gè)偏移地址為address的內(nèi)存單元。3.1節(jié)3.5節(jié) 小結(jié)(1)字在內(nèi)存中存儲(chǔ)時(shí) ,要用兩個(gè)地3.1節(jié)3.5節(jié) 小結(jié)(續(xù))(4)在內(nèi)存和寄存器之間傳送字型數(shù)據(jù)時(shí),高地址單元和高8位寄存器、低地址單元和低8位寄存器相對(duì)應(yīng)。(5)mov、add、sub是具有兩個(gè)操作對(duì)象的指令。jmp是具有一個(gè)操作對(duì)象的指令。(6)可以根據(jù)自己的推測(cè),在D
55、ebug中實(shí)驗(yàn)指令的新格式。特別提示3.1節(jié)3.5節(jié) 小結(jié)(續(xù))(4)在內(nèi)存和寄存器之間傳送字特別提示檢測(cè)點(diǎn)3.1 (p52)沒有通過檢測(cè)點(diǎn)請(qǐng)不要向下學(xué)習(xí)!特別提示3.6 棧我們研究棧的角度: 棧是一種具有特殊的訪問方式的存儲(chǔ)空間。它的特殊性就在于,最后進(jìn)入這個(gè)空間的數(shù)據(jù),最先出去??梢杂靡粋€(gè)盒子和3本書來描述 棧的操作方式3.6 棧我們研究棧的角度:匯編語言第二版(全部)課件匯編語言第二版(全部)課件3.6 棧棧有兩個(gè)基本的操作:入棧和出棧。入棧:將一個(gè)新的元素放到棧頂;出棧:從棧頂取出一個(gè)元素。棧頂?shù)脑乜偸亲詈笕霔#枰鰲r(shí),又最先被從棧中取出。棧的操作規(guī)則:LIFO(Last In
56、First Out,后進(jìn)先出)3.6 棧棧有兩個(gè)基本的操作:入棧和出棧。3.7 CPU提供的棧機(jī)制現(xiàn)今的CPU中都有棧的設(shè)計(jì)。8086CPU提供相關(guān)的指令來以棧的方式訪問內(nèi)存空間。這意味著,我們?cè)诨?086CPU編程的時(shí)候,可以將一段內(nèi)存當(dāng)作棧來使用。3.7 CPU提供的棧機(jī)制現(xiàn)今的CPU中都有棧的設(shè)計(jì)。3.7 CPU提供的棧機(jī)制8086CPU提供入棧和出棧指令: (最基本的) PUSH(入棧) POP (出棧) push ax:將寄存器ax中的數(shù)據(jù)送入棧中; pop ax :從棧頂取出數(shù)據(jù)送入ax。8086CPU的入棧和出棧操作都是以字為單位進(jìn)行的。3.7 CPU提供的棧機(jī)制8086CPU
57、提供入棧和出棧指令:3.6 棧下面舉例說明,我們可以將10000H1000FH這段內(nèi)存當(dāng)作棧來使用。下面一段指令的執(zhí)行過程: mov ax,0123H push ax mov bx,2266H push bx mov cx,1122H push cx pop ax pop bx pop cx3.6 棧下面舉例說明,我們可以將10000H1000FH3.6 棧指令序列的執(zhí)行過程演示注意:字型數(shù)據(jù)用兩個(gè)單元存放,高地址單元放高 8 位,低地址單元放低8 位。是否有疑惑? 兩個(gè)疑問 3.6 棧指令序列的執(zhí)行過程演示匯編語言第二版(全部)課件兩個(gè)疑問1、CPU如何知道一段內(nèi)存空間被當(dāng)作棧使用?2、執(zhí)行
58、push和pop的時(shí)候,如何知道哪個(gè)單元是棧頂單元?分析 結(jié)論:任意時(shí)刻,SS:SP指向棧頂元素。 兩個(gè)疑問1、CPU如何知道一段內(nèi)存空間被當(dāng)作棧使用?對(duì)于兩個(gè)疑問的分析回想:CPU如何指導(dǎo)當(dāng)前要執(zhí)行的指令所在的位置?寄存器CS和IP中存放著當(dāng)前指令的段地址和偏移地址。8086CPU中,有兩個(gè)寄存器:段寄存器SS 存放棧頂?shù)亩蔚刂芳拇嫫鱏P 存放棧頂?shù)钠频刂?任意時(shí)刻,SS:SP指向棧頂元素。對(duì)于兩個(gè)疑問的分析回想:CPU如何指導(dǎo)當(dāng)前要執(zhí)行的指令所在的push 指令的執(zhí)行過程push ax(1)SP=SP2;(2)將ax中的內(nèi)容送入SS:SP指向的內(nèi)存單元處,SS:SP此時(shí)指向新棧頂。圖示p
59、ush 指令的執(zhí)行過程push axpush 指令的執(zhí)行過程push 指令的執(zhí)行過程3.6 棧問題3.6:如果我們將10000H1000FH 這段空間當(dāng)作棧,初始狀態(tài)棧是空的,此時(shí),SS=1000H,SP=?思考后看分析。3.6 棧問題3.6:如果我們將10000H1000FH 問題3.6分析SP = 0010H問題3.6分析SP = 0010H問題3.6分析(續(xù))我們將10000H1000FH 這段空間當(dāng)作棧段,SS=1000H,??臻g大小為16 字節(jié) ,棧最底部的字單元地址為1000:000E。任意時(shí)刻,SS:SP指向棧頂,當(dāng)棧中只有一個(gè)元素的時(shí)候,SS = 1000H,SP=000EH。
60、問題3.6分析(續(xù))我們將10000H1000FH 這段空問題3.6分析(續(xù))棧為空,就相當(dāng)于棧中唯一的元素出棧,出棧后,SP=SP+2 ,SP 原來為 000EH,加 2 后SP=10H,所以,當(dāng)棧為空的時(shí)候,SS=1000H,SP=10H。換個(gè)角度看問題3.6分析(續(xù))棧為空,就相當(dāng)于棧中唯一的元素出棧,出棧問題3.6分析(續(xù))換個(gè)角度看: 任意時(shí)刻,SS:SP 指向棧頂元素,當(dāng)棧為空的時(shí)候,棧中沒有元素,也就不存在棧頂元素,所以SS:SP 只能指向棧的最底部單元下面的單元,該單元的偏移地址為棧最底部的字單元的偏移地址+2,棧最底部字單元的地址為1000:000E,所以??諘r(shí),SP=001
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版園林景觀設(shè)計(jì)施工一體化合同范本4篇
- 二零二五年度空?qǐng)龅刈赓U合同示范文本(含8項(xiàng)租賃合同解除條件)3篇
- 2025年度個(gè)人股權(quán)交易合規(guī)審查與服務(wù)合同4篇
- 2025年食堂食材采購與互聯(lián)網(wǎng)+服務(wù)合同范本大全3篇
- 個(gè)人獨(dú)資企業(yè)2024年度合同3篇
- 2024私企公司股權(quán)轉(zhuǎn)讓及海外市場(chǎng)拓展合作協(xié)議3篇
- 個(gè)人汽車抵押貸款合同:2024年標(biāo)準(zhǔn)版版B版
- 2025版五星級(jí)酒店員工工作績(jī)效評(píng)估及獎(jiǎng)懲合同3篇
- 2025年暑假工招工合同范本:職業(yè)健康檢查與保護(hù)3篇
- 二零二五年特種空調(diào)設(shè)備采購與安全檢測(cè)合同2篇
- 2024-2025學(xué)年山東省濰坊市高一上冊(cè)1月期末考試數(shù)學(xué)檢測(cè)試題(附解析)
- 數(shù)學(xué)-湖南省新高考教學(xué)教研聯(lián)盟(長郡二十校聯(lián)盟)2024-2025學(xué)年2025屆高三上學(xué)期第一次預(yù)熱演練試題和答案
- 決勝中層:中層管理者的九項(xiàng)修煉-記錄
- 幼兒園人民幣啟蒙教育方案
- 高考介詞練習(xí)(附答案)
- 單位就業(yè)人員登記表
- 衛(wèi)生監(jiān)督協(xié)管-醫(yī)療機(jī)構(gòu)監(jiān)督
- 記錄片21世紀(jì)禁愛指南
- 腰椎間盤的診斷證明書
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)七 裂變傳播
- 單級(jí)倒立擺系統(tǒng)建模與控制器設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論