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

下載本文檔

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

文檔簡(jiǎn)介

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

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

-435C9B9939bbbbb1101000011

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

6Bh+95h=?二進(jìn)制補(bǔ)碼轉(zhuǎn)換c和-c

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

-2CF0

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

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

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

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

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

AHAXALBHBXBLCHCXCLDHDXDLSPBP

SIDI

IPFLAGSCSDSSSES8086/8088/80286寄存器EAXEBXECXEDXESPEBPESIEDIEIPEFLAGS

FSGS311615870中斷中斷:某些事件使得處理器掛起當(dāng)前的操作,并為引起中斷的原因去作一些事情。有些原因是正常的,例如鍵盤輸入請(qǐng)求;有些是非法的,例如除數(shù)為0的操作。中斷服務(wù)程序堆棧StackLIFO數(shù)據(jù)結(jié)構(gòu)支持PUSH和POP操作作用發(fā)生中斷處理和過(guò)程調(diào)用時(shí),保護(hù)當(dāng)前執(zhí)行的現(xiàn)場(chǎng);過(guò)程返回時(shí),依據(jù)堆棧保存的地址繼續(xù)執(zhí)行堆棧的構(gòu)造堆棧是通過(guò)堆棧段寄存器和偏移量訪問(wèn)的一段內(nèi)存區(qū)域SS:指向了堆棧的開始地址SP:指向了堆棧的頂部SP:000CSS:0340StackSize:000C動(dòng)作PUSH:壓棧操作,減少SP

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論