匯編語言程序設計2_第1頁
匯編語言程序設計2_第2頁
匯編語言程序設計2_第3頁
匯編語言程序設計2_第4頁
匯編語言程序設計2_第5頁
已閱讀5頁,還剩55頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

匯編語言程序設計

AssemblyLanguageProgramming第一章基礎知識§2硬件基礎計算機的基本結構CPU系統(tǒng)總線MemoryI/O子系統(tǒng)

80x86的寄存器組8086的存儲器組織2.1計算機基本結構

中央處理機

CPU總線控制邏輯接口接口存儲器大容量存儲器I/O設備I/O子系統(tǒng)系統(tǒng)總線組成:算術邏輯部件、控制部件和寄存器組。

CPU的作用:執(zhí)行算術與邏輯運算??刂浦噶畹膱?zhí)行。編程結構:對匯編語言程序員來說,關心的是其中的寄存器。CPU總線是部件之間進行數(shù)據(jù)(電信號)交換的通道。

80x86計算機的系統(tǒng)總線分為3類:數(shù)據(jù)總線地址總線控制總線系統(tǒng)總線數(shù)據(jù)總線數(shù)據(jù)總線是用來傳遞數(shù)據(jù)的,定義了CPU在每個內存周期所能存取數(shù)據(jù)的位數(shù)。

80x86系列CPU的數(shù)據(jù)總線為8位、16位、32位或64位。這就是“為什么通常的數(shù)據(jù)存取是以8位、16位、32位或64位進行的”。數(shù)據(jù)總線越寬,處理能力越強。具有N位數(shù)據(jù)總線并不意味著CPU只能處理N位數(shù)據(jù)。系統(tǒng)總線地址總線地址總線用來指出數(shù)據(jù)的地址(內存或I/O)。地址總線的位數(shù)決定了最大可編址的內存與I/O空間。對于N位地址總線,CPU可以提供2N個不同地址:0~2N-1。地址總線由內存與I/O子系統(tǒng)共享使用(I/O只用低16位)。(如何區(qū)分?)控制總線控制總線用來控制CPU與內存和I/O設備之間的數(shù)據(jù)傳送方式(如傳送方向)。系統(tǒng)總線內存是存放指令和數(shù)據(jù)的部件,由若干內存單元構成。80x86的內存以字節(jié)編址:每個內存單元有唯一的地址,可存放1個字節(jié)。內存單元的2個要素:地址(編號)與值(內容)。(100H)=34H1個字占據(jù)2個相鄰的內存單元;低字節(jié)在低地址單元,高字節(jié)在高地址單元;字的地址由其低地址來表示。雙字也類似。同一地址可以看作是字節(jié)、字或雙字單元的地址。(?)內存I/O子系統(tǒng)通過接口電路與微機系統(tǒng)連接I/O接口由若干寄存器組成:數(shù)據(jù)寄存器、狀態(tài)寄存器、命令寄存器I/O端口:即I/O地址,是區(qū)分I/O設備及其寄存器的編號。匯編語言程序員看到的,是端口8086計算機采用16位表示I/O端口I/O端口與內存地址如何區(qū)分?I/O子系統(tǒng)

2.280x86的寄存器組8086/8088中共有14個16位寄存器寄存器在CPU內部,所以訪問速度快。但容量小外存內存寄存器CPU寄存器與存儲器的比較:

寄存器存儲器

