計(jì)算機(jī)組成與實(shí)現(xiàn) 課件全套 高小鵬 第1-9章-計(jì)算機(jī)概述-集成MIPS微系統(tǒng)_第1頁(yè)
計(jì)算機(jī)組成與實(shí)現(xiàn) 課件全套 高小鵬 第1-9章-計(jì)算機(jī)概述-集成MIPS微系統(tǒng)_第2頁(yè)
計(jì)算機(jī)組成與實(shí)現(xiàn) 課件全套 高小鵬 第1-9章-計(jì)算機(jī)概述-集成MIPS微系統(tǒng)_第3頁(yè)
計(jì)算機(jī)組成與實(shí)現(xiàn) 課件全套 高小鵬 第1-9章-計(jì)算機(jī)概述-集成MIPS微系統(tǒng)_第4頁(yè)
計(jì)算機(jī)組成與實(shí)現(xiàn) 課件全套 高小鵬 第1-9章-計(jì)算機(jī)概述-集成MIPS微系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩861頁(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)介

計(jì)算機(jī)概述計(jì)算機(jī)組成與實(shí)現(xiàn)目錄計(jì)算機(jī)的基本認(rèn)識(shí)計(jì)算機(jī)的應(yīng)用及分類(lèi)計(jì)算機(jī)的基本硬件構(gòu)成計(jì)算機(jī)的層次結(jié)構(gòu)第一臺(tái)數(shù)字式多用途計(jì)算機(jī)ENIAC:ElectronicNumericalIntegratorandCalculator時(shí)間:1946年;用途:計(jì)算炮彈彈道美國(guó)賓夕法尼亞大學(xué)3真空管重量面積功耗性能1880030噸100m2150KW5000加法/秒Cpl.IrwinGoldstein設(shè)置功能表開(kāi)關(guān)程序員BettyJeanJennings(左)與FranBilas(右)J.PresperEckert(1919-1995)JohnWilliamMauchly(1907-1980)兩位主設(shè)計(jì)師大型機(jī)時(shí)代:上世紀(jì)50年代~60年代核心技術(shù):計(jì)算機(jī)4大型機(jī)~Mainframe磁帶機(jī)CPU磁帶機(jī)磁盤(pán)打印機(jī)控制臺(tái)讀卡機(jī)龍頭企業(yè)價(jià)格用戶技術(shù)IBM1M美元大型企業(yè)COBOL,F(xiàn)ortran,分時(shí)OS小型機(jī)時(shí)代:上世紀(jì)70年代核心技術(shù):集成電路(Integratedcircuits)5小型機(jī)~Minicomputer龍頭企業(yè)價(jià)格用戶技術(shù)Digital,HP10K美元大學(xué),實(shí)驗(yàn)室C,UNIXPC時(shí)代:上世紀(jì)80年代~2000中期核心技術(shù):微處理器(Microprocessor)6龍頭企業(yè)價(jià)格用戶技術(shù)Apple,IBM1K美元個(gè)人Basic,Java,WindowsPC~PersonalComputer后PC時(shí)代:2000以后1/2核心技術(shù):無(wú)線網(wǎng)絡(luò)(WirelessNetwork),ARMCPU7龍頭企業(yè)價(jià)格用戶技術(shù)Motorola,Nokia,Apple,Google500美元個(gè)人iOS,AndroidMotorolaV70360度旋蓋2002NokiaN-Gage全球首款游戲手機(jī)2003AppleiPhone全面定義智能手機(jī)2007后PC時(shí)代:2000以后2/2核心技術(shù):局域網(wǎng),寬帶互聯(lián)網(wǎng)8龍頭企業(yè)用戶Amazon,Google,阿里無(wú)法(不愿)負(fù)擔(dān)高端計(jì)算與存儲(chǔ)設(shè)備的用戶云計(jì)算重大認(rèn)識(shí)#1:摩爾定律晶體管~transistor芯片的晶體管數(shù)量:每2年翻一番GordonMoore(1929)Intel創(chuàng)始人重大認(rèn)識(shí)#2:局部性與存儲(chǔ)層次局部性:體現(xiàn)了程序內(nèi)在的固有基本規(guī)律存儲(chǔ)層次:應(yīng)用了局部性原理,是性能、容量、成本的設(shè)計(jì)折中DDR-SDRAM,SRAMCPU主存儲(chǔ)器存儲(chǔ)設(shè)備輸入/輸出設(shè)備(外部設(shè)備)快小高性能容量單位成本慢大低SRAM~StaticRandomAccessMemory;SDRAM~SynchronousDynamicRAMDDR-SDRAM~DoubleDataRateSDRAM目錄計(jì)算機(jī)的基本認(rèn)識(shí)計(jì)算機(jī)的應(yīng)用及分類(lèi)計(jì)算機(jī)的基本硬件構(gòu)成計(jì)算機(jī)的層次結(jié)構(gòu)個(gè)人計(jì)算機(jī)定位:是以較小代價(jià)為個(gè)人用戶提供較高的性能范圍:最為廣泛,如臺(tái)式機(jī)、筆記本電腦都是PC范疇PC始終是最大的計(jì)算機(jī)市場(chǎng)之一軟件:辦公軟件、開(kāi)發(fā)軟件、娛樂(lè)軟件、游戲軟件等來(lái)源:/history-of-the-personal-computer/服務(wù)器1/3定位:承載大負(fù)載的任務(wù),例如科學(xué)計(jì)算、Web訪問(wèn)等軟件:Web服務(wù)、數(shù)據(jù)庫(kù)、科學(xué)計(jì)算軟件、模擬系統(tǒng)等應(yīng)用:部署在機(jī)房中,通過(guò)網(wǎng)絡(luò)對(duì)外提供計(jì)算與存儲(chǔ)服務(wù)服務(wù)器~ServerLenovoSystemx3550M5外視圖前視圖:8個(gè)2.5英寸SATA硬盤(pán)內(nèi)部視圖服務(wù)器2/3--服務(wù)器集群服務(wù)器集群:多臺(tái)服務(wù)器聚合在一起,以分布式對(duì)外提供服務(wù)微信、淘寶、新浪等的運(yùn)行平臺(tái)集群~Cluster服務(wù)器3/3--超級(jí)計(jì)算機(jī)超級(jí)計(jì)算機(jī):更大規(guī)模的服務(wù)器集群,聚合的處理器總量大約在10萬(wàn)顆量級(jí),主要以并行方式提供超級(jí)計(jì)算能力用途:如天氣預(yù)報(bào)、地質(zhì)勘探、核爆模擬、蛋白質(zhì)結(jié)構(gòu)分析等超級(jí)計(jì)算機(jī)~SuperComputer,SC中國(guó)芯:申威26010廠商江南計(jì)算技術(shù)研究所指令集64位RISC核心數(shù)260主頻1.45GHz峰值性能3.06TFlop/sCPU數(shù)量:申威26010x40960計(jì)算能力:全球72億人口用計(jì)算器不間斷計(jì)算32年系統(tǒng)功耗:15.371MW機(jī)柜超節(jié)點(diǎn)x4超節(jié)點(diǎn)運(yùn)算插件x32運(yùn)算插件運(yùn)算節(jié)點(diǎn)x4運(yùn)算節(jié)點(diǎn)申威26010x2嵌入式計(jì)算機(jī)1/2定位:面向特點(diǎn)應(yīng)用,作為一個(gè)子系統(tǒng)被內(nèi)嵌在整個(gè)系統(tǒng)中范圍:最為廣泛,無(wú)所不在冰箱、洗衣機(jī)、微波爐、數(shù)字電視、汽車(chē)、高鐵、飛機(jī)、輪船、衛(wèi)星、4G網(wǎng)絡(luò)、WIFI、機(jī)器人最大的計(jì)算機(jī)市場(chǎng)嵌入式計(jì)算機(jī)2/2普遍更重視成本、功耗、可靠性通常不把性能作為首要指標(biāo)某些應(yīng)用中,還非常強(qiáng)調(diào)實(shí)時(shí)特性例如視頻播放器實(shí)時(shí)~RealTime目錄計(jì)算機(jī)的基本認(rèn)識(shí)計(jì)算機(jī)的應(yīng)用及分類(lèi)計(jì)算機(jī)的基本硬件構(gòu)成計(jì)算機(jī)的層次結(jié)構(gòu)計(jì)算機(jī)的典型硬件組成中央處理器存儲(chǔ)器輸入輸出設(shè)備中央處理器~CentralProcessingUnit,CPUCPUCPU是計(jì)算機(jī)的最核心部件,其功能是能夠執(zhí)行由一組指令構(gòu)成的程序CPU可以抽象為2大部分:數(shù)據(jù)通路、控制器數(shù)據(jù)通路:執(zhí)行指令所需的計(jì)算與存儲(chǔ)的功能部件集合PC:類(lèi)似于C語(yǔ)言的指針,指向要執(zhí)行的指令A(yù)LU:完成各類(lèi)計(jì)算,如加減乘除寄存器堆:臨時(shí)性存儲(chǔ)參與運(yùn)算的數(shù)據(jù)以及運(yùn)算結(jié)果控制器:根據(jù)指令控制數(shù)據(jù)通路的各個(gè)部件完成相應(yīng)操作例如加法指令,就需要控制ALU完成加法運(yùn)算程序計(jì)數(shù)器~ProgramCounter(PC)算數(shù)邏輯單元~ArithmeticandLogicUnit(ALU)CPU基本模型CPU現(xiàn)代CPU通常包含cache、MMU為了提高性能,現(xiàn)代主流CPU一般為多核結(jié)構(gòu)每個(gè)核心相當(dāng)于過(guò)去的一個(gè)完整CPU高速緩存~cache存儲(chǔ)管理單元~MemoryManagementUnit(MMU)CPU基本模型現(xiàn)代主流CPU基本結(jié)構(gòu)主存儲(chǔ)器主存儲(chǔ)器(簡(jiǎn)稱(chēng)主存):存儲(chǔ)程序以及程序運(yùn)行過(guò)程中產(chǎn)生以及需要處理的各種數(shù)據(jù)程序示例:Excel.exe就是一個(gè)程序,平時(shí)是存儲(chǔ)在硬盤(pán)中的;被鼠標(biāo)雙擊后,它就會(huì)被Windows操作系統(tǒng)加載到主存中。數(shù)據(jù)示例:Excel中打開(kāi)的某個(gè)excel文件就是Excel.exe運(yùn)行所需要的數(shù)據(jù)主存主存很多時(shí)候也被稱(chēng)為內(nèi)存顧名思義,既然有主存和內(nèi)存的概念,那么就有輔存和外存的概念。輔存或外存通常是指硬盤(pán)、光盤(pán)等設(shè)備。從圖11可以看出,它們也屬于輸入輸出設(shè)備范疇。早期計(jì)算機(jī)主存只有幾千字節(jié)的容量。更有甚者,某些計(jì)算機(jī)只有容量極小的主存,而沒(méi)有硬盤(pán)。到本書(shū)成文時(shí),一臺(tái)普通PC的主存容量通常會(huì)達(dá)到4GB以上,而配置的硬盤(pán)動(dòng)輒都是以TB為單位。巨大的容量使得計(jì)算機(jī)可以運(yùn)行種類(lèi)繁多的程序并存儲(chǔ)規(guī)模龐大的數(shù)據(jù),極大的增強(qiáng)了計(jì)算機(jī)的應(yīng)用面??梢哉f(shuō),計(jì)算機(jī)技術(shù)的成功在一定程度上源自存儲(chǔ)技術(shù)的進(jìn)步。目錄計(jì)算機(jī)的基本認(rèn)識(shí)計(jì)算機(jī)的應(yīng)用及分類(lèi)計(jì)算機(jī)的基本硬件構(gòu)成計(jì)算機(jī)的層次結(jié)構(gòu)軟硬件層次結(jié)構(gòu)一個(gè)完整的計(jì)算機(jī)系統(tǒng),可以劃分為硬件和軟件兩大部分其中,兩者之間的交互界面就是指令集計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考數(shù)字電路軟硬件層次結(jié)構(gòu):指令集硬件功能被抽象為一組基礎(chǔ)操作,如加法運(yùn)算、減法運(yùn)算等這些操作被稱(chēng)指令;指令的集合就是指令集計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考從硬件的角度指令集是底層設(shè)計(jì)的需求,也是底層功能的抽象數(shù)字電路軟硬件層次結(jié)構(gòu):操作系統(tǒng)系統(tǒng)軟件,如Windows、Linux、IOS、Andorid管理計(jì)算機(jī)的軟件和硬件資源為應(yīng)用程序提供豐富的功能計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考早期:應(yīng)用程序直接運(yùn)行在硬件上現(xiàn)代:應(yīng)用程序的運(yùn)行離不開(kāi)操作系統(tǒng)提供的各類(lèi)服務(wù)數(shù)字電路軟硬件層次結(jié)構(gòu):編譯器/匯編器編譯器把高級(jí)程序設(shè)計(jì)語(yǔ)言(如C程序)轉(zhuǎn)換為匯編程序,然后調(diào)用匯編器把匯編程序轉(zhuǎn)換為二進(jìn)制機(jī)器指令,再經(jīng)優(yōu)化等生成可執(zhí)行程序計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考現(xiàn)代應(yīng)用軟件開(kāi)發(fā)離不開(kāi)開(kāi)發(fā)工具和環(huán)境,其中最重要的是編譯器和匯編器數(shù)字電路軟硬件層次結(jié)構(gòu):應(yīng)用軟件種類(lèi)最為繁多,用于滿足用戶的特定需求

