




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第 2 2 章章處理器結(jié)構(gòu)處理器結(jié)構(gòu)2.1 2.1 處理器功能結(jié)構(gòu)處理器功能結(jié)構(gòu)2.2 2.2 寄存器寄存器2.3 2.3 存儲(chǔ)器組織存儲(chǔ)器組織2.4 2.4 匯編語(yǔ)言基礎(chǔ)匯編語(yǔ)言基礎(chǔ)2.5 2.5 數(shù)據(jù)尋址方式數(shù)據(jù)尋址方式2.1 2.1 處理器功能結(jié)構(gòu)處理器功能結(jié)構(gòu)從應(yīng)用角度看到的處理器內(nèi)部結(jié)構(gòu)從應(yīng)用角度看到的處理器內(nèi)部結(jié)構(gòu)Intel 803868位CPUIntel PentiumIntel 80862.1.1 2.1.1 處理器基本結(jié)構(gòu)處理器基本結(jié)構(gòu)算術(shù)邏輯單元算術(shù)邏輯單元寄存器寄存器指令處理單元指令處理單元內(nèi)部數(shù)據(jù)總線內(nèi)部數(shù)據(jù)總線控制總線控制總線數(shù)據(jù)總線數(shù)據(jù)總線地址總線地址總線暫存器暫
2、存器累加器累加器ALU標(biāo)志寄存器標(biāo)志寄存器指指令令寄寄存存指指令令譯譯碼碼時(shí)序時(shí)序和和控制控制邏輯邏輯通通 用用寄存器組寄存器組地地 址址寄存器組寄存器組地址地址總線總線控制控制數(shù)據(jù)數(shù)據(jù)總線總線控制控制1. 1. 算術(shù)邏輯單元算術(shù)邏輯單元ALUALU計(jì)算機(jī)的運(yùn)算器,負(fù)責(zé)處理器所能進(jìn)行的各計(jì)算機(jī)的運(yùn)算器,負(fù)責(zé)處理器所能進(jìn)行的各種運(yùn)算,主要就是算術(shù)運(yùn)算和邏輯運(yùn)算種運(yùn)算,主要就是算術(shù)運(yùn)算和邏輯運(yùn)算累加器結(jié)構(gòu)的處理器累加器結(jié)構(gòu)的處理器累加器(累加器(AccumulatorAccumulator)提供一個(gè)操作數(shù)提供一個(gè)操作數(shù)保存運(yùn)算結(jié)果保存運(yùn)算結(jié)果標(biāo)志(標(biāo)志(FlagFlag)寄存器)寄存器反映運(yùn)算結(jié)果
3、的輔助信息反映運(yùn)算結(jié)果的輔助信息例如例如: :有無(wú)進(jìn)借位、是否為零、是否為負(fù)等有無(wú)進(jìn)借位、是否為零、是否為負(fù)等也稱為程序狀態(tài)字(也稱為程序狀態(tài)字(PSWPSW)2. 2. 寄存器(寄存器(RegisterRegister)處理器內(nèi)部需要高速存儲(chǔ)單元,用于暫時(shí)存處理器內(nèi)部需要高速存儲(chǔ)單元,用于暫時(shí)存放程序執(zhí)行過(guò)程中的代碼和數(shù)據(jù)放程序執(zhí)行過(guò)程中的代碼和數(shù)據(jù)透明寄存器透明寄存器對(duì)應(yīng)用人員不可見(jiàn)、不能直接控制的寄存器對(duì)應(yīng)用人員不可見(jiàn)、不能直接控制的寄存器可編程(可編程(ProgrammableProgrammable)寄存器)寄存器具有引用名稱、供編程使用具有引用名稱、供編程使用通用寄存器通用寄存器數(shù)
4、量較多、使用頻度較高,具有多種用途數(shù)量較多、使用頻度較高,具有多種用途專用寄存器專用寄存器只用于特定目的只用于特定目的3. 3. 指令處理單元指令處理單元處理器的控制單元,它控制指令的執(zhí)行和信處理器的控制單元,它控制指令的執(zhí)行和信息的傳輸息的傳輸指令執(zhí)行的過(guò)程指令執(zhí)行的過(guò)程取指:指令處理單元將指令從主存取出,并通取指:指令處理單元將指令從主存取出,并通過(guò)總線傳輸?shù)教幚砥鲀?nèi)部的指令寄存器過(guò)總線傳輸?shù)教幚砥鲀?nèi)部的指令寄存器譯碼:指令處理單元通過(guò)指令譯碼電路獲得該譯碼:指令處理單元通過(guò)指令譯碼電路獲得該指令的功能指令的功能執(zhí)行:指令處理單元的時(shí)序和控制邏輯按一定執(zhí)行:指令處理單元的時(shí)序和控制邏輯按一
5、定的時(shí)間順序發(fā)出和接收相應(yīng)信號(hào),完成指令所的時(shí)間順序發(fā)出和接收相應(yīng)信號(hào),完成指令所要求的操作要求的操作2.1.2 80862.1.2 8086的功能結(jié)構(gòu)的功能結(jié)構(gòu)1 2 3 4 5 6內(nèi)部寄存器內(nèi)部寄存器 IP ES SS DS CS輸入輸入/輸出輸出控制電路控制電路外部總線外部總線執(zhí)行部分執(zhí)行部分控制電路控制電路ALU標(biāo)志寄存器標(biāo)志寄存器 AH AL BH BLCH CL DH DL SP BP SI DI通用寄存器通用寄存器地址加法器地址加法器指令隊(duì)列指令隊(duì)列執(zhí)行單元執(zhí)行單元 (EU)總線接口單元總線接口單元 (BIU)16位位20位位16位位1. 1. 總線接口單元和執(zhí)行單元總線接口單元
6、和執(zhí)行單元總線接口單元總線接口單元指令隊(duì)列、指令指針、段寄存器、地址加法器和總線控指令隊(duì)列、指令指針、段寄存器、地址加法器和總線控制邏輯制邏輯管理與系統(tǒng)總線的接口,負(fù)責(zé)對(duì)存儲(chǔ)器和外設(shè)訪問(wèn)管理與系統(tǒng)總線的接口,負(fù)責(zé)對(duì)存儲(chǔ)器和外設(shè)訪問(wèn)執(zhí)行單元執(zhí)行單元ALUALU、通用寄存器、標(biāo)志寄存器和控制電路、通用寄存器、標(biāo)志寄存器和控制電路負(fù)責(zé)指令譯碼、數(shù)據(jù)運(yùn)算和指令執(zhí)行負(fù)責(zé)指令譯碼、數(shù)據(jù)運(yùn)算和指令執(zhí)行指令執(zhí)行的兩個(gè)主要階段:取指和執(zhí)行指令執(zhí)行的兩個(gè)主要階段:取指和執(zhí)行取指:從主存取出指令代碼進(jìn)入指令隊(duì)列取指:從主存取出指令代碼進(jìn)入指令隊(duì)列執(zhí)行:譯碼指令、并發(fā)出有關(guān)控制信號(hào)實(shí)現(xiàn)指執(zhí)行:譯碼指令、并發(fā)出有關(guān)控制
7、信號(hào)實(shí)現(xiàn)指令功能令功能指令演示指令演示返回返回80888088指令執(zhí)行過(guò)程示意指令執(zhí)行過(guò)程示意2. 2. 指令預(yù)?。ㄖ噶铑A(yù)?。≒refetchPrefetch)80868086處理器的指令讀取,實(shí)際上是指令預(yù)取處理器的指令讀取,實(shí)際上是指令預(yù)取80868086處理器維護(hù)著長(zhǎng)度為處理器維護(hù)著長(zhǎng)度為6 6個(gè)字節(jié)的指令隊(duì)列個(gè)字節(jié)的指令隊(duì)列EUEU單元譯碼單元譯碼、執(zhí)行指令,同時(shí)、執(zhí)行指令,同時(shí)BIUBIU單元讀取后續(xù)單元讀取后續(xù)指令指令BIUBIU和和EUEU兩個(gè)單元相互獨(dú)立,可以并行操作兩個(gè)單元相互獨(dú)立,可以并行操作最簡(jiǎn)單的指令流水線技術(shù)最簡(jiǎn)單的指令流水線技術(shù)節(jié)省許多取指時(shí)間,提高了工作效率節(jié)省許
8、多取指時(shí)間,提高了工作效率程序轉(zhuǎn)移將使預(yù)取指令作廢,降低了效率程序轉(zhuǎn)移將使預(yù)取指令作廢,降低了效率2.1.3 803862.1.3 80386的功能結(jié)構(gòu)的功能結(jié)構(gòu)總線接口單元:總線接口單元:為處理器提供同外部的接口為處理器提供同外部的接口指令預(yù)取單元:指令預(yù)取單元:先行讀取指令先行讀取指令指令譯碼單元:指令譯碼單元:從預(yù)取隊(duì)列中取來(lái)指令,譯碼從預(yù)取隊(duì)列中取來(lái)指令,譯碼成微指令代碼成微指令代碼執(zhí)行單元:執(zhí)行單元:ALUALU、乘法器、除法器和移位器等、乘法器、除法器和移位器等 分段單元:分段單元:邏輯地址變換成線性地址邏輯地址變換成線性地址分頁(yè)單元:分頁(yè)單元:將線性地址變換成物理地址將線性地址變
9、換成物理地址示意圖示意圖8038680386的功能結(jié)構(gòu)的功能結(jié)構(gòu)返回返回2.1.4 Pentium2.1.4 Pentium的功能結(jié)構(gòu)的功能結(jié)構(gòu)1. 1. 超標(biāo)量流水線:超標(biāo)量流水線:2 2條指令流水線條指令流水線2. 2. 分離分離CacheCache:指令指令CacheCache和數(shù)據(jù)和數(shù)據(jù)CacheCache3. 3. 動(dòng)態(tài)分支預(yù)測(cè):動(dòng)態(tài)分支預(yù)測(cè):預(yù)測(cè)程序執(zhí)行順序預(yù)測(cè)程序執(zhí)行順序4. 4. 其他其他性能增強(qiáng)的浮點(diǎn)處理單元性能增強(qiáng)的浮點(diǎn)處理單元FPUFPU常用指令固化常用指令固化改進(jìn)復(fù)雜指令的微代碼算法改進(jìn)復(fù)雜指令的微代碼算法節(jié)能特性節(jié)能特性電源電壓:電源電壓:3.3V3.3V示意圖示意圖
10、PentiumPentium的功能結(jié)構(gòu)的功能結(jié)構(gòu)返回返回2.2 2.2 寄存器寄存器寄存器就是暫時(shí)存放數(shù)據(jù)的地方寄存器就是暫時(shí)存放數(shù)據(jù)的地方通過(guò)編寫程序、由處理器執(zhí)行指令控制通過(guò)編寫程序、由處理器執(zhí)行指令控制IA-32IA-32處理器基本執(zhí)行環(huán)境:處理器基本執(zhí)行環(huán)境:8 8個(gè)個(gè)3232位通用寄存器位通用寄存器6 6個(gè)個(gè)1616位段寄存器位段寄存器3232位標(biāo)志寄存器位標(biāo)志寄存器3232位指令指針位指令指針對(duì)應(yīng)用人員(程序員)來(lái)說(shuō),對(duì)應(yīng)用人員(程序員)來(lái)說(shuō),處理器被抽象為可編程寄存器處理器被抽象為可編程寄存器示意圖示意圖IA-32IA-32常用寄存器常用寄存器返回返回2.2.1 2.2.1 通用
11、寄存器通用寄存器處理器最常使用的整數(shù)通用寄存器處理器最常使用的整數(shù)通用寄存器可用于保存整數(shù)數(shù)據(jù)、地址等可用于保存整數(shù)數(shù)據(jù)、地址等 8 8個(gè)個(gè)3232位通用寄存器位通用寄存器EAXEAX,EBXEBX,ECXECX,EDXEDX,ESIESI,EDIEDI,EBPEBP,ESPESP8 8個(gè)個(gè)1616位通用寄存器位通用寄存器AXAX,BXBX,CXCX,DXDX,SISI,DIDI,BPBP,SPSP8 8個(gè)個(gè)8 8位通用寄存器位通用寄存器AHAH,ALAL,BHBH,BLBL,CHCH,CLCL,DHDH,DLDL存取存取16位寄存器,高位寄存器,高16位不受影響位不受影響存取存取8位寄存器,
12、位寄存器,16/32位寄存器其他位不受影響位寄存器其他位不受影響示意圖示意圖通用寄存器的名稱通用寄存器的名稱EAXEAX:累加器:累加器(Accumulator)(Accumulator)EBXEBX:基址寄存器:基址寄存器(Base)(Base)ECXECX:計(jì)數(shù)器:計(jì)數(shù)器(Counter)(Counter)EDXEDX:數(shù)據(jù)寄存器:數(shù)據(jù)寄存器(Data)(Data)ESIESI:源變址寄存器:源變址寄存器(Source Index)(Source Index)EDIEDI:目的變址寄存器:目的變址寄存器(Destination Index)(Destination Index)EBPEBP
13、:基址指針:基址指針(Base Pointer)(Base Pointer)ESPESP:堆棧指針:堆棧指針(Stack Pointer)(Stack Pointer)示意圖示意圖2.2.2 2.2.2 標(biāo)志寄存器標(biāo)志寄存器標(biāo)志(標(biāo)志(FlagFlag)反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式反映指令執(zhí)行結(jié)果或控制指令執(zhí)行形式用一個(gè)或多個(gè)二進(jìn)制位表示一種標(biāo)志用一個(gè)或多個(gè)二進(jìn)制位表示一種標(biāo)志0 0或或1 1的不同組合表達(dá)標(biāo)志的不同狀態(tài)的不同組合表達(dá)標(biāo)志的不同狀態(tài)80868086支持支持1616位標(biāo)志寄存器位標(biāo)志寄存器FLAGSFLAGSIA-32IA-32處理器形成處理器形成3232位位EFLAGSE
14、FLAGS標(biāo)志寄存器標(biāo)志寄存器狀態(tài)標(biāo)志:記錄指令執(zhí)行結(jié)果的輔助信息狀態(tài)標(biāo)志:記錄指令執(zhí)行結(jié)果的輔助信息控制標(biāo)志:方向標(biāo)志控制標(biāo)志:方向標(biāo)志DFDF,僅用于串操作指令,僅用于串操作指令系統(tǒng)標(biāo)志:控制操作系統(tǒng)或核心管理程序的操系統(tǒng)標(biāo)志:控制操作系統(tǒng)或核心管理程序的操作方式作方式示意圖示意圖標(biāo)志寄存器標(biāo)志寄存器EFLAGSEFLAGS返回返回1. 1. 狀態(tài)標(biāo)志狀態(tài)標(biāo)志最基本的標(biāo)志,有最基本的標(biāo)志,有6 6個(gè)個(gè)用來(lái)記錄指令執(zhí)行結(jié)果的輔助信息用來(lái)記錄指令執(zhí)行結(jié)果的輔助信息加減運(yùn)算和邏輯運(yùn)算指令是主要設(shè)置它們加減運(yùn)算和邏輯運(yùn)算指令是主要設(shè)置它們其他有些指令的執(zhí)行也會(huì)相應(yīng)地設(shè)置它們其他有些指令的執(zhí)行也會(huì)相
15、應(yīng)地設(shè)置它們處理器主要使用其中處理器主要使用其中5 5個(gè)構(gòu)成各種條件,分個(gè)構(gòu)成各種條件,分支指令判斷這些條件實(shí)現(xiàn)程序分支支指令判斷這些條件實(shí)現(xiàn)程序分支 OF11DF10IF9TF8SF7ZF605AF403PF211CF0進(jìn)位標(biāo)志進(jìn)位標(biāo)志CFCF(Carry FlagCarry Flag)當(dāng)加減運(yùn)算結(jié)果的最高有效位當(dāng)加減運(yùn)算結(jié)果的最高有效位有進(jìn)位有進(jìn)位(加法)(加法)或或借位借位(減法)時(shí),進(jìn)位標(biāo)志置(減法)時(shí),進(jìn)位標(biāo)志置1 1,即,即CFCF1 1;否則否則CFCF0 0針對(duì)無(wú)符號(hào)整數(shù),判斷加減結(jié)果是否超出表針對(duì)無(wú)符號(hào)整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍達(dá)范圍N N個(gè)二進(jìn)制位表達(dá)無(wú)符號(hào)整數(shù)的范
16、圍:個(gè)二進(jìn)制位表達(dá)無(wú)符號(hào)整數(shù)的范圍:0 02 2N N-1-18 8位:位:0 02552551616位:位:0 065535655353232位:位:0 02 232321 1進(jìn)位標(biāo)志進(jìn)位標(biāo)志CFCF:舉例:舉例8 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100011101001111100011111001011011010110110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):3A3A7C7CB6B6轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):5858124124182182沒(méi)有產(chǎn)生進(jìn)位:沒(méi)有產(chǎn)生進(jìn)位:CFCF0 08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:1010101010101010011111000111
17、1100 1 10010011000100110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):AAAA7C7C 1 1B6B6轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):1701701241242942942562563838產(chǎn)生進(jìn)位:產(chǎn)生進(jìn)位:CFCF1 1溢出標(biāo)志溢出標(biāo)志OFOF(Overflow FlagOverflow Flag)有符號(hào)數(shù)有符號(hào)數(shù)加減結(jié)果加減結(jié)果有溢出有溢出,則,則OFOF1 1;否則;否則OFOF0 0針對(duì)有符號(hào)整數(shù),判斷加減結(jié)果是否超出表針對(duì)有符號(hào)整數(shù),判斷加減結(jié)果是否超出表達(dá)范圍達(dá)范圍N N個(gè)二進(jìn)制位表達(dá)有符號(hào)整數(shù)的范圍:個(gè)二進(jìn)制位表達(dá)有符號(hào)整數(shù)的范圍:2 2N N1 12 2N N1 1-1
18、-18 8位:位:1281281271271616位:位:327683276832767327673232位:位:2 231312 231311 1溢出標(biāo)志溢出標(biāo)志OFOF:舉例:舉例8 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100011101001111100011111001011011010110110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):3A3A7C7CB6B6轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):5858124124182182超出范圍:超出范圍:OFOF1 18 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10101010101010100111110001111100 1 100100110001
19、00110十六進(jìn)制表達(dá):十六進(jìn)制表達(dá):AAAA7C7C 1 1B6B6轉(zhuǎn)換成十進(jìn)制數(shù):轉(zhuǎn)換成十進(jìn)制數(shù):-86-861241243838沒(méi)有超出范圍:沒(méi)有超出范圍:OFOF0 0進(jìn)位和溢出的區(qū)別進(jìn)位和溢出的區(qū)別進(jìn)位標(biāo)志反映無(wú)符號(hào)整數(shù)運(yùn)算結(jié)果是否超出范圍進(jìn)位標(biāo)志反映無(wú)符號(hào)整數(shù)運(yùn)算結(jié)果是否超出范圍有進(jìn)位,加上進(jìn)位或借位后運(yùn)算結(jié)果仍然正確有進(jìn)位,加上進(jìn)位或借位后運(yùn)算結(jié)果仍然正確溢出標(biāo)志反映有符號(hào)整數(shù)運(yùn)算結(jié)果是否超出范圍溢出標(biāo)志反映有符號(hào)整數(shù)運(yùn)算結(jié)果是否超出范圍有溢出,運(yùn)算結(jié)果已經(jīng)不正確有溢出,運(yùn)算結(jié)果已經(jīng)不正確處理器按照無(wú)符號(hào)整數(shù)求得結(jié)果處理器按照無(wú)符號(hào)整數(shù)求得結(jié)果設(shè)置進(jìn)位標(biāo)志設(shè)置進(jìn)位標(biāo)志CFCF設(shè)置
20、溢出標(biāo)志設(shè)置溢出標(biāo)志OFOF程序員決定程序員決定操作數(shù)是無(wú)符號(hào)數(shù),關(guān)心進(jìn)位操作數(shù)是無(wú)符號(hào)數(shù),關(guān)心進(jìn)位操作數(shù)是有符號(hào)數(shù),注意溢出操作數(shù)是有符號(hào)數(shù),注意溢出溢出標(biāo)志的判斷溢出標(biāo)志的判斷處理器硬件判斷規(guī)則處理器硬件判斷規(guī)則最高位和次高位同時(shí)有進(jìn)位或同時(shí)無(wú)進(jìn)位,無(wú)最高位和次高位同時(shí)有進(jìn)位或同時(shí)無(wú)進(jìn)位,無(wú)溢出;最高位和次高位進(jìn)位狀態(tài)不同,有溢出溢出;最高位和次高位進(jìn)位狀態(tài)不同,有溢出人工判斷的簡(jiǎn)單規(guī)則人工判斷的簡(jiǎn)單規(guī)則只有當(dāng)兩個(gè)相同符號(hào)數(shù)相加(含兩個(gè)不同符號(hào)只有當(dāng)兩個(gè)相同符號(hào)數(shù)相加(含兩個(gè)不同符號(hào)數(shù)相減),而運(yùn)算結(jié)果的符號(hào)與原數(shù)據(jù)符號(hào)相數(shù)相減),而運(yùn)算結(jié)果的符號(hào)與原數(shù)據(jù)符號(hào)相反時(shí),產(chǎn)生溢出;其他情況下,
21、不會(huì)產(chǎn)生溢出反時(shí),產(chǎn)生溢出;其他情況下,不會(huì)產(chǎn)生溢出正數(shù)正數(shù)正數(shù)正數(shù)負(fù)數(shù)負(fù)數(shù)最高位最高位次高位次高位零標(biāo)志零標(biāo)志ZFZF(Zero FlagZero Flag)運(yùn)算運(yùn)算結(jié)果為結(jié)果為0 0,則,則ZFZF1 1,否則,否則ZFZF0 0結(jié)果是結(jié)果是0,ZF標(biāo)志不是標(biāo)志不是0 !8 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100011101001111100011111001011011010110110結(jié)果不是結(jié)果不是0 0,ZFZF0 08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10000100100001000111110001111100 1 10000000000000000結(jié)果是結(jié)果
22、是0 0,ZFZF1 1結(jié)果結(jié)果進(jìn)位進(jìn)位符號(hào)標(biāo)志符號(hào)標(biāo)志SFSF(Sign FlagSign Flag)運(yùn)算運(yùn)算結(jié)果最高位為結(jié)果最高位為1 1,則,則SFSF1 1;否則;否則SFSF0 08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100011101001111100011111001 101101100110110最高位最高位1 1:SFSF1 18 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10000100100001000111110001111100 1 1 0 000000000000000最高位最高位0 0:SFSF0 0結(jié)果結(jié)果進(jìn)位進(jìn)位最高位符號(hào)位最高位符號(hào)位SF奇偶標(biāo)志奇偶標(biāo)志
23、PFPF(Parity FlagParity Flag)當(dāng)運(yùn)算結(jié)果最低字節(jié)中當(dāng)運(yùn)算結(jié)果最低字節(jié)中“1”1”的個(gè)數(shù)為零或的個(gè)數(shù)為零或偶數(shù)偶數(shù)時(shí),時(shí),PFPF1 1;否則;否則PFPF0 08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:001110100011101001111100011111001011011010110110“1”“1”的個(gè)數(shù)為的個(gè)數(shù)為5 5個(gè):個(gè):PFPF0 08 8位二進(jìn)制數(shù)相加:位二進(jìn)制數(shù)相加:10000100100001000111110001111100 1 10000000000000000“1”“1”的個(gè)數(shù)為的個(gè)數(shù)為0 0個(gè):個(gè):PFPF1 1結(jié)果結(jié)果進(jìn)位進(jìn)位僅最低僅最
24、低8位位“1”的個(gè)的個(gè)數(shù)數(shù)2. 2. 控制標(biāo)志控制標(biāo)志方向標(biāo)志方向標(biāo)志DFDF(Direction FlagDirection Flag)僅用于串操作指令,控制地址的變化方向僅用于串操作指令,控制地址的變化方向設(shè)置設(shè)置DFDF0 0,每次串操作后的存儲(chǔ)器地址就自動(dòng),每次串操作后的存儲(chǔ)器地址就自動(dòng)增加,即從低地址向高地址處理數(shù)據(jù)串增加,即從低地址向高地址處理數(shù)據(jù)串設(shè)置設(shè)置DFDF1 1,每次串操作后的存儲(chǔ)器地址就自動(dòng),每次串操作后的存儲(chǔ)器地址就自動(dòng)減少,即從高地址向低地址處理數(shù)據(jù)串減少,即從高地址向低地址處理數(shù)據(jù)串執(zhí)行執(zhí)行CLDCLD指令設(shè)置指令設(shè)置DFDF0 0執(zhí)行執(zhí)行STDSTD指令設(shè)置指令
25、設(shè)置DFDF1 1 3. 3. 系統(tǒng)標(biāo)志系統(tǒng)標(biāo)志中斷允許標(biāo)志中斷允許標(biāo)志IFIF(Interrupt-enable FlagInterrupt-enable Flag)陷阱標(biāo)志陷阱標(biāo)志TFTF(Trap FlagTrap Flag),單步標(biāo)志,單步標(biāo)志I/OI/O特權(quán)層標(biāo)志特權(quán)層標(biāo)志IOPLIOPL(I/O Privilege LevelI/O Privilege Level)任務(wù)嵌套標(biāo)志任務(wù)嵌套標(biāo)志NTNT虛擬虛擬80868086方式標(biāo)志方式標(biāo)志VMVM恢復(fù)標(biāo)志恢復(fù)標(biāo)志RFRF對(duì)齊檢測(cè)標(biāo)志對(duì)齊檢測(cè)標(biāo)志ACACCPUCPU識(shí)別標(biāo)志識(shí)別標(biāo)志IDID(Identification FlagIden
26、tification Flag)虛擬中斷標(biāo)志虛擬中斷標(biāo)志VIFVIF虛擬中斷掛起標(biāo)志虛擬中斷掛起標(biāo)志VIPVIP2.2.3 2.2.3 專用寄存器專用寄存器專用寄存器往往只用于特定指令或場(chǎng)合專用寄存器往往只用于特定指令或場(chǎng)合1. 1. 指令指針寄存器指令指針寄存器EIPEIP保存將要執(zhí)行的指令在主存的地址保存將要執(zhí)行的指令在主存的地址2. 2. 段寄存器段寄存器段是安排相關(guān)代碼或數(shù)據(jù)的主存區(qū)域段是安排相關(guān)代碼或數(shù)據(jù)的主存區(qū)域段寄存器表明段在主存中的位置段寄存器表明段在主存中的位置6 6個(gè)個(gè)1616位段寄存器:位段寄存器:CS DS SS ES FS GSCS DS SS ES FS GS3.
27、3. 其他寄存器其他寄存器浮點(diǎn)寄存器、多媒體寄存器浮點(diǎn)寄存器、多媒體寄存器系統(tǒng)專用寄存器系統(tǒng)專用寄存器 2.3 2.3 存儲(chǔ)器組織存儲(chǔ)器組織物理存儲(chǔ)器以字節(jié)為基本存儲(chǔ)單位物理存儲(chǔ)器以字節(jié)為基本存儲(chǔ)單位每個(gè)存儲(chǔ)單元被分配一個(gè)唯一的地址每個(gè)存儲(chǔ)單元被分配一個(gè)唯一的地址這個(gè)地址就是物理地址這個(gè)地址就是物理地址物理地址空間從物理地址空間從0 0開(kāi)始順序編排,直到處理器支持開(kāi)始順序編排,直到處理器支持的最大存儲(chǔ)單元的最大存儲(chǔ)單元80868086處理器支持處理器支持1MB1MB存儲(chǔ)器:存儲(chǔ)器:00000H00000HFFFFFHFFFFFHIA-32IA-32處理器支持處理器支持4GB4GB存儲(chǔ)器:存儲(chǔ)器
28、:00000000H00000000HFFFFFFFFHFFFFFFFFH操作系統(tǒng)利用存儲(chǔ)管理單元進(jìn)行存儲(chǔ)管理,程序操作系統(tǒng)利用存儲(chǔ)管理單元進(jìn)行存儲(chǔ)管理,程序并不直接尋址物理存儲(chǔ)器并不直接尋址物理存儲(chǔ)器IA-32IA-32處理器提供處理器提供3 3種存儲(chǔ)模型,用于程序訪問(wèn)存種存儲(chǔ)模型,用于程序訪問(wèn)存儲(chǔ)器儲(chǔ)器2.3.1 2.3.1 存儲(chǔ)模型存儲(chǔ)模型1. 1. 平展存儲(chǔ)模型(平展存儲(chǔ)模型(Flat memory modelFlat memory model)存儲(chǔ)器是一個(gè)連續(xù)的地址空間線性地址空間存儲(chǔ)器是一個(gè)連續(xù)的地址空間線性地址空間IA-32IA-32處理器支持處理器支持4GB4GB容量線性地址空
29、間容量線性地址空間2. 2. 段式存儲(chǔ)模型段式存儲(chǔ)模型存儲(chǔ)器由一組獨(dú)立的地址空間段(存儲(chǔ)器由一組獨(dú)立的地址空間段(SegmentSegment)每個(gè)段都可以達(dá)到每個(gè)段都可以達(dá)到4GB4GB容量容量在處理器內(nèi)部,所有的段都被映射到線性地址空間在處理器內(nèi)部,所有的段都被映射到線性地址空間3. 3. 實(shí)地址存儲(chǔ)模型實(shí)地址存儲(chǔ)模型80868086處理器的存儲(chǔ)模型處理器的存儲(chǔ)模型段式存儲(chǔ)模型的特例段式存儲(chǔ)模型的特例線性地址空間最大為線性地址空間最大為1MB1MB容量,段最大為容量,段最大為64KB64KB2.3.2 2.3.2 工作方式工作方式1. 1. 保護(hù)方式(保護(hù)方式(Protected mode
30、Protected mode)IA-32IA-32處理器固有的工作狀態(tài)處理器固有的工作狀態(tài)具有強(qiáng)大的段頁(yè)式存儲(chǔ)管理和特權(quán)與保護(hù)能力具有強(qiáng)大的段頁(yè)式存儲(chǔ)管理和特權(quán)與保護(hù)能力使用全部使用全部3232條地址總線,可尋址條地址總線,可尋址4GB4GB物理存儲(chǔ)器物理存儲(chǔ)器使用平展或段式存儲(chǔ)模型使用平展或段式存儲(chǔ)模型利用虛擬利用虛擬80868086方式支持實(shí)地址方式支持實(shí)地址80868086軟件軟件2. 2. 實(shí)地址方式(實(shí)地址方式(Real-address modeReal-address mode)可以進(jìn)行可以進(jìn)行3232位處理的快速位處理的快速80868086只能尋址只能尋址1MB1MB物理存儲(chǔ)器空
31、間,每個(gè)段不超過(guò)物理存儲(chǔ)器空間,每個(gè)段不超過(guò)64KB64KB可以使用可以使用3232位寄存器、位寄存器、3232位操作數(shù)和位操作數(shù)和3232位尋址方式位尋址方式只能支持實(shí)地址存儲(chǔ)模型只能支持實(shí)地址存儲(chǔ)模型3. 3. 系統(tǒng)管理方式系統(tǒng)管理方式實(shí)現(xiàn)供節(jié)能和系統(tǒng)安全管理實(shí)現(xiàn)供節(jié)能和系統(tǒng)安全管理2.3.3 2.3.3 邏輯地址(邏輯地址(Logical AddressLogical Address)在處理器內(nèi)部、程序員編程時(shí)采用的地址在處理器內(nèi)部、程序員編程時(shí)采用的地址邏輯地址邏輯地址段基地址段基地址偏移地址偏移地址段基地址段基地址在主存中的起始地址在主存中的起始地址偏移地址偏移地址距離段基地址的位移
32、量距離段基地址的位移量某個(gè)存儲(chǔ)單元可以有多個(gè)邏輯地址,但只有某個(gè)存儲(chǔ)單元可以有多個(gè)邏輯地址,但只有一個(gè)唯一的物理地址一個(gè)唯一的物理地址示意圖示意圖編程使用編程使用處理器轉(zhuǎn)換處理器轉(zhuǎn)換地址總線輸出地址總線輸出邏輯地址與物理地址邏輯地址與物理地址返回返回1081082082083083081061062062063063061071072072073073071091092092093093091101101051051041041031031021021011012102102052052042042032032022022012013103103053053043043033033023023
33、01301080818182828060616162626070717172727090919192929101005050404030302020101202015151414131312121111303025252424232322222121邏輯地址相對(duì)地址:邏輯地址相對(duì)地址:205(2層層05號(hào)房間)號(hào)房間)物理地址絕對(duì)地址:物理地址絕對(duì)地址:15(第(第15號(hào)房間)號(hào)房間)1. 1. 基本段基本段編寫應(yīng)用程序時(shí),涉及三類基本段:編寫應(yīng)用程序時(shí),涉及三類基本段:代碼段代碼段(Code SegmentCode Segment):存放指令代碼):存放指令代碼程序的指令代碼必須安排在代碼段
34、程序的指令代碼必須安排在代碼段數(shù)據(jù)段數(shù)據(jù)段(Data SegmentData Segment):存放數(shù)據(jù)):存放數(shù)據(jù)程序的數(shù)據(jù)默認(rèn)存放在數(shù)據(jù)段程序的數(shù)據(jù)默認(rèn)存放在數(shù)據(jù)段數(shù)據(jù)也可放在其他段數(shù)據(jù)也可放在其他段堆棧段堆棧段(Stack SegmentStack Segment):堆棧區(qū)域):堆棧區(qū)域程序使用的堆棧一定在堆棧段程序使用的堆棧一定在堆棧段基本段的邏輯地址基本段的邏輯地址代碼段代碼段(Code SegmentCode Segment)段基地址:代碼段寄存器段基地址:代碼段寄存器CSCS指示指示偏移地址:指令指針寄存器偏移地址:指令指針寄存器EIPEIP保存保存數(shù)據(jù)段數(shù)據(jù)段(Data Seg
35、mentData Segment)段基地址:數(shù)據(jù)段寄存器段基地址:數(shù)據(jù)段寄存器DSDS指示指示有時(shí)也用附加段寄存器有時(shí)也用附加段寄存器ESES,段寄存器段寄存器FSFS和和GSGS指示指示偏移地址:各種存儲(chǔ)器尋址方式計(jì)算出來(lái)偏移地址:各種存儲(chǔ)器尋址方式計(jì)算出來(lái)堆棧段堆棧段(Stack SegmentStack Segment)段基地址:堆棧段寄存器段基地址:堆棧段寄存器SSSS指示指示偏移地址:堆棧指針寄存器偏移地址:堆棧指針寄存器ESPESP保存保存2. 2. 段選擇器段選擇器1616位段寄存器保存位段寄存器保存1616位段選擇器位段選擇器段選擇器指向段選擇器指向6464位段描述符(位段描述
36、符(DescriptorDescriptor)段描述符包括段基地址段描述符包括段基地址平展存儲(chǔ)模型:指向地址平展存儲(chǔ)模型:指向地址0 0位置位置段式存儲(chǔ)模型:指向線性地址空間不同的段段式存儲(chǔ)模型:指向線性地址空間不同的段實(shí)地址存儲(chǔ)模型:保存段基地址的高實(shí)地址存儲(chǔ)模型:保存段基地址的高1616位位1616位段寄存器位段寄存器6464位段描述符位段描述符主存儲(chǔ)器空間主存儲(chǔ)器空間3. 3. 保護(hù)方式的地址轉(zhuǎn)換保護(hù)方式的地址轉(zhuǎn)換平展存儲(chǔ)模型平展存儲(chǔ)模型段基地址為段基地址為0 0,偏移地址等于線性地址,偏移地址等于線性地址段式存儲(chǔ)管理段式存儲(chǔ)管理段基地址和偏移地址都是段基地址和偏移地址都是3232位位段
37、基地址加上偏移地址形成線性地址段基地址加上偏移地址形成線性地址線性地址映射到物理地址線性地址映射到物理地址不使用分頁(yè)機(jī)制:線性地址與物理地址對(duì)應(yīng)不使用分頁(yè)機(jī)制:線性地址與物理地址對(duì)應(yīng)使用分頁(yè)機(jī)制:硬件支持下由操作系統(tǒng)或核心使用分頁(yè)機(jī)制:硬件支持下由操作系統(tǒng)或核心程序管理,構(gòu)成虛擬存儲(chǔ)器,轉(zhuǎn)換成物理地址程序管理,構(gòu)成虛擬存儲(chǔ)器,轉(zhuǎn)換成物理地址應(yīng)用程序看到的都是線性地址空間應(yīng)用程序看到的都是線性地址空間4. 4. 實(shí)地址方式的地址轉(zhuǎn)換實(shí)地址方式的地址轉(zhuǎn)換主存空間主存空間1MB1MB(2 22020 B B):):00000H00000HFFFFFHFFFFFH程序設(shè)計(jì)時(shí)分段管理,但有兩個(gè)限制:程序
38、設(shè)計(jì)時(shí)分段管理,但有兩個(gè)限制:每個(gè)段最大為每個(gè)段最大為64KB64KB段只能開(kāi)始于低段只能開(kāi)始于低4 4位地址全為位地址全為0 0的物理地址處的物理地址處邏輯地址段地址邏輯地址段地址偏移地址偏移地址1616位段寄存器保存位段寄存器保存2020位段起始地址的高位段起始地址的高1616位位偏移地址也用偏移地址也用1616位數(shù)據(jù)表示位數(shù)據(jù)表示物理地址物理地址段地址段地址1616偏移地址偏移地址左移二進(jìn)制左移二進(jìn)制4位(十六進(jìn)制位(十六進(jìn)制1位)位)示意圖示意圖實(shí)地址存儲(chǔ)模型的邏輯地址和物理地址實(shí)地址存儲(chǔ)模型的邏輯地址和物理地址返回返回2.4 2.4 匯編語(yǔ)言基礎(chǔ)匯編語(yǔ)言基礎(chǔ)匯編語(yǔ)言以助記符形式表示計(jì)
39、算機(jī)指令匯編語(yǔ)言以助記符形式表示計(jì)算機(jī)指令助記符(助記符(mnemonicmnemonic)是便于人們記憶、并能描)是便于人們記憶、并能描述指令功能和指令操作數(shù)的符號(hào)述指令功能和指令操作數(shù)的符號(hào)助記符是表明指令功能的英語(yǔ)單詞或其縮寫助記符是表明指令功能的英語(yǔ)單詞或其縮寫匯編格式指令以及使用它們編寫程序的規(guī)則匯編格式指令以及使用它們編寫程序的規(guī)則就形成匯編語(yǔ)言(就形成匯編語(yǔ)言(Assembly LanguageAssembly Language)匯編語(yǔ)言程序:用匯編語(yǔ)言書寫的程序匯編語(yǔ)言程序:用匯編語(yǔ)言書寫的程序匯編程序:將匯編語(yǔ)言程序匯編程序:將匯編語(yǔ)言程序“匯編匯編”成機(jī)器成機(jī)器代碼目標(biāo)模塊
40、的程序代碼目標(biāo)模塊的程序 匯編語(yǔ)言程序與匯編程序是兩個(gè)概念匯編語(yǔ)言程序與匯編程序是兩個(gè)概念2.4.1 2.4.1 指令代碼格式(指令代碼格式(Instruction formatInstruction format)IA-32IA-32處理器采用可變長(zhǎng)度指令格式處理器采用可變長(zhǎng)度指令格式操作碼操作碼可選的指令前綴(用于擴(kuò)展指令功能)可選的指令前綴(用于擴(kuò)展指令功能)1 13 3字節(jié)的主要操作碼字節(jié)的主要操作碼操作數(shù)操作數(shù)可選的尋址方式域(包括可選的尋址方式域(包括ModR/MModR/M和和SIBSIB字段)字段)可選的位移量可選的位移量可選的立即數(shù)可選的立即數(shù)指令代碼示例指令代碼示例數(shù)據(jù)傳送
41、指令數(shù)據(jù)傳送指令MOVMOV(取自(取自MoveMove)將數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置將數(shù)據(jù)從一個(gè)位置傳送到另一個(gè)位置類似高級(jí)語(yǔ)言的賦值語(yǔ)句類似高級(jí)語(yǔ)言的賦值語(yǔ)句mov dest,srcmov dest,src; ;源操作數(shù)源操作數(shù)srcsrc:被傳送的數(shù)據(jù)或數(shù)據(jù)所在的位置:被傳送的數(shù)據(jù)或數(shù)據(jù)所在的位置; ;目的操作數(shù)目的操作數(shù)destdest:數(shù)據(jù)將要傳送到的位置:數(shù)據(jù)將要傳送到的位置mov eax,ebx; 機(jī)器代碼:機(jī)器代碼:8B C3mov eax,ebx; 機(jī)器代碼:機(jī)器代碼:8B 03mov eax,ebx+esi*4+80h; 機(jī)器代碼:機(jī)器代碼:8B 84 B3 80 00
42、 00 00指令功能指令功能傳送指令傳送指令MOVMOV的功能的功能返回返回源操作數(shù)源操作數(shù) src目的操作數(shù)目的操作數(shù) dest30H30H被傳送的數(shù)據(jù)被傳送的數(shù)據(jù)2.4.2 2.4.2 語(yǔ)句格式語(yǔ)句格式程序由語(yǔ)句組成程序由語(yǔ)句組成一個(gè)語(yǔ)句常占一行(一個(gè)語(yǔ)句常占一行(MASMMASM有續(xù)行符有續(xù)行符“”)一個(gè)語(yǔ)句不超過(guò)一個(gè)語(yǔ)句不超過(guò)132132個(gè)字符,個(gè)字符,4 4個(gè)部分個(gè)部分執(zhí)行性語(yǔ)句執(zhí)行性語(yǔ)句:表達(dá)處理器指令(硬指令):表達(dá)處理器指令(硬指令)標(biāo)號(hào)標(biāo)號(hào): : 硬指令助記符硬指令助記符 操作數(shù)操作數(shù), ,操作數(shù)操作數(shù) ; ;注釋注釋說(shuō)明性語(yǔ)句說(shuō)明性語(yǔ)句:表達(dá)偽指令,控制匯編方式:表達(dá)偽指令
43、,控制匯編方式名字名字 偽指令助記符偽指令助記符 參數(shù)參數(shù), ,參數(shù)參數(shù), ;, ;注釋注釋這是這是MASM語(yǔ)法,但具有一般性語(yǔ)法,但具有一般性1. 1. 標(biāo)號(hào)與名字標(biāo)號(hào)與名字標(biāo)號(hào)標(biāo)號(hào):執(zhí)行性語(yǔ)句中:執(zhí)行性語(yǔ)句中冒號(hào)分隔冒號(hào)分隔表示處理器指令在主存中的邏輯地址表示處理器指令在主存中的邏輯地址指示分支、循環(huán)等程序的目的地址指示分支、循環(huán)等程序的目的地址名字名字:說(shuō)明性語(yǔ)句中:說(shuō)明性語(yǔ)句中空格或制表符分隔空格或制表符分隔變量名、段名、子程序名等變量名、段名、子程序名等反映變量、段和子程序等的邏輯地址反映變量、段和子程序等的邏輯地址標(biāo)號(hào)和名字是用戶自定義的標(biāo)識(shí)符標(biāo)號(hào)和名字是用戶自定義的標(biāo)識(shí)符標(biāo)識(shí)符(
44、標(biāo)識(shí)符(IdentifierIdentifier)最多由最多由3131個(gè)字母、數(shù)字及規(guī)定的特殊符號(hào)(如個(gè)字母、數(shù)字及規(guī)定的特殊符號(hào)(如 _ _、$ $、? ?、 )組成,)組成,不能以數(shù)字開(kāi)頭不能以數(shù)字開(kāi)頭一個(gè)源程序中,用戶定義的每個(gè)標(biāo)識(shí)符一個(gè)源程序中,用戶定義的每個(gè)標(biāo)識(shí)符必須唯一必須唯一不能是不能是匯編程序采用的匯編程序采用的保留字保留字保留字(保留字(Reserved WordReserved Word)是編程語(yǔ)言本身需要使)是編程語(yǔ)言本身需要使用的各種具有特定含義的標(biāo)識(shí)符、也稱為關(guān)鍵字用的各種具有特定含義的標(biāo)識(shí)符、也稱為關(guān)鍵字硬指令助記符:硬指令助記符: MOVMOV偽指令助記符:偽指令
45、助記符: BYTEBYTE操作符:操作符: OFFSETOFFSET寄存器名:寄存器名: EAXEAX取名原則類似高級(jí)語(yǔ)言取名原則類似高級(jí)語(yǔ)言默認(rèn)不區(qū)別大小寫字母默認(rèn)不區(qū)別大小寫字母 “ OPTION CASEMAP:NONE ” 偽指令偽指令告知告知MASM 區(qū)別用戶定義標(biāo)識(shí)符的大小寫區(qū)別用戶定義標(biāo)識(shí)符的大小寫2. 2. 助記符助記符助記符:幫助記憶指令功能的符號(hào)助記符:幫助記憶指令功能的符號(hào)硬指令助記符對(duì)應(yīng)處理器指令,表示一種處理硬指令助記符對(duì)應(yīng)處理器指令,表示一種處理器操作器操作偽指令助記符表達(dá)一個(gè)匯編命令偽指令助記符表達(dá)一個(gè)匯編命令處理器指令示例:傳送指令處理器指令示例:傳送指令 MO
46、VMOV偽指令示例:字節(jié)變量定義偽指令示例:字節(jié)變量定義助記符:助記符:BYTEBYTE (或(或DBDB)功能:在主存中占用若干的存儲(chǔ)空間,用于保功能:在主存中占用若干的存儲(chǔ)空間,用于保存變量值,該變量以字節(jié)為單位存取存變量值,該變量以字節(jié)為單位存取3. 3. 操作數(shù)和參數(shù)操作數(shù)和參數(shù)處理器指令的操作數(shù):表示參與操作的對(duì)象處理器指令的操作數(shù):表示參與操作的對(duì)象具體的常量具體的常量保存在寄存器的數(shù)據(jù)保存在寄存器的數(shù)據(jù)保存在存儲(chǔ)器中的變量保存在存儲(chǔ)器中的變量逗號(hào)前常是目的操作數(shù),逗號(hào)后常是源操作數(shù)逗號(hào)前常是目的操作數(shù),逗號(hào)后常是源操作數(shù)偽指令的參數(shù):偽指令的參數(shù):常量、變量名、表達(dá)式等常量、變量
47、名、表達(dá)式等可以有多個(gè),參數(shù)之間用逗號(hào)分隔可以有多個(gè),參數(shù)之間用逗號(hào)分隔4. 4. 注釋注釋語(yǔ)句中分號(hào)后的內(nèi)容是注釋語(yǔ)句中分號(hào)后的內(nèi)容是注釋對(duì)指令或程序進(jìn)行說(shuō)明對(duì)指令或程序進(jìn)行說(shuō)明匯編程序不對(duì)它們做任何處理匯編程序不對(duì)它們做任何處理注釋利于閱讀,應(yīng)養(yǎng)成書寫注釋的好習(xí)慣注釋利于閱讀,應(yīng)養(yǎng)成書寫注釋的好習(xí)慣語(yǔ)句的語(yǔ)句的4 4個(gè)組成部分要用分隔符分開(kāi)個(gè)組成部分要用分隔符分開(kāi)標(biāo)號(hào)后的標(biāo)號(hào)后的冒號(hào)冒號(hào)注釋前的注釋前的分號(hào)分號(hào)操作數(shù)間和參數(shù)間的操作數(shù)間和參數(shù)間的逗號(hào)逗號(hào)分隔其他部分采用一個(gè)或多個(gè)分隔其他部分采用一個(gè)或多個(gè)空格空格或或制表符制表符注釋使用英文或中文均可注釋使用英文或中文均可分隔符都是英文標(biāo)點(diǎn)
48、分隔符都是英文標(biāo)點(diǎn)良好的語(yǔ)句格式有利于編程良好的語(yǔ)句格式有利于編程2.4.3 2.4.3 源程序框架源程序框架; eg0000.asm in Windows Console; eg0000.asm in Windows Consoleinclude io32.incinclude io32.inc ; ; 包含包含3232位輸入輸出文件位輸入輸出文件.data.data; ; 定義數(shù)據(jù)段定義數(shù)據(jù)段; ; 數(shù)據(jù)定義(數(shù)據(jù)待填)數(shù)據(jù)定義(數(shù)據(jù)待填).code.code; ; 定義代碼段定義代碼段start:start:; ; 程序執(zhí)行起始位置程序執(zhí)行起始位置; ; 主程序(指令待填)主程序(指令待
49、填)exit 0exit 0; ; 程序正常執(zhí)行結(jié)束程序正常執(zhí)行結(jié)束; ; 子程序(指令待填)子程序(指令待填)end startend start ; ; 匯編結(jié)束匯編結(jié)束1. 1. 包含偽指令包含偽指令I(lǐng)NCLUDEINCLUDE將常用的常量定義、過(guò)程說(shuō)明、共享的子程將常用的常量定義、過(guò)程說(shuō)明、共享的子程序庫(kù)等內(nèi)容進(jìn)行聲明(相當(dāng)于序庫(kù)等內(nèi)容進(jìn)行聲明(相當(dāng)于C C和和C+C+語(yǔ)言中,語(yǔ)言中,包含頭文件的作用)包含頭文件的作用)IO32.INCIO32.INC是配合本書的包含文件是配合本書的包含文件前前3 3個(gè)語(yǔ)句:個(gè)語(yǔ)句:.686.686; 32; 32位指令位指令.model flat,s
50、tdcall.model flat,stdcall; ; 選擇平展模型,標(biāo)準(zhǔn)調(diào)用規(guī)范選擇平展模型,標(biāo)準(zhǔn)調(diào)用規(guī)范 option casemap:noneoption casemap:none; ;告知告知MASMMASM區(qū)分用戶定義標(biāo)識(shí)符的大小寫區(qū)分用戶定義標(biāo)識(shí)符的大小寫2. 2. 段的簡(jiǎn)化定義段的簡(jiǎn)化定義數(shù)據(jù)段定義偽指令數(shù)據(jù)段定義偽指令.DATA.DATA創(chuàng)建一個(gè)數(shù)據(jù)段創(chuàng)建一個(gè)數(shù)據(jù)段代碼段定義偽指令代碼段定義偽指令.CODE.CODE創(chuàng)建一個(gè)代碼段創(chuàng)建一個(gè)代碼段堆棧段由堆棧段由WindowsWindows維護(hù),用戶不必設(shè)置維護(hù),用戶不必設(shè)置程序開(kāi)始執(zhí)行的位置程序開(kāi)始執(zhí)行的位置應(yīng)用一個(gè)標(biāo)號(hào)(例如
51、:應(yīng)用一個(gè)標(biāo)號(hào)(例如:STARTSTART)匯編結(jié)束匯編結(jié)束ENDEND指令的參數(shù)指令的參數(shù)應(yīng)用程序執(zhí)行結(jié)束應(yīng)用程序執(zhí)行結(jié)束語(yǔ)句語(yǔ)句“EXIT 0”EXIT 0”將控制權(quán)交還操作系統(tǒng)將控制權(quán)交還操作系統(tǒng)提供給操作系統(tǒng)一個(gè)返回代碼提供給操作系統(tǒng)一個(gè)返回代碼通常用通常用0 0表示執(zhí)行正確表示執(zhí)行正確源程序匯編結(jié)束源程序匯編結(jié)束ENDEND語(yǔ)句語(yǔ)句執(zhí)行結(jié)束執(zhí)行結(jié)束匯編結(jié)束匯編結(jié)束例例2-12-1信息顯示程序信息顯示程序在數(shù)據(jù)段給出這個(gè)字符串形式的信息:在數(shù)據(jù)段給出這個(gè)字符串形式的信息:; ; 數(shù)據(jù)段數(shù)據(jù)段msgmsgbyte Hello, Assembly!,13,10,0byte Hello, A
52、ssembly!,13,10,0; ; 定義要顯示的字符串定義要顯示的字符串在代碼段編寫顯示字符串的程序:在代碼段編寫顯示字符串的程序:; ; 代碼段代碼段 mov eax,offset msgmov eax,offset msg; ; 指定字符串的偏移地址指定字符串的偏移地址call dispmsgcall dispmsg; ; 調(diào)用調(diào)用I/OI/O子程序顯示信息子程序顯示信息完整程序完整程序例例2-12-1源程序源程序; eg0201.asm; eg0201.asminclude io32.incinclude io32.inc.data.data; ; 數(shù)據(jù)段數(shù)據(jù)段msgmsgbyte
53、Hello, Assembly!,13,10,0byte Hello, Assembly!,13,10,0.code.code; ; 代碼段代碼段start:start:; ; 程序執(zhí)行起始位置程序執(zhí)行起始位置mov eax,offset msgmov eax,offset msgcall dispmsgcall dispmsgexit 0exit 0; ; 程序正常執(zhí)行結(jié)束程序正常執(zhí)行結(jié)束end startend start; ; 匯編結(jié)束匯編結(jié)束返回返回Hello, Assembly !運(yùn)行結(jié)果對(duì)比對(duì)比C C語(yǔ)言源程序語(yǔ)言源程序#include #include int main()int
54、 main() printf(Hello, world !n);printf(Hello, world !n);exit(0);exit(0); 對(duì)比對(duì)比Hello, world !運(yùn)行結(jié)果3. 3. 輸入輸出子程序庫(kù)輸入輸出子程序庫(kù)鍵盤輸入和顯示器輸出的鍵盤輸入和顯示器輸出的I/OI/O子程序子程序含含IO32.INCIO32.INC和和IO32.LIBIO32.LIB,需要包含文件聲明,需要包含文件聲明源程序文件開(kāi)始使用包含命令聲明源程序文件開(kāi)始使用包含命令聲明INCLUDE IO32.INCINCLUDE IO32.INC子程序調(diào)用方法子程序調(diào)用方法MOV EAX,MOV EAX,入口參
55、數(shù)入口參數(shù)CALL CALL 子程序名子程序名宏調(diào)用方法宏調(diào)用方法宏名宏名 入口參數(shù)入口參數(shù)宏名宏名WriteStringWriteString子程序名子程序名 DISPMSGDISPMSG入口參數(shù)入口參數(shù) EAXEAX字符串地址字符串地址功能說(shuō)明功能說(shuō)明 顯示字符串(以顯示字符串(以0 0結(jié)尾)結(jié)尾)輸入子程序輸入子程序輸出子程序輸出子程序常用輸出子程序常用輸出子程序返回返回子程序名子程序名功能說(shuō)明功能說(shuō)明DISPMSG顯示字符串(以顯示字符串(以0結(jié)尾)結(jié)尾)DISPC顯示一個(gè)字符顯示一個(gè)字符DISPCRLF 光標(biāo)回車換行,到下一行首個(gè)位置光標(biāo)回車換行,到下一行首個(gè)位置DISPRD顯示顯示
56、8個(gè)個(gè)32位通用寄存器內(nèi)容位通用寄存器內(nèi)容DISPRF顯示顯示6個(gè)狀態(tài)標(biāo)志的狀態(tài)個(gè)狀態(tài)標(biāo)志的狀態(tài)DISPHD以十六進(jìn)制形式顯示以十六進(jìn)制形式顯示8位數(shù)據(jù)位數(shù)據(jù)DISPUID顯示無(wú)符號(hào)十進(jìn)制整數(shù)顯示無(wú)符號(hào)十進(jìn)制整數(shù)DISPSID顯示有符號(hào)十進(jìn)制整數(shù)顯示有符號(hào)十進(jìn)制整數(shù)常用輸入子程序常用輸入子程序返回返回子程序名子程序名功能說(shuō)明功能說(shuō)明READMSG輸入一個(gè)字符串(回車結(jié)束)輸入一個(gè)字符串(回車結(jié)束)READC輸入一個(gè)字符(回顯)輸入一個(gè)字符(回顯)READHD輸入輸入8位十六進(jìn)制數(shù)據(jù)位十六進(jìn)制數(shù)據(jù)READUID輸入無(wú)符號(hào)十進(jìn)制整數(shù)(輸入無(wú)符號(hào)十進(jìn)制整數(shù)(2321)READSID輸入有符號(hào)十進(jìn)制整
57、數(shù)輸入有符號(hào)十進(jìn)制整數(shù)(2312311)2.4.4 2.4.4 開(kāi)發(fā)過(guò)程開(kāi)發(fā)過(guò)程1. 1. 開(kāi)發(fā)軟件開(kāi)發(fā)軟件 抽取抽取MASM 6.11MASM 6.11和和Visual C+ 6.0Visual C+ 6.0集成開(kāi)發(fā)環(huán)境中集成開(kāi)發(fā)環(huán)境中有關(guān)文件構(gòu)造基本開(kāi)發(fā)軟件包有關(guān)文件構(gòu)造基本開(kāi)發(fā)軟件包BINBIN子目錄:進(jìn)行匯編、連接及配套程序文件子目錄:進(jìn)行匯編、連接及配套程序文件MASMMASM目錄:目錄:I/OI/O庫(kù)、包含文件及批處理文件庫(kù)、包含文件及批處理文件 默認(rèn)安裝到默認(rèn)安裝到D D分區(qū)的分區(qū)的MASMMASM目錄目錄 快速開(kāi)發(fā)方法快速開(kāi)發(fā)方法 進(jìn)入進(jìn)入MASMMASM目錄目錄雙擊快捷方式雙
58、擊快捷方式WIN32WIN32(或批處理文件(或批處理文件WIN32.BAT)WIN32.BAT) 生成可執(zhí)行文件生成可執(zhí)行文件MAKE32 eg0201MAKE32 eg0201操作演示操作演示MASM 6.15MASM 6.15開(kāi)發(fā)軟件開(kāi)發(fā)軟件快速開(kāi)發(fā)方法快速開(kāi)發(fā)方法END2. 2. 源程序的編輯源程序的編輯源程序文件是無(wú)格式文件、純文本類型源程序文件是無(wú)格式文件、純文本類型以以ASMASM為擴(kuò)展名,使用任何文本編輯器為擴(kuò)展名,使用任何文本編輯器WindowsWindows的記事本的記事本NotepadNotepadDOSDOS中的全屏幕文本編輯器中的全屏幕文本編輯器EDITEDIT其他程
59、序開(kāi)發(fā)工具中的編輯環(huán)境其他程序開(kāi)發(fā)工具中的編輯環(huán)境專用于源程序文件編寫的文本編輯軟件,例如專用于源程序文件編寫的文本編輯軟件,例如UltraEdit32UltraEdit32本書源程序文件的命名規(guī)則本書源程序文件的命名規(guī)則 EG例題,例題,EX習(xí)題習(xí)題 前前2位數(shù)字章號(hào),位數(shù)字章號(hào),后后2位數(shù)字位數(shù)字序號(hào)序號(hào)3. 3. 源程序的匯編源程序的匯編生成目標(biāo)模塊文件(生成目標(biāo)模塊文件(.OBJ.OBJ)MASM 6.xMASM 6.x的匯編程序是的匯編程序是ML.EXEML.EXEBINML /c /coff eg0201.asmBINML /c /coff eg0201.asm參數(shù)參數(shù)“/c”/c
60、”(小寫)實(shí)現(xiàn)源程序的匯編(小寫)實(shí)現(xiàn)源程序的匯編參數(shù)參數(shù)“/coff”/coff”(小寫字母小寫字母)表示生成表示生成COFFCOFF格式格式的目標(biāo)模塊文件的目標(biāo)模塊文件溫馨提示:溫馨提示:將源文件放在將源文件放在MASM目錄目錄溫馨提示:溫馨提示:ML.EXE的參數(shù)的參數(shù)區(qū)別區(qū)別大小寫大小寫4. 4. 目標(biāo)文件的連接目標(biāo)文件的連接能把一個(gè)或多個(gè)目標(biāo)文件和庫(kù)文件合成一個(gè)能把一個(gè)或多個(gè)目標(biāo)文件和庫(kù)文件合成一個(gè)可執(zhí)行文件可執(zhí)行文件3232位連接程序被更名為位連接程序被更名為L(zhǎng)INK32.EXELINK32.EXEBINBINLINK32 /subsystem:console eg0201.obj
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 云南省昆明市西山區(qū)民中2024-2025學(xué)年數(shù)學(xué)高二下期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 西南名校2025屆物理高二下期末復(fù)習(xí)檢測(cè)試題含解析
- 浙江省金蘭教育合作組織2025年高二數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)測(cè)試試題含解析
- 財(cái)產(chǎn)保全擔(dān)保合同(金融借貸合同中的資產(chǎn)保全協(xié)議)
- 節(jié)能環(huán)保車輛承運(yùn)合同與綠色運(yùn)輸服務(wù)管理細(xì)則
- 風(fēng)險(xiǎn)管理型柴油發(fā)電機(jī)組采購(gòu)合同
- 財(cái)務(wù)總監(jiān)股權(quán)激勵(lì)勞動(dòng)合同
- 股權(quán)激勵(lì)稅務(wù)籌劃與咨詢合同
- 車輛掛靠業(yè)務(wù)合作經(jīng)營(yíng)合同
- 股權(quán)收購(gòu)代理股權(quán)過(guò)戶執(zhí)行合同
- 央企華潤(rùn)集團(tuán)杭州片區(qū)年度品牌傳播策略案
- HG-T 4823-2023 電池用硫酸錳
- 英雄壇說(shuō)人物位置
- 監(jiān)理預(yù)驗(yàn)收表格(共11頁(yè))
- 中國(guó)電信移動(dòng)終端營(yíng)銷策略
- 學(xué)校考試A3試卷模板(共6頁(yè))
- 百勝餐飲HIC高效能的輔導(dǎo)
- 《就在今生》班迪達(dá)尊者著果儒鐘苑文共譯簡(jiǎn)體
- 皇家寵物食品有限公司的營(yíng)銷策略分
- [畢業(yè)設(shè)計(jì)精品]6502電氣集中工程設(shè)計(jì)
- 紅頭文件任命書(模板)
評(píng)論
0/150
提交評(píng)論