在CPU內部在CPU外部訪問速度快訪問速度慢容量小,成本高容量大,成本低用名字表示用地址表示沒有地址地址可用各種方式形成專用寄存器數(shù)據(jù)寄存器:AX/BX/CX/DX存放任何數(shù)據(jù)信息。暫存計算的中間結果,數(shù)據(jù)中轉站。每個寄存器又有它們各自的專用目的:AX(Accumulator)——累加器,使用頻度最高,用于算術、邏輯運算以及與外設傳送信息等;BX(Base)——基址寄存器,常用做存放存儲器地址;CX(Count)——計數(shù)器,作為循環(huán)和串操作等指令中的隱含計數(shù)器;DX(Data)——數(shù)據(jù)寄存器,常用來存放雙字長數(shù)據(jù)的高16位,或存放外設端口地址。16位一分為二AHALAXBHBLBXCHCLCXDHDLDXAX=1234HAH=12HAL=34HAX=CDABHAH=CDHAL=ABH80386及其后繼:EAX,EBX,ECX,EDXEAX=12345678HAX=5678HAH=56HAL=78HAXAHALEAXBXBHBLEBXCHCLECXDHDLEDXCXDX變址寄存器:SI/DI變址寄存器常用于存儲器尋址時提供地址串操作類指令中,SI(SourceIndex)是源變址寄存器串操作類指令中,DI(DestinationIndex)是目的變址寄存器16位,不可拆分使用80386及其后繼:ESI,EDI指針寄存器:SP/BP指針寄存器用于尋址內存堆棧內的數(shù)據(jù)SP(StackPointer)為堆棧指針寄存器,指示棧頂?shù)钠频刂稴P不能再用于其他目的,具有專用目的BP(BasePointer)為基址指針寄存器,表示數(shù)據(jù)在堆棧段中的基地址SP和BP寄存器與SS段寄存器聯(lián)合使用以確定堆棧段中的存儲單元地址80386及其后繼:ESP,EBP段寄存器:CS/DS/SS/ES8086CPU的4個16位的段寄存器代碼段寄存器CS(CodeSegment)數(shù)據(jù)段寄存器DS(DataSegment)堆棧段寄存器SS(StackSegment)附加數(shù)據(jù)段寄存器ES(ExtraSegment)段寄存器用來確定該段在內存中的起始地址。用途特定,不可分開使用。80386及其后繼:FSGSIP(InstructionPointer)指令指針寄存器IP,指示代碼段中指令的偏移地址它與代碼段寄存器CS聯(lián)用,確定下一條指令的物理地址計算機通過CS:IP寄存器來控制指令序列的執(zhí)行流程IP寄存器是一個專用寄存器,程序一般不可直接使用該寄存器。80386及其后繼:EIP標志寄存器用途:標志寄存器F(FLAGS),又稱程序狀態(tài)字寄存器PSW,是用以記錄或存放狀態(tài)標志和控制標志信息的。狀態(tài)標志位——用以記錄當前運算結果的狀態(tài)信息控制標志位——用以存放控制CPU工作方式的標志信息。80386及其后繼:FLAGS控制標志位

方向標志DF中斷允許標志IF追蹤標志TF為什么要標志寄存器?Why狀態(tài)標志位?一般只需要計算結果結果特征有時更重要Why控制標志位改變CPU工作方式標志寄存器設置狀態(tài)標志位的設置是由CPU根據(jù)當前程序運行結果的狀態(tài)自動完成的。狀態(tài)標志位信息一般用作轉移指令的轉移控制條件??刂茦酥疚挥沙绦蛟O置,控制CPU的工作方式進位標志CF(CarryFlag)當運算結果的最高有效位有進位(加法)或借位(減法)時,進位標志置1,即CF=1;否則CF=0。例如:3AH+7CH=B6H沒有進位:CF=0AAH+7CH=(1)26H有進位:CF=1零標志ZF(ZeroFlag)若運算結果為0,則ZF=1,否則ZF=0例如:3AH+7CH=B6H,結果不是零:ZF=086H+7AH=(1)00H,結果是零(為什么?):ZF=1注意:ZF為1表示的結果是0符號標志SF(SignFlag)有符號數(shù)據(jù)利用最高有效位表示數(shù)據(jù)的符號。所以,最高有效位就是符號標志的狀態(tài)。運算結果最高位為1,則SF=1;否則SF=0。例如:3AH+7CH=B6H,最高位D7=1:SF=186H+7AH=(1)00H,最高位D7=0:SF=0奇偶標志PF(ParityFlag)當運算結果最低字節(jié)中“1”的個數(shù)為偶數(shù)時,PF=1;否則PF=0。例如:3AH+7CH=B6H=10110110B,結果中有5個1,是奇數(shù):PF=0注意:PF標志僅反映最低8位中“1”的個數(shù)是偶或奇,即使是進行16位字操作。輔助進位標志AF(AuxiliaryCarryFlag)運算時D3位(低半字節(jié))有進位或借位時,AF=1;否則AF=0。例如:3AH+7CH=B6HD3有進位:AF=1這個標志主要由處理器內部使用,用于十進制算術運算指令中,用戶一般不必關心。(類似于進位標志)溢出標志OF(OverflowFlag)若算術運算的結果有溢出,則OF=1;否則OF=0。只是對有符號數(shù)而言。對無符號數(shù)而言,OF=1并不意味著結果出錯。