PC上的各類(lèi)辦公軟件、游戲、瀏覽器等;

服務(wù)器上的各類(lèi)Web服務(wù)軟件、科學(xué)與工程計(jì)算軟件等;

手機(jī)上的微信等計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考應(yīng)用軟件是種類(lèi)最多的程序,用于滿足用戶的特定需求數(shù)字電路軟硬件層次結(jié)構(gòu):CPU計(jì)算機(jī)硬件中最核心的部件。它執(zhí)行程序的基本原理:從存儲(chǔ)器讀取一條指令;執(zhí)行指令功能;計(jì)算下條指令在存儲(chǔ)器的位置不斷的重復(fù)上述過(guò)程計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)器應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考一般來(lái)說(shuō),CPU只能執(zhí)行某個(gè)特定的指令集。例如Intel公司生產(chǎn)的CPU就只執(zhí)行X86指令集,ARM公司生產(chǎn)的CPU就只執(zhí)行ARM指令集數(shù)字電路軟硬件層次結(jié)構(gòu):存儲(chǔ)器存儲(chǔ)器是計(jì)算機(jī)硬件中第2重要的組成部分今天使用的絕大多數(shù)計(jì)算機(jī)應(yīng)該稱(chēng)為存儲(chǔ)程序計(jì)算機(jī)構(gòu)成程序的指令和數(shù)據(jù)都以二進(jìn)制數(shù)字的形式存儲(chǔ)在存儲(chǔ)器中計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考一臺(tái)計(jì)算機(jī)的存儲(chǔ)器通常包含若干層次,不同層次的存儲(chǔ)器在容量上和速度上具有數(shù)量級(jí)差距數(shù)字電路軟硬件層次結(jié)構(gòu):輸入/輸出系統(tǒng)輸入系統(tǒng)負(fù)責(zé)信息進(jìn)入計(jì)算機(jī),輸出系統(tǒng)負(fù)責(zé)信息從計(jì)算機(jī)輸出如鼠標(biāo)、鍵盤(pán)、無(wú)線網(wǎng)卡計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考只能計(jì)算而無(wú)信息輸入輸出的計(jì)算機(jī)沒(méi)有實(shí)用價(jià)值數(shù)字電路軟硬件層次結(jié)構(gòu):微架構(gòu)芯片的內(nèi)部結(jié)構(gòu)就是微架構(gòu)CPU這樣的芯片內(nèi)部可以劃分為兩大部分:數(shù)據(jù)通路、控制器其中,數(shù)據(jù)通路又包含一組功能部件,如寄存器堆、運(yùn)算單元等計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)數(shù)字電路晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考所有的功能部件、控制器等又是由數(shù)字電路組成的軟硬件層次結(jié)構(gòu):數(shù)字電路數(shù)字電路包括組合電路和時(shí)序電路兩大部分組合電路:具有計(jì)算功能的電路,如與門(mén)、或門(mén)、非門(mén)等時(shí)序電路:具有存儲(chǔ)功能的電路,如寄存器等計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)數(shù)字電路晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考每個(gè)門(mén)電路又可以由若干晶體管構(gòu)成軟硬件層次結(jié)構(gòu):晶體管晶體管是實(shí)現(xiàn)數(shù)字電路的基本單元晶體管是目前實(shí)現(xiàn)開(kāi)關(guān)電路的主要技術(shù)手段晶體管的開(kāi)關(guān)性能和功耗直接影響芯片的頻率、功耗等計(jì)算機(jī)領(lǐng)域微電子領(lǐng)域微架構(gòu)(數(shù)據(jù)通路&控制器)數(shù)字電路晶體管CPU存儲(chǔ)應(yīng)用軟件操作系統(tǒng)工具/環(huán)境編譯器I/O系統(tǒng)軟件硬件匯編器指令集注:大致結(jié)構(gòu),僅供參考晶體管具有很好的開(kāi)關(guān)特性,即在電路特性上表現(xiàn)為或者通或者斷,對(duì)應(yīng)了數(shù)字電路的0和1數(shù)據(jù)表示與運(yùn)算方法計(jì)算機(jī)組成與實(shí)現(xiàn)目錄常見(jiàn)進(jìn)制及其轉(zhuǎn)換常見(jiàn)術(shù)語(yǔ)二進(jìn)制加法整數(shù)的二進(jìn)制表示方法浮點(diǎn)數(shù)的二進(jìn)制表示方法補(bǔ)碼的幾種常見(jiàn)運(yùn)算數(shù)的表示方法在計(jì)算機(jī)中,任何對(duì)象都被表示為一組0/1串即使是上面這句話,也是由一組0/1串構(gòu)成的!這就是所謂的二進(jìn)制表示如何用二進(jìn)制表示數(shù)呢?讓我們從熟悉的十進(jìn)制開(kāi)始介紹十進(jìn)制數(shù)的表示方法示例:10進(jìn)制的1234,其值的計(jì)算過(guò)程可以表示為從上例可以看出,每一位數(shù)都包含了基和權(quán)兩部分基:base;權(quán):weight123410的角標(biāo)10代表十進(jìn)制。由于十進(jìn)制是人類(lèi)的習(xí)慣表達(dá)方式,因此在很多時(shí)候人們會(huì)省略這個(gè)角標(biāo)。數(shù)的一般表示方法對(duì)于任意一個(gè)數(shù),如dn-1dn-2...d1d0,其值表示為dn-1

