IBM-PC匯編語言程序設計課件_第1頁
IBM-PC匯編語言程序設計課件_第2頁
IBM-PC匯編語言程序設計課件_第3頁
IBM-PC匯編語言程序設計課件_第4頁
IBM-PC匯編語言程序設計課件_第5頁
已閱讀5頁,還剩55頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

IBM-PC匯編語言程序設計計算機科學與工程系AssemblyLanguageProgrammingAssemblyLanguageProgramming引言課程安排1總學時:48學時講課:36學時,實驗:12學時學分:3教科書:8086/8088宏匯編語言程序設計教程(第二版)王正智著電子工業出版社課程考核考試課程成績計算:平時:5%作業:10%實驗:15%考試:60%學習技巧匯編語言難嗎???語言類課程學習養成自學的習慣養成上機求證的習慣做一定的練習下面我們開始學習什么是匯編語言?機器特定的編程語言該語言的語句和機器內在語言是一一對應的關系該語言和機器的指令集、系統結構相匹配程序設計的級別機器語言匯編語言高級語言IBM-PC匯編語言針對8086,8088,80186,80286,80386,80486,andPentiumProcessors為什么要學習匯編語言?能夠學習到處理器是如何工作的理解計算機的基本系統結構探究數據和指令的內部表述能夠創建小巧有效的程序允許程序員繞過高層語言的限制編程有些工作必須用匯編語言完成機器語言數字表示的機器執行的指令集合,被稱為處理器指令集處理器能夠執行的基本指令的集合每個指令被編碼成為數字符號指令可能占用一個或者多個字節每個數字代表一個機器指令IBM-PC機器指令舉例00000101borB005h操作碼=10110000b含義:拷貝一個字節數據到AL寄存器中字節數據由該指令的第二部分代表:00000101b第1部分軟硬件基礎知識AssemblyLanguageProgramming編寫匯編程序,需要計算機硬件和軟件兩方面的知識。該部分側重于最為基礎的硬件和軟件知識介紹。1數據表示AssemblyLanguageProgramming十進制到二進制的轉換109d轉換到二進制-循環被2除余數作為數位值直到0為止將余數組合起來第一位余數作為二進制數的最低位109d=1101101b109/2=54r154/2=27r027/2=13r113/2=6r16/2=3r03/2=1r11/2=0r1十六進制數0~9,A,B,C,D,E,F注意:數字以H結尾大家思考:為何引入十六進制數?二進制和十六進制BinaryHex4位一組劃分(從最低位開始)最后一組不足4位補0每組對應的數據轉換成對應的數字HexBinary相反的方法每個數字展成4bits可以忽略前面的若干的001001110b=4Eh37h=00110111b基本加法Easy!!例如:cccc10101+1111100100HexExample:cc3CF02

+435C9804CB0+0=00+1=11+0=11+1=101+1+1=11WatchCarries基本減法Hexexample:bbFCF02

-435C9B9939bbbbb1101000011

-11010011011011010Aborrowaddssixteen字符數據ASCIIAmericanStandardCodeforInformationInterchange(ASCII)7-bit二進制碼表示的128個字符通常占用1字節包括一些控制字符ASCII碼的序列稱為ASCII字符串注:數字字符‘1’~‘9’的ASCII碼值:30~39大家思考:如何將ASCII碼值和對應的數字相轉換?理解Two’sComplementCode補碼的定義:[X]補=(M+X)modM其中:M=2n正數的編碼無符號正數表示負數的編碼其值加上256后對應的正數編碼Codefor+107107d=1101011bcode:01101011(6Bh)Codefor-107-107+256=149149d=10010101bcode:10010101b(95h)大家計算

6Bh+95h=?二進制補碼轉換c和-c

的二進制補碼加和的值等于2的冪8-bitcode:c+(-c)=2816-bitcode:c+(-c)=216(-c) =2n-c =[(2n-1)-c]+1求補碼的方法1:(-c)=2n-c求補碼的方法2:翻轉所有的位加1檢驗BinaryDec1111,0000,1101-243+0111,0110,1001+18970110,0111,01101654負數解碼1111,0000,1101-(0000,1111,0011)-243HexDecimalF23C(-3524)

-2CF0

-11504C54C-15028對F23C解碼:1111,0010,0011,1100-(0000,1101,1100,0100)-3524算術進位算術進位+1111110000000101000000011CF=1,OF=0+25251無效+-451有效無符號數有符號數進位CF的設置,由符號位的運算進位0或1產生的。對于無符號數,產生了數據位的進位而無效。算術溢出溢出的兩情形:+011110010000101110000100CF=0,OF=1+12111132無效++12111-124有效無符號數有符號數情形1:當符號位有進位輸入,而沒有進位輸出時情形2:當進位輸出不是由進位輸入產生時+111101101000100101111111CF=1,OF=1無效++246137127無符號數有符號數1+-10-119127無效作業1P11#2#3#6#72IBM-PC硬件AssemblyLanguageProgramming處理器8x86各種處理器的速度,尋址空間,寄存器以及總線數據寬度不同。808616bitsregisters,1MB內存空間,總線8位808816位數據總線8038632位寄存器,32位總線,尋址4GBPentium32位寄存器,64位數據總線Intel8086處理器的結構8086寄存器寄存器–處理器中臨時存儲數據的地方數據寄存器(16-bit)AX,BX,CX,DX地址寄存器(16-bit)段寄存器:CS,SS,DS,ES指針寄存器:SP,BP,IP變址寄存器:SI,DI狀態寄存器flag(16-bit)通用數據寄存器都是用來保存數據的,因此稱為通用寄存器但各有用途AX:累加BX:基址CX:計數DX:數據各個寄存器的對應高低字節可單獨使用AH,AL,BH,etc.AXBXCXDXAHALBHBLCHCLDHDL高8位低8位內存組織8086尋址范圍1MB(220bytes)每個字節的地址從00000h到FFFFFh編碼,并且編址是唯一確定的注意:由于各個寄存器為16位,而20位的地址的尋址通過16位的寄存器完成。這是如何進行的呢?100111110010011001001000100000110101110010100010物理地址10000H10001H10002H10003H