80H-01H=7FH=127,OF=1對于無符號數(shù)而言,128-1=127,正確對于無符號數(shù)而言,-128-1=127,錯誤什么是溢出處理器內部以補碼表示有符號數(shù)8個二進制位能夠表達的整數(shù)范圍是:+127~-12816位表達的范圍是:+32767~-32768如果運算結果超出了這個范圍,就是產生了溢出有溢出,說明有符號數(shù)的運算結果不正確無符號數(shù)有溢出嗎?FFH+01H=00H,CF=1,進位溢出溢出的判斷方法一(CPU):如果最高位與次高位同時向前有或無進/借位,則OF=0;(?)如果最高位與次高位不同時向前有或無進/借位,則OF=1;方法二:兩個正補碼數(shù)相加結果為負兩個負補碼數(shù)相加結果為正正補碼數(shù)-負補碼數(shù)為負負補碼數(shù)-正補碼數(shù)為正其他情況OF=1OF=0溢出和進位溢出標志OF和進位標志CF是兩個意義不同的標志進位標志表示無符號數(shù)運算結果是否超出范圍,運算結果仍然正確;可恢復的錯誤。溢出標志表示有符號數(shù)運算結果是否超出范圍,運算結果已經不正確。不可恢復錯誤。溢出和進位的對比例1:7FH+01H=80H無符號數(shù)運算:127+1=128,范圍內,無進位有符號數(shù)運算:127+1=128,范圍外,有溢出例2:FFH+01H=(1)00H無符號數(shù)運算:255+1=256,范圍外,有進位有符號數(shù)運算:-1+1=0,范圍內,無溢出如何運用溢出和進位處理器對兩個操作數(shù)進行運算時,并不知道操作數(shù)是有符號數(shù)還是無符號數(shù),所以全部設置,按各自規(guī)則。應該利用哪個標志,則由程序員來決定。將參加運算的操作數(shù)是無符號數(shù),就應該關心CF;將參加運算的操作數(shù)是有符號數(shù),則要注意是否溢出。我怎么知道是什么數(shù)?除了你沒人知道,例:

MOVAX,1MOVBX,2ADDAX,BX

指令執(zhí)行后,(AX)=3,OF=0,CF=0,ZF=0,SF=0例:

MOVAX,FFFFHMOVBX,1ADDAX,BX

指令執(zhí)行后,(AX)=0,OF=0,CF=1,ZF=1,SF=0方向標志DF(DirectionFlag)用于串操作指令中,控制地址的變化方向:設置DF=0,串操作的存儲器地址自動增加;設置DF=1,串操作的存儲器地址自動減少。中斷允許標志IF(Interrupt-enableFlag)用于控制外部可屏蔽中斷是否可以被處理器響應:設置IF=1,則允許中斷;設置IF=0,則禁止中斷。陷阱標志TF(TrapFlag)用于控制處理器是否進入單步操作方式:設置TF=0,處理器正常工作;設置TF=1,處理器單步執(zhí)行指令。單步執(zhí)行指令——處理器在每條指令執(zhí)行結束時,便產生一個編號為1的內部中斷。這種內部中斷稱為單步中斷,所以TF也稱為單步標志。利用單步中斷可對程序進行逐條指令的調試。這種逐條指令調試程序的方法就是單步調試。2.38086存儲器組織

分段技術地址形成方式分段技術Why?矛盾:AB20位≮≯