Bn-1+dn-2

Bn-2+...+d1

B1+d0

B0其中dn-1,dn-2,...d1,d0是該進(jìn)制的可能取值例如十進(jìn)制,可能取值為{0,1,2,3,4,5,6,7,8,9}二進(jìn)制的表示方法二進(jìn)制數(shù)的每位也被稱(chēng)為比特(bit)二進(jìn)制的基能夠表示的數(shù)字范圍只有2個(gè)數(shù),即{0,1}N位二進(jìn)制數(shù)的各位權(quán)從最低位到最高位分別為20,21,…,2N-1示例:110112常見(jiàn)數(shù)制十進(jìn)制各位可能取值:0,1,2,3,4,5,6,7,8,9示例:947210

=9472二進(jìn)制各位可能取值:0,1示例:1010112

=0b101011十六進(jìn)制各位可能取值:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F示例:2A5D16

=0x2A5D十進(jìn)制二進(jìn)制十六進(jìn)制000000100001200002300003400004500005600006700007800008900009100000A110000B120000C130000D140000E150000F不同數(shù)制的示例示例

947210

= 9000 +400 +70 +2

9x1000 +4x100 +7x10 +2x1

9x103 +4x102 +7x101 +2x100

947210

= 2x163 +5x162 +0x161 +0x160

947210

= 250016

0xA15= 0b101000010101進(jìn)制轉(zhuǎn)換十進(jìn)制轉(zhuǎn)二進(jìn)制用十進(jìn)制數(shù)除以2,得到的余數(shù)就是相應(yīng)二進(jìn)制的最低位將得到的商繼續(xù)除以2,得到的余數(shù)就是次低位重復(fù)上述過(guò)程直至商為0示例:27的二進(jìn)制計(jì)算過(guò)程2710=110112步驟被除數(shù)商余數(shù)備注127131最低位21361

3630

4311

5101最高位進(jìn)制轉(zhuǎn)換十六進(jìn)制與二進(jìn)制兩者之間轉(zhuǎn)換非常簡(jiǎn)單,基本方法是:每4位二進(jìn)制對(duì)應(yīng)1位十六進(jìn)制示例:1101011010110112與6C5B16之間的轉(zhuǎn)換二進(jìn)制110110001011011十六進(jìn)制6C5B手工轉(zhuǎn)換時(shí),注意從低位開(kāi)始轉(zhuǎn)換,以防止高位不足4位導(dǎo)致出錯(cuò)。進(jìn)制轉(zhuǎn)換十進(jìn)制轉(zhuǎn)十六進(jìn)制先將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)再二進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)目錄常見(jiàn)進(jìn)制及其轉(zhuǎn)換常見(jiàn)術(shù)語(yǔ)二進(jìn)制加法整數(shù)的二進(jìn)制表示方法浮點(diǎn)數(shù)的二進(jìn)制表示方法補(bǔ)碼的幾種常見(jiàn)運(yùn)算字節(jié)、字字節(jié)(byte):由8個(gè)二進(jìn)制位構(gòu)成的一個(gè)元組,是目前計(jì)算機(jī)數(shù)據(jù)單位1個(gè)byte的表示范圍是從0x00至0xFF,即總共是256個(gè)數(shù)字字(word):一個(gè)字包含的二進(jìn)制位數(shù)因計(jì)算機(jī)不同而不同不同CPU計(jì)算能力不同,因此其字的大小也不同以MIPS為例,CPU能計(jì)算的數(shù)據(jù)大小為32位,故其字長(zhǎng)為32位大量當(dāng)代計(jì)算機(jī),如PC、服務(wù)器甚至手機(jī),CPU字長(zhǎng)已經(jīng)發(fā)展到64位了在一些專(zhuān)用領(lǐng)域,CPU的字長(zhǎng)甚至達(dá)到128位嵌入式領(lǐng)域中的某些CPU字長(zhǎng)可能只有16位甚至8位最高/最低有效位、最高/最低有效字節(jié)MSB(MostSignificantBit):最高有效位,位于最左位LSB(LowSignificantBit):最低有效位,位于最右邊位MSB(MostSignificantByte):最高有效字節(jié),位于數(shù)據(jù)的最左邊的字節(jié)LSB(LeastSignificantByte):最低有效自己,位于數(shù)據(jù)的最右邊的字節(jié)目錄常見(jiàn)進(jìn)制及其轉(zhuǎn)換常見(jiàn)術(shù)語(yǔ)二進(jìn)制加法整數(shù)的二進(jìn)制表示方法浮點(diǎn)數(shù)的二進(jìn)制表示方法補(bǔ)碼的幾種常見(jiàn)運(yùn)算二進(jìn)制加法回顧十進(jìn)制數(shù)加法計(jì)算原理將兩個(gè)對(duì)應(yīng)的數(shù)字位與來(lái)自低位的進(jìn)位相加,如果其和大于等于10,那么向產(chǎn)生進(jìn)位該計(jì)算過(guò)程從最低位開(kāi)始依次向最高位。其中最低位的進(jìn)位為0二進(jìn)制加法與十進(jìn)制加法原理類(lèi)似二進(jìn)制每位數(shù)字非0即1,因此兩個(gè)數(shù)字位相加最大值為2,即102顯然,此時(shí)就應(yīng)該進(jìn)位了示例:10112與00112的計(jì)算過(guò)程

b3b2b1b0+10110011

1

1110

b4b3b2b1b0+

1111

00011111

100001)b0-b3位計(jì)算(產(chǎn)生進(jìn)位輸出)2)b4位(進(jìn)位)溢出人:在上例中,人計(jì)算結(jié)果為100002是正常的人在計(jì)算中,通常不考慮位數(shù)限制,可以靈活的添加高位計(jì)算機(jī):由于受硬件限制,就必須考慮計(jì)算結(jié)果的位數(shù)假設(shè)CPU的字長(zhǎng)為4位,則b4位是不存在的,故計(jì)算結(jié)果就是00002,即0。這種情況就是溢出。產(chǎn)生溢出,意味著計(jì)算結(jié)果出現(xiàn)錯(cuò)誤了。CPU在溢出發(fā)生時(shí),會(huì)通過(guò)稱(chēng)為異常的機(jī)制來(lái)報(bào)告這個(gè)錯(cuò)誤

b4b3b2b1b0+

1111

00011111