10004H10005H數據尋址方式段:偏移量尋址段segment:一個存儲區域,起始地址為能夠被16整除的地址,即后4位為0(通常不寫)偏移量:段范圍內的存儲單元相對于段起始地址的數量,偏移量的范圍從0000H到FFFFH段:偏移量尋址邏輯地址=段地址:偏移地址物理地址=段地址×16+偏移量邏輯地址段地址:偏移地址1000:0000H1000:0001H1000:0002H1000:0003H1000:0004H1000:0005H100111110010011001001000100000110101110010100010物理地址10000H10001H10002H10003H

10004H10005H邏輯地址vs.物理地址16位段地址

16位偏移地址0000+20位物理地址段寄存器代碼段CS對應執行的指令,起始地址對應第一條可執行的指令數據段DS對應程序的數據、常量等堆棧段SS對應暫存任何數據,包括子程序所用的數據擴展段ES對應于特殊的數據和操作使用

存儲器8KB代碼2KB數據256堆棧02000H04800H04000H0200H0400H0480HCSDSSSESCS寄存器和IP寄存器CSregister表示程序代碼段的起始地址IP寄存器包含要執行的下一指令的地址的偏移量,和CS寄存器相關聯IP寄存器的內容是程序中不能修改的大家思考:某條指令的地址為CS:394BHIP:514H實際的物理地址:?SS寄存器和SP寄存器SS寄存器保存了暫時的數據和地址段的起始地址SP堆棧指針保存了堆棧段的段內的偏移量,也就是堆棧的當前頂部地址上述兩者結合起來ES寄存器擴展數據段一般用于字符串操作的尋址,一般和DI寄存器相關聯BP和變址寄存器BP為基址寄存器可指定為任何段的偏移量,但缺省指的是堆棧段SI和DI稱為變址寄存器作用1:保存相對于任何段的偏移量,但通常缺省保存相對于數據段的偏移量作用2:有時保存相對于數組地址的索引數據標志寄存器標志寄存器保存了當前程序的執行狀態1514131211109876543210OFDFIFTFSFZFAFPFCFOF溢出標志DF方向標志SF符號標志IF中斷標志ZF零標志TF陷阱標志CF進位標志PF奇偶標志AF輔助進位標志8086的系統啟動重置系統狀態,執行的第一條指令位于FFFF0HCS=FFFFhIP=0000h其余各個寄存器清零執行ROM中指令,進入BIOS程序的處理系統內存檢查初始化中斷向量表和相關數據從磁盤中載入操作系統位于磁盤的啟動扇區DOS載入執行80x86寄存器80x86的程序可見寄存器組通用寄存器專用寄存器段寄存器

AHAXALBHBXBLCHCXCLDHDXDLSPBP

SIDI

IPFLAGSCSDSSSES8086/8088/80286寄存器EAXEBXECXEDXESPEBPESIEDIEIPEFLAGS

FSGS311615870中斷中斷:某些事件使得處理器掛起當前的操作,并為引起中斷的原因去作一些事情。有些原因是正常的,例如鍵盤輸入請求;有些是非法的,例如除數為0的操作。中斷服務程序堆棧StackLIFO數據結構支持PUSH和POP操作作用發生中斷處理和過程調用時,保護當前執行的現場;過程返回時,依據堆棧保存的地址繼續執行堆棧的構造堆棧是通過堆棧段寄存器和偏移量訪問的一段內存區域SS:指向了堆棧的開始地址SP:指向了堆棧的頂部SP:000CSS:0340StackSize:000C動作PUSH:壓棧操作,減少SP

POP:出棧操作,增加SPSP:0008SS:0340StackSize:000CPUSHPOPPUSHPUSHsourcesource指的是任何16/32位通用或者段寄存器,或者字/雙字的地址PUSHF將標志寄存器的內容壓棧動作:SP減去2/4在SS:SP地址存放source數據PUSH舉例PUSHAX3C09A4402CFFA2432A0946SP:000807064CSS:0340StackSize:000C3C09A4402CFFA2232A0946SP:000601064CSS:0340AX:0123POPPOPdestinationdestination指的是任何16/32位通用或者段寄存器,或者字/雙字的地址POPForPOPFD將標志寄存器的內容出棧,存入標志寄存器動作:將SS:SP地址的數據拷貝到destinationSP加2/4POP舉例POPES3C09A4402CFFA2232A0946SP:000801064CSS:03403C09A4402CFFA2232A0946SP:000601064CSS:0340ES:01

溫馨提示

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

評論

0/150

提交評論