DB16位地址:20位≮≯地址Register:16位How?用兩個16位Register方案?方案用兩個16位Register1616+20分段管理將存儲器分成若干個邏輯段段首地址必須為:****0H。其有效地址“****H”存放在段寄存器中,稱為段地址。段中某一個單元相對于段首的距離稱為偏移地址,偏移地址存放在偏移地址寄存器中。段的長度不超過216=64K。(僅能訪問4*64K?)對比物理地址=16×段地址+偏移地址1616+200000段地址偏移地址物理地址段首地址地址概念物理地址20位,20位地址總線上產生的唯一的地址。邏輯地址--程序指令中引用和操作的地址段地址:16位,段首地址的有效地址偏移地址:段中某一個單元相對于段首的距離,16位4個專門存放段地址的段寄存器(16位)代碼段段寄存器CS數(shù)據(jù)段段寄存器DS堆棧段段寄存器SS附加段段寄存器ES例:(DS)=3000H,偏移=1234H,

物理地址=16d(DS)+偏移

=31234H存儲器

8K代碼

2K數(shù)據(jù)

256堆棧02000H04800H04000H0200H0400H0480H邏輯段CPU形成物理地址的過程ALU完成加法,地址加法器段地址一般在程序開始時預定訪問某一個內存單元,程序中只需要給出16位偏移地址CPU幾種典型的操作取指令:指令單元地址=(CS)×10H+IP堆棧操作:堆棧數(shù)據(jù)地址=(SS)×10H+偏移內存數(shù)據(jù):內存數(shù)據(jù)地址=(DS)×10H+偏移§38086尋址方式8086機器碼格式指令格式尋址方式3.18086機器碼格式機器碼格式:是將指令以2進制數(shù)0和1進行編碼的形式操作碼說明計算機要執(zhí)行哪種操作,ModRegR/M

:表明尋找操作數(shù)的方式。操作碼位移量立即數(shù)ModRegR/M3.2指令格式指令的一般格式操作碼說明計算機要執(zhí)行哪種操作,它是指令中不可缺少的組成部分操作數(shù)是指令執(zhí)行的參與者,即各種操作的對象,為數(shù)據(jù)及數(shù)據(jù)所在地址。操作碼操作數(shù)1操作數(shù)2操作碼操作數(shù)1操作數(shù)2【;注釋】【標號:】3.2指令格式操作數(shù)的形式立即操作數(shù):指令的操作數(shù)是立即數(shù)(常量),只能是源操作數(shù)。寄存器操作數(shù):操作數(shù)存放在寄存器中值,指令中使用寄存器名。內存操作數(shù):操作數(shù)存放在內存中,指令中給出內存地址,通常為有效地址EA,段地址在某個段寄存器中。3.38086尋址方式立即尋址方式寄存器尋址方式內存操作數(shù)尋址方式1.立即尋址方式(immediateaddressing)操作數(shù)在指令中給出,作為指令機器碼的一部分存儲

MOVAL,34H;機器碼:B034MOVAX,0034H;機器碼:B83400使用場合:常數(shù),8位和16位。注意:只能用于源操作數(shù)2.寄存器尋址方式(registeraddressing)操作數(shù)在指定的數(shù)據(jù)寄存器中

MOVAX,BXMOVAL,BH注意:無FS和GSCS/IP不能用作目的操作數(shù):MOVCS/IP,AX(X)3.內存操作數(shù)尋址方式直接尋址方式(directaddressing)寄存器間接尋址方式(registerindirect)寄存器相對尋址方式(registerrelative)基址變址尋址方式(basedindexed..)相對基址變址方式(relativebasedindexed..)直接尋址方式(directaddressing)內存操作數(shù)的偏移地址由指令直接給出

MOVAX,[2000H] MOVWORDPTR[1000H],-1MOVAX,Y注意:隱含的段為數(shù)據(jù)段DS物理地址

=16*(DS)+偏移地址…………1000H1001HAX3412AHAL比較比較1MOVAL,[1000H]AL=34H;MOVAX,[1000H]AX=1234H比較2MOVAX,1000HAX=1000H;MOVAX,[1000H]AX=1234H1234

寄存器間接尋址方式(registerindirect)指定某個地址寄存器(SI、DI、BX、BP)的內容作為內存操作數(shù)的偏移地址

MOVAX,[BX] MOV[BP],AL使用場合:表格、字符串、緩沖區(qū)處理注意:段地址規(guī)則BX,SI,DI(DS)BP

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論