10000溢出~Overflow;異常~Exception目錄常見(jiàn)進(jìn)制及其轉(zhuǎn)換常見(jiàn)術(shù)語(yǔ)二進(jìn)制加法整數(shù)的二進(jìn)制表示方法浮點(diǎn)數(shù)的二進(jìn)制表示方法補(bǔ)碼的幾種常見(jiàn)運(yùn)算一切皆可用數(shù)字表示誤區(qū):很多時(shí)候,我們認(rèn)為數(shù)字的含義只能是數(shù)值示例1:19060123解讀1:如果在銀行賬戶中,那就是存款解讀2:如果在學(xué)籍系統(tǒng)中,那就是學(xué)號(hào)示例2:0和10:可以對(duì)應(yīng)邏輯真(F,false)1:可以對(duì)應(yīng)邏輯真(T,true)19060123班內(nèi)序號(hào)班級(jí)編號(hào)院系編號(hào)入學(xué)年份一切皆可用數(shù)字表示啟示1:一個(gè)數(shù)字首先是一個(gè)編碼,其含義必須結(jié)合上下文來(lái)解讀啟示2:一個(gè)數(shù)字可以作為整體解讀,也可以分為若干部分解讀對(duì)于一個(gè)數(shù)字來(lái)說(shuō),其包含2部分內(nèi)容編碼:就是數(shù)字本身,或者說(shuō)是一種記號(hào)。例如007語(yǔ)義:編碼所代表的概念的含義,是對(duì)編碼的解釋例如007可以代表某個(gè)特定的間諜,也可是酒店的房間編號(hào)編碼本身沒(méi)有任何意義編碼只有被賦予語(yǔ)義的編碼才有意義數(shù)的編碼空間示例:3位十進(jìn)制編碼空間:000,001,…,999編碼個(gè)數(shù):103,即1000編碼空間:有效編碼的集合空間大?。河行Ь幋a的總數(shù)對(duì)于一個(gè)n位B進(jìn)制數(shù)來(lái)說(shuō),其編碼空間大小為Bn例如3位二進(jìn)制,其編碼空間大小為23=83為十六進(jìn)制,其編碼空間為163=4096編碼位數(shù)

編碼與編碼對(duì)象之間的對(duì)應(yīng)關(guān)系是由人來(lái)確定的例如:A可以用0000002對(duì)應(yīng),也可以用1110002對(duì)應(yīng)二進(jìn)制無(wú)符號(hào)數(shù)二進(jìn)制無(wú)符號(hào)數(shù)的編碼方案沒(méi)有負(fù)數(shù);全是整數(shù)000000000000000000000000000000002=010000000000000000000000000000000012=110000000000000000000000000000000102=210 ... ...011111111111111111111111111111012=2,147,483,64510011111111111111111111111111111102=2,147,483,64610011111111111111111111111111111112=2,147,483,64710100000000000000000000000000000002=2,147,483,64810100000000000000000000000000000012=2,147,483,64910100000000000000000000000000000102=2,147,483,65010 ... ...111111111111111111111111111111012=4,294,967,29310111111111111111111111111111111102=4,294,967,29410111111111111111111111111111111112=4,294,967,29510無(wú)符號(hào)~unsigned二進(jìn)制符號(hào)數(shù)原碼方案用最高位表示符號(hào)位(0~正,1~負(fù))其余位代表絕對(duì)值(也就是無(wú)符號(hào)數(shù))示例:4位原碼編碼方案原碼方案的缺陷存在2個(gè)零,即00002和100021)有效編碼被浪費(fèi)了2)硬件無(wú)法使用前述加法編碼數(shù)值不連續(xù)希望數(shù)值隨編碼增大而增大符號(hào)~signed00002=01000012=11000102=21000112=31001002=41001012=51001102=61001112=71010002=-01010012=-11010102=-21010112=-31011002=-41011012=-51011102=-61011112=-710編碼5位原碼方案數(shù)值二進(jìn)制符號(hào)數(shù)二進(jìn)制補(bǔ)碼方案(以5位二進(jìn)制補(bǔ)碼為例)最高位代表符號(hào)位:0~正,1~負(fù)10000代表最小的負(fù)數(shù)(-16),11111代表最大的負(fù)數(shù)(-1)特點(diǎn):只有1個(gè)零符號(hào)確定后,數(shù)值隨編碼增長(zhǎng)而增長(zhǎng)000000000101111...1111110000...數(shù)值增長(zhǎng)數(shù)值增長(zhǎng)15-16編碼5位補(bǔ)碼方案數(shù)值32位二進(jìn)制補(bǔ)碼表示范圍:-2,147,483,648至2,147,483,647符號(hào)位00000000000000000000000000000000two=0ten00000000000000000000000000000001two=1ten00000000000000000000000000000010two=2ten ... ...01111111111111111111111111111101two=2,147,483,645ten01111111111111111111111111111110two=2,147,483,646ten01111111111111111111111111111111two=2,147,483,647ten10000000000000000000000000000000two=–2,147,483,648ten10000000000000000000000000000001two=–2,147,483,647ten10000000000000000000000000000010two=–2,147,483,646ten ... ...11111111111111111111111111111101two=–3ten11111111111111111111111111111110two=–2ten11111111111111111111111111111111two=–1ten二進(jìn)制補(bǔ)碼的一般性表示

二進(jìn)制補(bǔ)碼小結(jié)現(xiàn)代計(jì)算機(jī)普遍采用使用最高位作為符號(hào)位正數(shù)區(qū)間與負(fù)數(shù)區(qū)間大致相同負(fù)數(shù)區(qū)間比正數(shù)區(qū)間多一個(gè)數(shù)相反數(shù)計(jì)算方法:各位取反,然后加1示例:已知+7=01112,則+7=10002+12=10012課堂練習(xí)假設(shè)CPU字長(zhǎng)為4位。以下哪個(gè)范圍可以用二進(jìn)制補(bǔ)碼表示?-15至

+150至+15-8至

+7-16至

+15空間大小為31,需要至少5位空間大小為16(合理),但沒(méi)有負(fù)數(shù)區(qū)間正負(fù)區(qū)間都有,負(fù)區(qū)間多1個(gè),空間大小16正負(fù)區(qū)間都有,負(fù)區(qū)間多1個(gè),但空間大小為32目錄常見(jiàn)進(jìn)制及其轉(zhuǎn)換常見(jiàn)術(shù)語(yǔ)二進(jìn)制加法整數(shù)的二進(jìn)制表示方法浮點(diǎn)數(shù)的二進(jìn)制表示方法補(bǔ)碼的幾種常見(jiàn)運(yùn)算浮點(diǎn)數(shù)概述計(jì)算機(jī)除了處理整數(shù)外,很多時(shí)候也需要處理浮點(diǎn)數(shù)例如圓周率3.1415926,就無(wú)法用前面講的二進(jìn)制整數(shù)編碼方案表示在工程計(jì)算中,就大量涉及浮點(diǎn)數(shù)浮點(diǎn)數(shù)具有表示范圍和精度都較高的特點(diǎn)它解決了整數(shù)和小數(shù)位長(zhǎng)度固定的限制允許表示一個(gè)很大的數(shù)或者很想的數(shù)WilliamM.Kahan(威廉?凱亨),1933年6月領(lǐng)導(dǎo)開(kāi)發(fā)了Intel的8087浮點(diǎn)協(xié)處理器制定了IEEE754和854標(biāo)準(zhǔn)浮點(diǎn)數(shù)標(biāo)準(zhǔn)之父;1989年圖靈獎(jiǎng)獲得者Forhisfundamentalcontributionstonumericalanalysis.Oneoftheforemostexpertsonfloating-pointcomputations.Kahanhasdedicatedhimselfto"makingtheworldsafefornumericalcomputations"!浮點(diǎn)數(shù)格式

313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)指數(shù)和尾數(shù),增加任何一方位數(shù)都會(huì)減少另一方位數(shù)目前方案是在精度與表示范圍之間反復(fù)權(quán)衡后的結(jié)果浮點(diǎn)數(shù)格式(優(yōu)化前)示例:用二進(jìn)制浮點(diǎn)數(shù)格式表示5.23×1035.23×103=523010=1010001101110=1.01000110111×212符號(hào)為0,指數(shù)為12(11002),尾數(shù)為1.01000110111313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)00000110010100011011100000000000浮點(diǎn)數(shù)格式(優(yōu)化后)科學(xué)記數(shù)法通常不會(huì)讓0出現(xiàn)在尾數(shù)的第1位(即小數(shù)點(diǎn)左邊那位)。類(lèi)似,浮點(diǎn)數(shù)表示方法同樣不會(huì)讓0出現(xiàn)在尾數(shù)的第1位由于尾數(shù)的第1位只能為1,那么就沒(méi)有必要再占用實(shí)際存儲(chǔ)位這使尾數(shù)多了1位有效存儲(chǔ)位在計(jì)算過(guò)程中還需要將該位自動(dòng)補(bǔ)回格式優(yōu)化:5.23×103的尾數(shù)1.01000110111,優(yōu)化為01000110111313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)00000110010100011011100000000000313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)00000110001000110111000000000000優(yōu)化后的浮點(diǎn)數(shù)格式優(yōu)化前的浮點(diǎn)數(shù)格式表示絕對(duì)值小于0的浮點(diǎn)數(shù)絕對(duì)值小于0的浮點(diǎn)數(shù),其指數(shù)是負(fù)的示例:0.5和0.25,其對(duì)應(yīng)的就是1.0x2-1與1.0x2-2思路:指數(shù)采用二進(jìn)制補(bǔ)碼缺點(diǎn):負(fù)指數(shù)的浮點(diǎn)數(shù)雖較小,但其二進(jìn)制卻似乎是個(gè)較大的數(shù)示例:0.5與2.0313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)01111111100000000000000000000000313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)000000001000000000000000000000000.5(1.0×2-1)的浮點(diǎn)數(shù)格式為:0x7F8000002.0(1.0×2+1)的浮點(diǎn)數(shù)格式:0x00800000浮點(diǎn)數(shù):0.5<2.0二進(jìn)制:0x7F800000>0x00800000表示絕對(duì)值小于0的浮點(diǎn)數(shù):偏階計(jì)數(shù)法目標(biāo):

000000002對(duì)應(yīng)最小的負(fù)指數(shù),而111111112對(duì)應(yīng)最大的正指數(shù)思路:編碼用的指數(shù)=真實(shí)指數(shù)+127;該方法被稱(chēng)為偏階記數(shù)法示例:0.5與2.00.5的偏階編碼指數(shù):111111112+011111112=0111111022.0的偏階編碼指數(shù):000000012+011111112=100000002313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)00111111000000000000000000000000313029282726252423222120191817161514131211109876543210S指數(shù)尾數(shù)010000000000000000000000000000000.5(1.0×2-1)的偏階浮點(diǎn)數(shù)格式為:0x3F0000002.0(1.0×2+1)的偏階浮點(diǎn)數(shù)格式:0x40000000IEEE754浮點(diǎn)標(biāo)準(zhǔn)就采用了偏階記數(shù)法單精度浮點(diǎn)表示范圍

最大正數(shù)計(jì)算方法雙精度浮點(diǎn)表示范圍

格式總位數(shù)符號(hào)位指數(shù)位尾數(shù)位單精度浮點(diǎn)321823雙精度浮點(diǎn)6411152特殊情況

表示的數(shù)單精度浮點(diǎn)數(shù)雙精度浮點(diǎn)數(shù)

符號(hào)指數(shù)尾數(shù)符號(hào)指數(shù)尾數(shù)0X00X000255002047012550120470NaN(非數(shù))X255非0X2047非0正的浮點(diǎn)數(shù)01~254任意01~2046任意負(fù)的浮點(diǎn)數(shù)11~254任意11~2046任意注意:IEEE754編碼方案中有2個(gè)0上溢和下溢

目錄常見(jiàn)進(jìn)制及其轉(zhuǎn)換常見(jiàn)術(shù)語(yǔ)二進(jìn)制加法整數(shù)的二進(jìn)制表示方法浮點(diǎn)數(shù)的二進(jìn)制表示方法補(bǔ)碼的幾種常見(jiàn)運(yùn)算負(fù)數(shù)的二進(jìn)制補(bǔ)碼的計(jì)算方法

負(fù)數(shù)的二進(jìn)制補(bǔ)碼的計(jì)算方法示例1:用8位二進(jìn)制補(bǔ)碼表示-141)14的二進(jìn)制補(bǔ)碼表示為0000111022)將該數(shù)各位取反可得1111000123)再計(jì)算111100012+1=111100102-14的8位二進(jìn)制補(bǔ)碼為111100102示例2:-14的二進(jìn)制補(bǔ)碼為111100102,計(jì)算14的二進(jìn)制補(bǔ)碼1)將111100102各位取反可得0000110122)再計(jì)算000011012+1=00001110214的8位二進(jìn)制補(bǔ)碼為000011102減法思路:為了計(jì)算x-y,可以通過(guò)數(shù)學(xué)變形改為計(jì)算x+(-y)示例:計(jì)算28-14(假設(shè)字長(zhǎng)為8位)1)28的8位二進(jìn)制補(bǔ)碼為:0001110022)-14的二進(jìn)制補(bǔ)碼為:14的二進(jìn)制補(bǔ)碼為:000011102各位取反為:111100012加1,得:1111001023)計(jì)算:

000111002+111100102=000011102=140001110011110010+111100001110補(bǔ)碼體系的優(yōu)勢(shì):只需要設(shè)計(jì)加法運(yùn)算的硬件,減法可以轉(zhuǎn)換為加法運(yùn)算,故不需為減法設(shè)計(jì)相應(yīng)硬件由于字長(zhǎng)僅有8位,因此b8位被舍棄。注意:b8位本質(zhì)上是屬于溢出了位擴(kuò)展很多時(shí)候,程序中有不同類(lèi)型間的變量賦值不同類(lèi)型的變量,往往位數(shù)不同,這就涉及擴(kuò)展問(wèn)題Line5:-1最少用2位二進(jìn)制補(bǔ)碼表示,即112,但c8需要8位Line7:ui32是32位,c8是8位1234567charc8;inti32;unsignedintui32;

c8=-1;i32=c8;ui32=(unsignedchar)c8;

8位符號(hào)數(shù)32位符號(hào)數(shù)32位無(wú)符號(hào)數(shù)70c8-1113124231615870ui32c8位擴(kuò)展符號(hào)擴(kuò)展:對(duì)于Line5來(lái)說(shuō),由于c8是符號(hào)數(shù),因此需要將-1的符號(hào)位復(fù)制到c8的高位部分。計(jì)算完成后,c8=111111112,即8位補(bǔ)碼的-1無(wú)符號(hào)擴(kuò)展:對(duì)于Line7來(lái)說(shuō),由于ui32是無(wú)符號(hào)數(shù),因此需要將c8視為無(wú)符號(hào)數(shù),并且為確保擴(kuò)展后的結(jié)果正確,ui32的高位部分應(yīng)該都為0。計(jì)算完成后,ui32=00000000000000000000000011111111270c811111111…-1113124231615870ui3200000000000000000000000011111111c811111111比較C語(yǔ)言定義了多個(gè)比較操作,其運(yùn)算結(jié)果是邏輯的真假值=、≠、>、<、≥、≤比較運(yùn)算的等價(jià)變換:實(shí)現(xiàn)<和=這兩種比較運(yùn)算,再結(jié)合NOT邏輯運(yùn)算,就能實(shí)現(xiàn)上述六種比較運(yùn)算原運(yùn)算等價(jià)運(yùn)算比較:小于運(yùn)算(符號(hào)數(shù))1/3

比較:小于運(yùn)算(符號(hào)數(shù))2/3正確的理論計(jì)算從數(shù)學(xué)上可知,0減-8的結(jié)果應(yīng)該是+8如果用補(bǔ)碼表示+8,則至少需要5位二進(jìn)制補(bǔ)碼,即010002由于b4的存在,故b3的“1”含義是數(shù)值,而不是符號(hào)錯(cuò)誤的實(shí)際計(jì)算前述計(jì)算采用4位二進(jìn)制補(bǔ)碼計(jì)算,結(jié)果為10002由于b4的缺失,故b3的“1”被錯(cuò)誤的解讀為符號(hào)錯(cuò)誤的原因:本質(zhì)上是由于位數(shù)不足,導(dǎo)致計(jì)算結(jié)果+8超出了4位二進(jìn)制補(bǔ)碼的表示范圍,發(fā)生了溢出為了完成減法,必須從b4借位比較:小于運(yùn)算(符號(hào)數(shù))3/3

為了完成減法,必須從b4借位比較:小于運(yùn)算(無(wú)符號(hào)數(shù))解決方案:0擴(kuò)展后再按符號(hào)數(shù)計(jì)算1)如果比較的兩個(gè)數(shù)均為無(wú)符號(hào)數(shù),將其視為符號(hào)數(shù)2)為了能夠用符號(hào)數(shù)正確表達(dá)其原值,需要將兩個(gè)數(shù)分別擴(kuò)展1位符號(hào)位,且符號(hào)位為03)之后,就可以采用前述的方案了相等方案1:采用XOR運(yùn)算,然后判斷結(jié)果是否全01)執(zhí)行XOR運(yùn)算,即C

A⊕B2)將C的各位OR起來(lái),得到1位結(jié)果如果為0,即“A=B”為真如果為1,即“A=B”為假方案2:采用減法運(yùn)算,然后判斷結(jié)果是否全01)執(zhí)行減法運(yùn)算,即C

A-B2)將C的各位OR起來(lái),得到1位結(jié)果如果為0,即“A=B”為真如果為1,即“A=B”為假乘法:無(wú)符號(hào)數(shù)二進(jìn)制乘法的基本計(jì)算過(guò)程與十進(jìn)制乘法基本類(lèi)似示例:計(jì)算01012×10112理論分析結(jié)果:01012×10112=5×11=55實(shí)際計(jì)算結(jié)果:01101112=55基本原理:循環(huán)累加左移后的被乘數(shù)假設(shè)被乘數(shù)A為N位,乘數(shù)B為M位結(jié)果C為N+M-1位

0101

×1011

0101

0101

0000

+0101

0110111C=0fori=0toM-1ifB[i]thenC=C+A<<i乘法:符號(hào)數(shù)

A[31]B[31]結(jié)果00正01負(fù)10負(fù)11正除法的復(fù)雜性運(yùn)算結(jié)果種類(lèi)乘法:運(yùn)算結(jié)果只有一個(gè),即積除法:有2個(gè)運(yùn)算結(jié)果,即商和余數(shù)結(jié)果正負(fù)性質(zhì)數(shù)學(xué)公式:被除數(shù)=除數(shù)×商+余數(shù)示例:-7÷2。如果僅按數(shù)學(xué)公式,可以有2種結(jié)果結(jié)果1:-7=2×(-3)+(-1)結(jié)果2:-7=2×(-4)+1中間計(jì)算過(guò)程乘法:以加法為核心除法:以減法為核心。減法比加法要復(fù)雜些。除法:無(wú)符號(hào)數(shù)1/3示例:計(jì)算10010102除以10002理論分析:10010102為74,10002為8,故74÷8的商為9,余數(shù)為2計(jì)算過(guò)程:與十進(jìn)制除法類(lèi)似,核心是“試商”試商:在二進(jìn)制除法中,商的各位非0即1,“試商”更為簡(jiǎn)單計(jì)算商的每位時(shí),僅需做一次減法然后根據(jù)減法結(jié)果的符號(hào)位判斷是否夠減位序

6543210

1001

商除數(shù)1000

1001010

被除數(shù)

-1000

1010

-1000

0010

余數(shù)注意在示例的計(jì)算過(guò)程中,b2、b1的試商過(guò)程被省略了。計(jì)算機(jī)是很“傻”的,因此在實(shí)際計(jì)算中必須給出完整的計(jì)算過(guò)程。除法:無(wú)符號(hào)數(shù)2/3中間余數(shù):假設(shè)除數(shù)為N位,則中間余數(shù)為N+1位計(jì)算方法:每一次迭代計(jì)算商的一位每次從被除數(shù)中取出1位,構(gòu)成中間余數(shù)的末位試商:用中間余數(shù)減除數(shù),根據(jù)減法結(jié)果決定商的各位取值位序

6543210

0001001

商除數(shù)1000

00001001010

被除數(shù)。初始中間余數(shù)為000012。

-01000

00010

差值<0:商位6為0;中間余數(shù)=中間余數(shù)左移1位║被除數(shù)位5

-01000

00100

差值<0:商位5為0;中間余數(shù)=中間余數(shù)左移1位║被除數(shù)位4

-01000

01001

差值<0:商位4為0;中間余數(shù)=中間余數(shù)左移1位║被除數(shù)位3

-01000

00010

差值≥0:商位3為1;中間余數(shù)=差值左移1位║被除數(shù)位2

-01000

00101

差值<0:商位2為0;中間余數(shù)=中間余數(shù)左移1位║被除數(shù)位1

-01000

01010

差值<0:商位1為0;中間余數(shù)=中間余數(shù)左移1位║被除數(shù)位0

-01000

00010

差值≥0:商位0為1;計(jì)算到最后一位,停止計(jì)算;中間余數(shù)=差值除法:符號(hào)數(shù)3/3符號(hào)數(shù)除法的基本思路1)獲得被除數(shù)、除數(shù)的絕對(duì)值2)執(zhí)行兩者絕對(duì)值的除法,得到商和余數(shù)3)商的符號(hào):由被除數(shù)與除數(shù)的符號(hào)決定,即同號(hào)為正、異號(hào)為負(fù)4)余數(shù)的符號(hào):與被除數(shù)的符號(hào)相同計(jì)算機(jī)指令計(jì)算機(jī)組成與實(shí)現(xiàn)目錄程序執(zhí)行的基本原理指令格式及其操作數(shù)指令集與匯編程序指令編碼匯編與反匯編實(shí)戰(zhàn)從C代碼到可執(zhí)行文件運(yùn)行1/6大體涉及5個(gè)環(huán)節(jié):編譯、匯編、存儲(chǔ)、加載、運(yùn)行95從C代碼到可執(zhí)行文件運(yùn)行2/6CPU不能直接執(zhí)行C源代碼,必須利用編譯器將C源代碼轉(zhuǎn)換為對(duì)應(yīng)的匯編程序C源代碼:其描述方式是適合人書(shū)寫(xiě)和閱讀的匯編代碼:用更加接近CPU可以理解和執(zhí)行的語(yǔ)言編寫(xiě)的程序96編譯相關(guān)內(nèi)容屬于編譯器技術(shù)范疇從C代碼到可執(zhí)行文件運(yùn)行3/6CPU也不能直接執(zhí)行匯編代碼,必須利用匯編器將匯編代碼轉(zhuǎn)換為對(duì)應(yīng)的二進(jìn)制機(jī)器碼匯編程序:每行對(duì)應(yīng)一條機(jī)器指令機(jī)器指令:由一組二進(jìn)制01串組成,是CPU可以理解與執(zhí)行的97匯編相關(guān)內(nèi)容屬于編譯器技術(shù)范疇從C代碼到可執(zhí)行文件運(yùn)行4/6C程序被編譯為一組CPU指令后,就以文件方式被存儲(chǔ)在硬盤(pán)中可執(zhí)行文件是由CPU指令及相關(guān)數(shù)據(jù)組成的由于CPU指令及相關(guān)數(shù)據(jù)以二進(jìn)制方式存儲(chǔ),因此可執(zhí)行文件是不適合人閱讀的98文件相關(guān)內(nèi)容屬于操作系統(tǒng)技術(shù)范疇從C代碼到可執(zhí)行文件運(yùn)行5/6可執(zhí)行文件要被加載到主存后才能被執(zhí)行。指令部分和數(shù)據(jù)部分會(huì)被分別加載到主存中的不同區(qū)域代碼段:這部分主存區(qū)域存儲(chǔ)的是CPU指令數(shù)據(jù)段:這部分主存區(qū)域存儲(chǔ)的是數(shù)據(jù)99將可執(zhí)行文件加載到內(nèi)存屬于操作系統(tǒng)技術(shù)范疇代碼段、數(shù)據(jù)段等內(nèi)容也與編譯器技術(shù)相關(guān)從C代碼到可執(zhí)行文件運(yùn)行6/6CPU執(zhí)行程序的基本過(guò)程就是不斷的讀取、分析和執(zhí)行指令讀取指令:CPU從主存的代碼段中讀取一條指令到內(nèi)部分析指令:CPU分析指令的功能執(zhí)行指令:CPU控制內(nèi)部的功能部件執(zhí)行相應(yīng)的操作CPU有讀、寫(xiě)主存的指令負(fù)責(zé)在CPU與主存間傳輸數(shù)據(jù)100機(jī)器語(yǔ)言1/2指令:CPU理解的“單詞”指令集:CPU理解的全部“單詞”集合Q1:為什么有時(shí)不同的計(jì)算機(jī)使用相同的指令集?例如:iPhone與iPad使用相同的指令集(都是ARM)Q2:為什么有時(shí)不同的計(jì)算機(jī)使用不同的指令集?例如:iPhone與Macbook使用不同的指令集(前者是ARM,后者是X86)101ISA~InstructionSetArchitecture機(jī)器語(yǔ)言2/2如果只有一種ISA可以很好的利用公共軟件,如編譯器、操作系統(tǒng)等如果有多種ISA針對(duì)不同的應(yīng)用可以選擇更適用的ISA不同的指令集有不同的設(shè)計(jì)平衡性考慮功能、性能、存儲(chǔ)器、功耗、復(fù)雜度。。。會(huì)激發(fā)競(jìng)爭(zhēng)和創(chuàng)新102為什么要學(xué)習(xí)匯編?在更深層次理解計(jì)算機(jī)行為學(xué)習(xí)如何寫(xiě)更緊湊和有效的代碼某些情況下,手工編碼的優(yōu)化水平比編譯器高對(duì)于資源緊張的應(yīng)用,可能只適合手工匯編例如:分布式傳感器應(yīng)用為了降低功耗和芯片大小,甚至沒(méi)有OS和編譯器103RISCComplexInstructionSetComputing(CISC)指令集設(shè)計(jì)早期階段傾向于:應(yīng)用有什么操作模式,就增加對(duì)應(yīng)的指令。這導(dǎo)致了CISCReducedInstructionSetComputing(RISC)另一種對(duì)立的設(shè)計(jì)哲學(xué)自然界存在2-8定律。程序也類(lèi)似,為什么?RISC的指導(dǎo)思想1)加速大概率事件2)簡(jiǎn)單意味著更容易設(shè)計(jì)、電路頻率更高3)簡(jiǎn)單功能由硬件實(shí)現(xiàn);復(fù)雜功能(由大量小功能組成)交給軟件處理隱含的物理背景:復(fù)雜的功能也是小概率的104RISC設(shè)計(jì)原則指導(dǎo)思想:CPU越簡(jiǎn)單,性能越高設(shè)計(jì)目標(biāo):減少指令數(shù)量,去除復(fù)雜指令(等效于降低復(fù)雜度)RISC的基本策略指令定長(zhǎng):所有指令都占用32位(1個(gè)字)

降低了從存儲(chǔ)器中讀取指令的復(fù)雜度簡(jiǎn)化指令尋址模式:以基地址+偏移為主

降低了從主存中讀取操作數(shù)的復(fù)雜度ISA的指令不僅數(shù)量少,而且簡(jiǎn)單

降低了指令執(zhí)行的復(fù)雜度只有l(wèi)oad與store兩類(lèi)指令能夠訪存

例如,不允許寄存器+存儲(chǔ)器或存儲(chǔ)器+存儲(chǔ)器把復(fù)雜留給編譯編譯器將高層語(yǔ)言復(fù)雜語(yǔ)句轉(zhuǎn)換為若干簡(jiǎn)單的匯編指令105主流的ISAIntel80x86PC、服務(wù)器、筆記本ARM(AdvancedRISCMachine)手機(jī)、平板出貨量最大的RISC:是x86的20倍PowerPCIBM/Motorola/Apple聯(lián)盟的產(chǎn)物航空電子設(shè)備:飛控、機(jī)載雷達(dá)等網(wǎng)絡(luò)設(shè)備:交換機(jī)、路由器引擎控制器106為什么選擇MIPS真實(shí):工業(yè)界實(shí)際使用的CPU是設(shè)計(jì)師在實(shí)踐中多次迭代、反復(fù)權(quán)衡的產(chǎn)物學(xué)習(xí)標(biāo)準(zhǔn)就是在學(xué)習(xí)設(shè)計(jì)師的思考方法與過(guò)程簡(jiǎn)明:類(lèi)別有限、結(jié)構(gòu)簡(jiǎn)單、層次清晰,易于實(shí)現(xiàn)MIPS是RISC的典型代表生態(tài):軟件開(kāi)發(fā)環(huán)境豐富,易于學(xué)習(xí)和實(shí)踐多種模擬器、C編譯等107目錄程序執(zhí)行的基本原理指令格式及其操作數(shù)指令基本格式指令集與匯編程序指令編碼匯編與反匯編實(shí)戰(zhàn)MIPS指令1/2指令的一般性語(yǔ)法格式:1個(gè)操作符,3個(gè)操作數(shù)opdst,src1,src2op:指令的基本功能dst:保存結(jié)果的寄存器(“destination”)src1:第1個(gè)操作數(shù)(“source1”)src2:第2個(gè)操作數(shù)(“source2”)固定的格式:

有助于人的記憶和書(shū)寫(xiě);

有助于使得硬件簡(jiǎn)單硬件越簡(jiǎn)單,延遲就越小,時(shí)鐘頻率就越高109

MIPS指令2/2每條指令只有1個(gè)操作每行寫(xiě)一條指令很多指令與C運(yùn)算高度相關(guān)如:=,+,-,*,/,&,|一行C代碼會(huì)對(duì)應(yīng)多條指令110目錄程序執(zhí)行的基本原理指令格式及其操作數(shù)第1類(lèi)操作數(shù):寄存器指令集與匯編程序指令編碼匯編與反匯編實(shí)戰(zhàn)計(jì)算機(jī)硬件的操作數(shù)C程序:變量的數(shù)量?jī)H僅受限于內(nèi)存容量程序員通常認(rèn)為內(nèi)存“無(wú)限大”,故聲明變量時(shí)一般不考慮變量的數(shù)量ISA:有一組數(shù)量有限且固定的操作數(shù),稱(chēng)之為寄存器寄存器被內(nèi)置在CPU內(nèi)部寄存器的優(yōu)勢(shì):速度極快(工作速度小于1ns)寄存器的劣勢(shì):數(shù)量少112寄存器1/2MIPS寄存器數(shù)量:32每個(gè)寄存器的寬度都是32位寄存器沒(méi)有類(lèi)型(即無(wú)正負(fù))根據(jù)指令的功能來(lái)解讀寄存器值的正負(fù)即32位編碼是按無(wú)符號(hào)還是符號(hào)解讀,取決于指令寄存器數(shù)量的是設(shè)計(jì)均衡的體現(xiàn)均衡的要素:性能與可用性數(shù)量少:結(jié)構(gòu)簡(jiǎn)單,速度快,能夠存儲(chǔ)在CPU內(nèi)的數(shù)據(jù)少數(shù)量多:結(jié)構(gòu)復(fù)雜,速度慢,能夠存儲(chǔ)在CPU內(nèi)的數(shù)據(jù)多113預(yù)留思考題MIPS寄存器為什么不是16個(gè),也不是64個(gè)?!寄存器2/2寄存器編號(hào):0~31寄存器表示:$x(x為0~31),即$0~$31寄存器名字程序員變量寄存器$s0-$s7←→$16-$23臨時(shí)變量寄存器$t0-$t7←→$8-$15$t8-$t9←→$8-$15114注意使用寄存器名字會(huì)讓代碼可讀性更好編號(hào)名稱(chēng)用途0$zero常量01$at匯編器保留2-3$v0~$v1返回值4-7$a0~$a4參數(shù)8-15$t0-$t7臨時(shí)變量16-23$s0-$s7程序變量24-25$t8-$t9臨時(shí)變量26-27$k0-$k1操作系統(tǒng)臨時(shí)變量28$gp全局指針29$sp棧指針30$fp幀框架指針31$ra返回地址本課程要學(xué)習(xí)的寄存器MIPS指令示例1/2假設(shè):變量a,b和c分別存儲(chǔ)在$s1,$s2和$s3a←→$s1,b←→$s2,c←→$s3整數(shù)加法指令C:

a=b+cMIPS:

add$s1,$s2,$s3整數(shù)減法指令C:

a=b-cMIPS:

sub$s1,$s2,$s3115MIPS指令示例2/2假設(shè):x←→$s0,a←→$s1,b←→$s2,c←→$s3,d←→$s4C語(yǔ)句:x=(a+b)-(c+d);MIPS匯編程序片段$t1,$t2:臨時(shí)變量寄存器注釋?zhuān)禾岣呖勺x性;幫助追蹤寄存器/變量的分配與使用#:是注釋語(yǔ)句的開(kāi)始1161add$t1,$s3,$s4#t1=c+d2add$t2,$s1,$s2#t2=a+b3sub$s0,$t2,$t1#a=(a+b)-(c+d)執(zhí)行序MIPS匯編程序注釋

0號(hào)寄存器由于0在程序中的頻度極高,為此MIPS設(shè)置了0號(hào)寄存器表示方法:$0或$zero值恒為0:讀出的值恒為0;寫(xiě)入的值被丟棄指令的dst為$0:指令使用本身無(wú)錯(cuò),但執(zhí)行時(shí)沒(méi)有實(shí)際意義示例117假設(shè):a←→$s1,b←→$s2,c←→$s3,d←→$s41add$s3,$0,$0#c=02add$s1,$s2,$0#a=b目錄程序執(zhí)行的基本原理指令格式及其操作數(shù)第2類(lèi)操作數(shù):立即數(shù)指令集與匯編程序指令編碼匯編與反匯編實(shí)戰(zhàn)立即數(shù)指令中出現(xiàn)的常量數(shù)值被稱(chēng)為立即數(shù)語(yǔ)法格式opdst,src,imm立即數(shù)替代了第2個(gè)操作數(shù)示例119假設(shè):a←→$s1,b←→$s2,c←→$s3,d←→$s41addi$s1,$s2,5#a=b+52addi$s3,$s3,1#c++問(wèn)題為什么MIPS不設(shè)置subi指令?*subi:減立即數(shù)immediate~立即數(shù)目錄程序執(zhí)行的基本原理指令格式及其操作數(shù)第3類(lèi)操作數(shù):主存單元指令集與匯編程序指令編碼匯編與反匯編實(shí)戰(zhàn)主存單元僅使用寄存器的挑戰(zhàn):有限的寄存器無(wú)法滿足無(wú)限的變量需求1)變量的個(gè)數(shù)無(wú)限:理論上,程序員可以定義任意多變量2)變量的容量巨大:如數(shù)組這樣的大型數(shù)據(jù)結(jié)構(gòu)解決問(wèn)題途徑:主存絕大多數(shù)變量(包括數(shù)據(jù))存儲(chǔ)在主存中需要使用時(shí)再將其加載至寄存器中CPU訪問(wèn)主存,需要解決問(wèn)題:1)CPU如何看待主存的?這就是存儲(chǔ)視圖2)CPU如何定位某個(gè)主存單元?這就是尋址方式3)CPU如何訪問(wèn)訪問(wèn)主存單元?121主存的抽象模型1/3主存:可以被抽象為一個(gè)數(shù)組概念1:主存單元的顆粒度字節(jié):是存儲(chǔ)器最常用的存儲(chǔ)單位概念2:地址主存單元的編號(hào)就是地址,等同于數(shù)組下標(biāo)對(duì)于4GB主存4GB主存共有4G個(gè)字節(jié),即有4G個(gè)存儲(chǔ)單元4G個(gè)存儲(chǔ)單元對(duì)應(yīng)的地址位數(shù)為32位232=4G地址范圍:0000_0000h至FFFF_FFFFhFFFF_FFFFFFFF_FFFEFFFF_FFFDFFFF_FFFCABFFFF_FFFBCDFFFF_FFFA主存容量EFFFFF_FFF94GB01FFFF_FFF8~0000_00030000_00020000_00010000_0000字節(jié)地址bit~比特,byte~字節(jié),word~字主存的抽象模型2/3概念3:CPU字長(zhǎng)CPU字長(zhǎng)一般是指CPU一條指令可以計(jì)算的數(shù)據(jù)的寬度例如MIPS的字長(zhǎng)是32位,即單條MIPS指令可以計(jì)算的數(shù)據(jù)為32位注意:CPU字長(zhǎng)只是限制了單條指令的計(jì)算能力,但是完全可以通過(guò)組合多條指令及必要的存儲(chǔ)單元來(lái)計(jì)算更大位數(shù)的數(shù)據(jù)示例:大數(shù)乘法提示:用一個(gè)數(shù)組的每個(gè)單元來(lái)存儲(chǔ)每一位數(shù)字;然后組織循環(huán),利用最基本的數(shù)學(xué)運(yùn)算知識(shí)獨(dú)立計(jì)算每位結(jié)果及其進(jìn)位158703333333333333333X26666666666666666用16個(gè)單元(16字節(jié))的數(shù)組計(jì)算乘法**循環(huán)16次,每次僅計(jì)算3*2=6主存的抽象模型3/3

FFFF_FFFCFFFF_FFF8ABCDEF01~0000_00080000_00040000_0000字節(jié)3字節(jié)2字節(jié)1字節(jié)0字內(nèi)偏移:0字內(nèi)偏移:1字內(nèi)偏移:2字內(nèi)偏移:30000_000B0000_000A0000_00090000_0008字地址地址的表示方式

FFFF_FFFFFFFF_FFFEFFFF_FFFDFFFF_FFFCB2ABFFFF_FFFBCDFFFF_FFFAPEFFFFF_FFF9B101FFFF_FFF8~0000_00030000_00020000_00010000_0000字節(jié)地址baseaddress~基地址,offset~偏移“基地址+偏移”的優(yōu)點(diǎn)一致:與數(shù)據(jù)結(jié)構(gòu)的訪問(wèn)方式高度一致示例1:數(shù)組單元A[5]的地址=數(shù)組首地址+4×5示例2:以B.z為例,可以推算出z與B的起始地址的距離為了便于分配存儲(chǔ)器,編譯器會(huì)把x、y、z連續(xù)存儲(chǔ)統(tǒng)一:可以用某個(gè)固定base與不同的offset計(jì)算得到任意地址靈活:不同的{base,offset}組合可以對(duì)應(yīng)同一個(gè)地址,為軟件編程帶來(lái)很大的靈活性示例:可以從數(shù)組起始向末尾遍歷(base為數(shù)組第0單元地址,offset為正),也可以從數(shù)組末尾向起始遍歷(base為數(shù)組最后單元地址,offset為負(fù))intA[100];struct{

intx;shorty;charz;}B;數(shù)據(jù)傳輸指令1/2語(yǔ)法格式opreg,off(base)reg:寫(xiě)入或讀出的寄存器base:存儲(chǔ)基地址的寄存器由于存儲(chǔ)的是地址信息,因此base的值被作為無(wú)符號(hào)數(shù)off:以字節(jié)為單位的偏移量off是立即數(shù),可正可負(fù)讀寫(xiě)的存儲(chǔ)單元的實(shí)際地址=base+off127offset~偏移數(shù)據(jù)傳輸指令2/2加載字:lw(LoadWord)讀取地址為base+off的主存單元,然后寫(xiě)入reg存儲(chǔ)字:sw(StoreWord)讀取reg,然后寫(xiě)入地址為base+off的存儲(chǔ)單元示例128假設(shè):A[]←→$s3,a←→$s01lw$t0,12($s3)#$t0=A[3]2add$t0,$s2,$t0#$t0=A[3]+a3sw$t0,40($s3)#A[10]=A[3]+a注意lw/sw讀寫(xiě)對(duì)象是字,因此偏移量必須是4的倍數(shù)intA[100];A[10]=A[3]+a;主存單元使用的限制MIPS不支持主存單元參與運(yùn)算例如以下用法均是錯(cuò)誤用法add$t0,$s1,0($s2)sub$t0,0($s2),12MIPS支持的運(yùn)算寄存器—寄存器:寄存器與寄存器運(yùn)算,結(jié)果寫(xiě)入寄存器寄存器—立即數(shù):寄存器與立即數(shù)運(yùn)算,結(jié)果寫(xiě)入寄存器129注意在MIPS中,主存單元僅能與寄存器進(jìn)行數(shù)據(jù)交換。之所以這樣設(shè)計(jì),是為了便于設(shè)計(jì)流水線CPU。寄存器vs.主存變量比寄存器多怎么辦?把最常用的變量保存在寄存器中其他不常用的變量保存在主存中為什么不把變量都放在存儲(chǔ)器中?寄存器比存儲(chǔ)器快100~500倍130目錄程序執(zhí)行的基本原理指令格式及其操作數(shù)指令集與匯編程序匯編程序基本結(jié)構(gòu)指令編碼匯編與反匯編實(shí)戰(zhàn)代碼段與數(shù)據(jù)段程序由指令和數(shù)據(jù)構(gòu)成,分別存儲(chǔ)在主存中的不同區(qū)域所有程序都有指令;絕大多數(shù)程序都會(huì)包含數(shù)據(jù)分離存儲(chǔ)是為了防止兩者之間相互干擾代碼段:存放程序中指令序列的一塊內(nèi)存區(qū)域數(shù)據(jù)段:存儲(chǔ)程序中全局變量的一塊內(nèi)存區(qū)域代碼段數(shù)據(jù)段空間大小有程序中的指令部分決定程序運(yùn)行前就已經(jīng)確定由程序中的全局變量部分決定程序運(yùn)行前就已經(jīng)確定讀寫(xiě)權(quán)限只讀*(ReadOnly)可讀可寫(xiě)(Read/Write匯編關(guān)鍵字.text.data*某些CPU允許代碼段為可寫(xiě),即允許程序自修改(self-modifyingcode)匯編程序的基本結(jié)構(gòu)關(guān)鍵字“.text”和“.data”用來(lái)區(qū)分程序的數(shù)據(jù)部分和代碼部分“.text”與“.data”本質(zhì)上是代表基地址的標(biāo)號(hào)CPU的內(nèi)存布局是確定的,即代碼段、數(shù)據(jù)段在主存中的基地址是確定的根據(jù)數(shù)據(jù)段和代碼段的基地址,匯編器能推算.data后面的各全局變量以及.text后面的各指令對(duì)應(yīng)的相對(duì)偏移,也自然可以計(jì)算相應(yīng)的絕對(duì)地址示例:ori指令的偏移量是41234567.data

str:.asciiz"1234+4321"

.text

lui$s7,0x1001

ori$s7,$s7,0x0數(shù)據(jù)段定義一個(gè)全局變量

正文段目錄程序執(zhí)行的基本原理指令格式及其操作數(shù)指令集與匯編程序全局變量聲明指令編碼匯編與反匯編實(shí)戰(zhàn)

溫馨提示

  • 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)論