




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第一章
計算機系統(tǒng)概述為何要開設計算機系統(tǒng)原理課程計算機系統(tǒng)原理課程概要計算機系統(tǒng)概述計算機性能評價主要內(nèi)容課程由來課程內(nèi)容概要馮.諾依曼結構計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結構計算機性能評價用“系統(tǒng)思維”分析問題ISO
C90標準下,在32位系統(tǒng)上以下C表達式的結果是什么?-2147483648<
2147483647false(與事實不符)!Why?ISO
C99標準下為true,Why?以下關系表達式結果呢?inti=
-2147483648;i<
2147483647true!Why?-2147483647-1 < 2147483647,結果怎樣?理解該問題需要知道:編譯器如何處理字面量高級語言中運算規(guī)則高級語言與指令之間的對應機器指令的執(zhí)行過程機器級數(shù)據(jù)的表示和運算……用“系統(tǒng)思維”分析問題sum(inta[],unsigned
len){int i,sum=
0;for (i=0;i<=len–1;
i++)sum+=
a[i];return
sum;}當用len=0調(diào)用sum函數(shù)時,其返回值應該是多少?當參數(shù)len為0時,返回值應該是0,但是在機器上執(zhí)行時,卻發(fā)生訪存異常。但當len為int型時則正常。Why?理解該問題需要知道:高級語言中運算規(guī)則機器指令的含義和執(zhí)行計算機內(nèi)部的運算電路異常的檢測和處理虛擬地址空間……若x和y為int型,當x=65535時,y=x*x; y的值為多少?y=-131071。Why?現(xiàn)實世界中,x2≥0,但在計算機世界并不一定成立。對于任何int型變量x和y,(x>y)==
(-x<-y)總成立嗎?當x=-2147483648,y任意(除-2147483648外)時不成立Why?在現(xiàn)實世界中成立,但在計算機世界中并不一定成立。用“系統(tǒng)思維”分析問題理解該問題需要知道:機器級數(shù)據(jù)的表示機器指令的執(zhí)行計算機內(nèi)部的運算電路用“系統(tǒng)思維”分析問題main.cint
d=100;intx=200;int
main(){p1(
);printf(“d=%d,x=%d\n”,d,x);return
0;}打印結果是什么?d=0,x=1072693
248Why?p1.cdouble
d;voidp1(
){d=1.0;}理解該問題需要知道:機器級數(shù)據(jù)的表示變量的存儲空間分配數(shù)據(jù)的大端/小端存儲方式鏈接器的符號解析規(guī)則……用“系統(tǒng)思維”分析問題/*
復制數(shù)組到堆中,count為數(shù)組元素個數(shù)
*/intcopy_array(int*array,intcount)
{int
i;/*
在堆區(qū)申請一塊內(nèi)存
*/int*myarray=(int*)malloc(count*sizeof(int));if(myarray==
NULL)return
-1;for(i=0;i<count;
i++)myarray[i]=
array[i];return
count;}當參數(shù)count很大時,則count*sizeof(int)會溢出。如count=230+1時,count*sizeof(int)=4。堆(heap)中大量數(shù)據(jù)被破壞!理解該問題需要知道:乘法運算及溢出虛擬地址空間存儲空間映射……當count=230+1時,程序會發(fā)生什么情況?用“系統(tǒng)思維”分析問題運行結果為“Floating
point
exception”,顯然CPU檢測到了溢出異常上述結果在Linux上獲得,為什么兩者結果不同?在Windows上運算的結果又為何不同?理解該問題需要知道:機器級數(shù)據(jù)的表示(如:真值和機器數(shù)的關系)機器指令的含義和執(zhí)行(如:取負指令、除法指令)計算機內(nèi)部的運算電路(如:除法電路會判是否異常)編譯器如何優(yōu)化(如:a/-1可用取負指令實現(xiàn))操作系統(tǒng)如何處理異常(如:除法錯異常的處理)……代碼段一:inta=
2147483648;intb=a/-1;printf("%d,%d\n",a,b);運行結果為-2147483648,-2147483648Warning:thisdecimalconstantisunsignedonlyinISOC90[enabledby
default]代碼段二:inta=
2147483648;intb=-1;intc=a/
b;printf("%d,%d\n",a,
c);用“系統(tǒng)思維”分析問題以下是一段C語言代碼:#include
<stdio.h>main(){doublea=10;printf("a=%d\n",
a);}在IA-32上運行時,打印結果為a=0在x86-64上運行時,打印出來的a是一個不確定值為什么?理解該問題需要知道:IEEE
754
的表示X87
FPU的體系結構IA-32和x86-64中過程調(diào)用的參數(shù)傳遞計算機內(nèi)部的運算電路……用“系統(tǒng)思維”分析問題doublefun(int
i){volatiledoubled[1]={3.14};volatilelongint
a[2];a[i]=1073741824;/*Possiblyoutofbounds*/returnd[0];}對于上述C語言函數(shù),i=0~4時,fun(i)分別返回什么值?fun(0)
3.14fun(1)
3.14fun(2)
3.1399998664856fun(3)
2.00000061035156fun(4)
3.14,
然后存儲保護錯理解該問題需要知道:機器級數(shù)據(jù)的表示過程調(diào)用機制棧幀中數(shù)據(jù)的布局……Why?用“系統(tǒng)思維”分析問題voidcopyji(intsrc[2048][2048],int
dst[2048][2048]){int
i,j;for(j=0;j<2048;j++)for(i=0;i<2048;
i++)dst[i][
j]
=
src[i][
j];}voidcopyij(intsrc[2048][2048],int
dst[2048][2048]){int
i,j;for(i=0;i<2048;i++)for(
j=0;j<2048;j++)dst[i][
j]
=
src[i][
j];}21times
slower(Pentium
4)Why?以上兩個程序功能完全一樣,算法完全一樣,因此,時間和空間復雜度完全一樣,執(zhí)行時間一樣嗎?理解該問題需要知道:數(shù)組的存放方式Cache機制訪問局部性……用“系統(tǒng)思維”分析問題使用老版本gcc
–O2編譯時,程序一輸出0,程序二輸出卻是1Why?用“系統(tǒng)思維”分析問題關鍵差別在于一條指令:fldl和
fildl理解該問題需要知道:數(shù)據(jù)的表示編譯(程序的轉換)局部變量在棧中的位置……計算機系統(tǒng)是一個整體看了前面的舉例,你的感覺是什么呢?– 計算機好像不可靠從機器角度來說,它永遠對!你的感覺不可靠!程序執(zhí)行結果不僅依賴于高級語言語法和語義,還與其他好多方面有關理解程序的執(zhí)行結果要從系統(tǒng)層面考慮!本來以為學學編程和計算機基本原理就能當程序員,沒想到還挺復雜的,并不是那么簡單學完“計算機系統(tǒng)原理”就會對計算機系統(tǒng)有清晰的認識,以后再學其他相關課程就容易多了。要把很多概念和知識聯(lián)系起來才能理解程序的執(zhí)行結果把許多概念和知識聯(lián)系起來就是李國杰院士所提出的“系統(tǒng)思維”。即:站在“計算機系統(tǒng)”的角度考慮問題!系統(tǒng)能力基于“系統(tǒng)思維”系統(tǒng)思維從計算機系統(tǒng)角度出發(fā)分析問題和解決問題首先取決于對計算機系統(tǒng)有多了解,“知其然并知其所以然”高級語言語句都要轉換為機器指令才能在計算機上執(zhí)行機器指令是一串0/1序列,能被機器直接理解并執(zhí)行計算機系統(tǒng)是模運算系統(tǒng),字長有限,高位被丟棄運算器不知道參加運算的是帶符號數(shù)還是無符號數(shù)在計算機世界,x*x可能小于0,(x+y)+z不一定等于x+(y+z)訪問內(nèi)存需幾十到幾百個時鐘,而訪問磁盤要幾百萬個時鐘進程具有獨立的邏輯控制流和獨立的地址空間過程調(diào)用使用棧存放參數(shù)和局部變量等,遞歸過程有大量額外指令,增加時間開銷,并可能發(fā)生棧溢出…….只有先理解系統(tǒng),才能設計、改進系統(tǒng),并應用好系統(tǒng)!基本認識為什么要學習計算機系統(tǒng)原理?為什么要學習計算機系統(tǒng)原理課程呢?強化“系統(tǒng)思維”更好地理解計算機系統(tǒng),從而編寫出更好的程序編程序時少出錯在程序出錯時很快找到出錯的地方編寫出更快的程序明白程序是怎樣在計算機上執(zhí)行的為后續(xù)課程的學習打下良好基礎– …….主要內(nèi)容課程由來課程內(nèi)容概要馮.諾依曼結構計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結構計算機性能評價什么是計算機系統(tǒng)?計算機系統(tǒng)抽象層的轉換程序執(zhí)行結果不僅取決于算法、程序編寫而且取決于語言處理系統(tǒng)操作系統(tǒng)ISA微體系結構不同計算機課程處于不同層次必須將各層次關聯(lián)起來解決問題計算機系統(tǒng)原理內(nèi)容提要計算機系統(tǒng)抽象層課程目標:清楚理解計算機是如何生成和運行可執(zhí)行文件的!重點在高級語言以下各抽象層– C語言程序設計層數(shù)據(jù)的機器級表示、運算語句和過程調(diào)用的機器級表示操作系統(tǒng)、編譯和鏈接的部分內(nèi)容指令集體系結構(ISA)和匯編層指令系統(tǒng)、機器代碼、匯編語言微體系結構及硬件層CPU的通用結構層次結構存儲系統(tǒng)軟件硬件課程內(nèi)容概要/*sum.c*/intsum(inta[],unsigned
len){int i,sum=0;for (i=0;i<=len–1;
i++)sum+=
a[i];return
sum;}/*main.c*/int
main(){int a[1]={100};intsum;sum=sum(a,0);printf(“%d”,sum);}數(shù)據(jù)的表示數(shù)據(jù)的運算各類語句的轉換與表示(指令)各類復雜數(shù)據(jù)類型的轉換表示過程(函數(shù))調(diào)用的轉換表示鏈接(linker)和加載程序執(zhí)行(存儲器訪問)異常和中斷處理輸入輸出(I/O)課程內(nèi)容概要三個主題:表示(Representation)不同數(shù)據(jù)類型(包括帶符號整數(shù)、無符號整數(shù)、浮點數(shù)、數(shù)組、結構等)在寄存器或存儲器中如何表示和存儲?指令如何表示和編碼(譯碼)?存儲地址(指針)如何表示以及如何生成復雜數(shù)據(jù)結構中數(shù)據(jù)元素的地址?轉換(Translation)和鏈接(Link)高級語言程序?qū)臋C器級代碼是怎樣的?如何合并成可執(zhí)行文件?執(zhí)行控制流(Control
flow)計算機能理解的“程序”是如何組織和控制的?在磁盤中的可執(zhí)行文件如何加載到主存并執(zhí)行的?在程序執(zhí)行過程中CPU如何訪問指令和操作數(shù)?I/O操作的執(zhí)行控制流如何從用戶態(tài)轉到內(nèi)核態(tài)?課程內(nèi)容概要前導知識:C語言程序設計、數(shù)字邏輯電路基礎內(nèi)容組織:兩大部分第一部分
系統(tǒng)概述和可執(zhí)行文件的生成(表示和轉換)計算機系統(tǒng)概述數(shù)據(jù)的機器級表示與處理程序的轉換及機器級表示第二部分
可執(zhí)行文件的運行(執(zhí)行控制流)程序的鏈接和加載執(zhí)行層次結構存儲系統(tǒng)I/O操作的實現(xiàn)參考資源MOOC網(wǎng)站計算機系統(tǒng)基礎(一):程序的表示、轉換與鏈接https:///course/NJU-1001625001計算機系統(tǒng)基礎(二):程序的執(zhí)行和存儲訪問https:///course/NJU-1001964032計算機系統(tǒng)基礎(三):異常、中斷和輸入/輸出https:///course/NJU-1002532004計算機系統(tǒng)基礎(四):編程與調(diào)試實踐https:///course/NJU-1449521162計算機系統(tǒng)基礎(五):x86模擬器編程實踐https:///course/NJU-1464941173前導課程–C語言程序設計、(數(shù)字邏輯電路,不是必須)教材:–《計算機系統(tǒng)原理》,袁春風,機械工業(yè)出版社主要參考書:–《計算機系統(tǒng)基礎(第2版)》袁春風等,機械工業(yè)出版社,2018–《深入理解計算機系統(tǒng)》(第3版),Randal
E.
Bryant,
david
R.O’Hallaron著,龔奕利等譯,機械工業(yè)出版社,2016主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結構計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結構計算機性能評價第一臺通用電子計算機的誕生–美國賓夕法尼亞大學研制–用于解決復雜彈道計算問題–5000次加法/s–平方、立方、sin、cos等–用十進制表示信息并運算1935-1939年,第一臺電子數(shù)字計算機樣機(ABC)研制成功1946年,第1臺實際使用的電子數(shù)字計算機
ENIAC誕生–由電子真空管組成ElectronicNumericalIntegratorAndComputer電子數(shù)字積分計算機–采用手動編程,通過設置開關和插拔電纜來實現(xiàn)“世界第一臺電子計算機”之爭:1973年美國明尼蘇達地區(qū)法院推翻并吊銷了莫克利的專利,宣布美國艾奧瓦州立大學約翰·文森特·阿塔那索夫(John
Vincent
Atanasoff)被稱為“電子計算機之父”ElectronicNumericalIntegratorAnd
Computer占地面積170平方米重30噸有18000多個真空管耗電160千瓦該機正式運行到1955年10月2日,這十年間共運行80
223個小時馮·諾依曼的故事1944年,馮·諾依曼參加原子彈的研制工作,涉及極為困難的計算。1944年夏的一天,諾依曼巧遇美國彈道實驗室的軍方負責人戈爾斯坦,他正參與ENIAC的研制工作。馮·諾依曼被戈爾斯坦介紹加入ENIAC研制組,1945年,他們在共同討論的基礎上,馮·諾依曼以“關于EDVAC的報告草案”為題,起草了長達101頁的總結報告,發(fā)表了全新的“存儲程序通用電子計算機方案”。一向?qū)8憷碚撗芯康钠樟炙诡D高等研究院批準讓馮·諾依曼建造計算機,其依據(jù)就是這份報告。ElectronicDiscreteVariableAutomaticComputer現(xiàn)代計算機的原型1946年,普林斯頓高等研究院(the
Institute
for
Advance
Studyat
Princeton,IAS
)開始設計“存儲程序”計算機,被稱為IAS計算機(1951年才完成,它并不是第一臺存儲程序計算機,1949年由英國劍橋大學完成的EDSAC是第一臺)。在那個報告中提出的計算機結構被稱為馮·諾依曼結構。馮·諾依曼結構最重要的思想是什么?“存儲程序(Stored-program)”
工作方式:任何要計算機完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動執(zhí)行。一旦程序被啟動,計算機應能在不需操作人員干預下,自動完成逐條取出指令和執(zhí)行指令的任務。馮·諾依曼結構計算機也稱為馮·諾依曼機器(Von
NeumannMachine)。幾乎現(xiàn)代所有的通用計算機大都采用馮·諾依曼結構,因此,IAS計算機是現(xiàn)代計算機的原型機。馮·諾依曼結構計算機采用存儲程序工作方式:任何要計算機完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動執(zhí)行。一旦程序被啟動,計算機應能在不需操作人員干預下,自動完成逐條取出指令和執(zhí)行指令的任務。你認為馮·諾依曼結構是怎樣的?l 應該有個主存,用來存放程序和數(shù)據(jù)l 應該有一個自動逐條取出指令的部件l 還應該有具體執(zhí)行指令(即運算)的部件l 程序由指令構成l 指令描述如何對數(shù)據(jù)進行處理l 應該有將程序和原始數(shù)據(jù)輸入計算機的部件l 應該有將運算結果輸出計算機的部件你還能想出更多嗎?你猜得八九不離十了
IAS計算機結構
馮.諾依曼結構計算機模型
早期,部件之間用分散方式相連現(xiàn)在,部件之間大多用總線方式相連趨勢,點對點(分散方式)高速連接馮·諾依曼結構的主要思想馮·諾依曼結構的主要思想是什么呢?計算機應由運算器、控制器、存儲器、輸入設備和輸出設備五個基本部件組成。各基本部件的功能是:存儲器不僅能存放數(shù)據(jù),而且也能存放指令,形式上兩者沒有區(qū)別,但計算機應能區(qū)分數(shù)據(jù)還是指令;控制器應能自動取出指令來執(zhí)行;運算器應能進行加/減/乘/除四種基本算術運算,并且也能進行一些邏輯運算和附加運算;操作人員可以通過輸入設備、輸出設備和主機進行通信。內(nèi)部以二進制表示指令和數(shù)據(jù)。每條指令由操作碼和地址碼兩部分組成。操作碼指出操作類型,地址碼指出操作數(shù)的地址。由一串指令組成程序。采用“存儲程序”工作方式。GPRs0123PCMARMDR標志寄存器控制器數(shù)據(jù)控制地址IR存儲器01231415OPaddr輸入設備輸出設備控制信號線數(shù)據(jù)傳送線中央處理器(CPU)現(xiàn)代計算機結構模型FABALUALUop計算機是如何工作的呢?計算機相當于現(xiàn)實生活中的什么?工廠、飯店認識計算機中最基本的部件CPU:中央處理器;PC:程序計數(shù)器;MAR:存儲器地址寄存器ALU:算術邏輯部件;IR:指令寄存器;MDR:存儲器數(shù)據(jù)寄存器GPRs:通用寄存器組(由若干通用寄存器組成,早期就是累加器)GPRs0123PCMARMDR標志寄存器控制器數(shù)據(jù)控制地址IR存儲器01231415OPaddr輸入設備輸出設備中央處理器(CPU)FABALUALUop控制信號線數(shù)據(jù)傳送線計算機是如何工作的?先想象一下媽媽是怎樣做一桌你喜歡(指定)的菜的?廚房-CPU,你媽-控制器,盤-GPRs,鍋灶等-ALU
,架子-存儲器GPRs0123PCMARMDR標志寄存器控制器數(shù)據(jù)控制地址IR存儲器01231415OPaddr輸入設備輸出設備中央處理器(CPU)FABALUALUop控制信號線數(shù)據(jù)傳送線計算機是如何工作的?l 做菜前原材料(數(shù)據(jù))和菜譜(指令)都按序放在廚房外的架子(存儲器)上,每個架子有編號(存儲單元地址)。菜譜上信息:原料位置、做法、做好的菜放在哪里等例如,把10、11號架上的原料一起炒,并裝入3號盤然后,我告訴媽媽從第5個架上(起始PC=5)指定菜譜開始做l 開始做菜第一步:從5號架上取菜譜(根據(jù)PC取指令)第二步:看菜譜(指令譯碼)第三步:從架上或盤中取原材料(取操作數(shù))第四步:洗、切、炒等具體操作(指令執(zhí)行)第五步:裝盤或直接送桌(回寫結果)第六步:算出下一菜譜所在架子號6=5+1(修改PC的值)繼續(xù)做下一道菜(執(zhí)行下一條指令)類似“存儲程序”工作方式計算機是如何工作的?如果你知道你媽媽是如何做菜的,你就已經(jīng)知道計算機是如何工作的!你能告訴我計算機是如何工作的嗎?
“存儲程序”工作方式!GPRs0123PCMARMDR標志寄存器控制器數(shù)據(jù)控制地址IR存儲器01231415OPaddr輸入設備輸出設備中央處理器(CPU)FABALUALUop控制信號線數(shù)據(jù)傳送線計算機是如何工作的?程序由指令組成,若所有指令執(zhí)行完,則程序執(zhí)行結束l 程序在執(zhí)行前數(shù)據(jù)和指令事先存放在存儲器中,每條指令和每個數(shù)據(jù)都有地址,指令按序存放,指令由OP、ADDR字段組成,程序起始地址置PC(原材料和菜譜都放在廚房外的架子上,
每個架子有編號。媽媽從第5個架上指定菜譜開始做)l 開始執(zhí)行程序第一步:根據(jù)PC取指令(從5號架上取菜譜)第二步:指令譯碼(看菜譜)第三步:取操作數(shù)(從架上或盤中取原材料)第四步:指令執(zhí)行(洗、切、炒等具體操作)第五步:回寫結果(裝盤或直接送桌)第六步:修改PC的值(算出下一菜譜所在架子號6=5+1)繼續(xù)執(zhí)行下一條指令(繼續(xù)做下一道菜)計算機是如何工作的?程序啟動前,指令和數(shù)據(jù)都存放在存儲器中,形式上沒有差別,都是0/1序列采用”存儲程序“工作方式:– 程序由指令組成,程序被啟動后,計算機能自動取出一條一條指令執(zhí)行,在執(zhí)行過程中無需人的干預。指令執(zhí)行過程中,指令和數(shù)據(jù)被從存儲器取到CPU,存放在CPU內(nèi)的寄存器中,指令在IR中,數(shù)據(jù)在GPR中。指令中需給出的信息:操作性質(zhì)(操作碼)源操作數(shù)1
或/和
源操作數(shù)2(立即數(shù)、寄存器編號、存儲地址)目的操作數(shù)地址
(寄存器編號、存儲地址)存儲地址的描述與操作數(shù)的數(shù)據(jù)結構有關!IR?GPR?主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結構計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結構計算機性能評價用機器語言編寫程序,并記錄在紙帶或卡片上最早的程序開發(fā)過程穿孔表示0,未穿孔表示10:0101
01101:0010
01002:
……3:
……4:0110
01115:
……6:
……假設:0010-jxx若在第4條指令前加入指令,則需重新計算地址碼(如jxx的目標地址),然后重新打孔。不靈活!書寫、閱讀困難!太原始了,無法忍受,咋辦?用符號表示而不用0/1表示!輸出:指示燈等輸入:按鈕、開關;所有信息都是0/1序列!轉移指令若用符號表示跳轉位置和變量位置,是否簡化了問題?于是,匯編語言出現(xiàn)用助記符表示操作碼用標號表示位置用助記符表示寄存器–
…..用匯編語言開發(fā)程序0:0101
01101:0010
01002:
……3:
……4:0110
01115:
……6:
……subBjnz
L0…………L0:add
C……B:……C:
……在第4條指令前加指令時不用改變sub、jnz和add指令中的地址碼!你認為用匯編語言編寫的優(yōu)點是: 7:
……不會因為增減指令而需要修改其他指令不需記憶指令碼,編寫方便可讀性比機器語言強不過,這帶來新的問題,是什么呢?人容易了,可機器不認識這些指令了!需將匯編語言轉換為機器語言!用匯編程序轉換匯編語言源程序由匯編指令構成你能用一句話描述什么是匯編指令嗎?用助記符和標號來表示的指令(與機器指令一一對應)指令又是什么呢?包含操作碼和操作數(shù)或其地址碼(機器指令用二進制表示,匯編指令用符號表示)– 可以描述:取(或存一個數(shù))兩個數(shù)加(或減、乘、除、與、或等)根據(jù)運算結果判斷是否轉移執(zhí)行想象用匯編語言編寫復雜程序是怎樣的情形?(例如,用匯編語言實現(xiàn)排序(sort)、矩陣相乘)進一步認識機器級語言subBjnz
L0…………L0:add
C……B:……C:
……機器語言和匯編語言都是面向機器結構的語言,故它們統(tǒng)稱為機器級語言– 需要描述的細節(jié)太多了!程序會很長很長!而且在不同結構的機器上就不能運行!結論:用匯編語言比機器語言好,但是,還是很麻煩!SKIP指令所能描述的功能對于以下結構的機器,你能設計出幾條指令嗎?LoadM#,R# (將存儲單元內(nèi)容裝入寄存器)Store
R#,M# (將寄存器內(nèi)容裝入存儲單元)Add
R#,R#
(類似的還有Sub,Mul等;操作數(shù)還可“R#,M#”等)BACKGPRs0123PCMARMDR標志寄存器控制器數(shù)據(jù)控制地址IR存儲器01231415OPaddr輸入設備輸出設備中央處理器(CPU)FABALUALUop控制信號線數(shù)據(jù)傳送線用高級語言開發(fā)程序處理邏輯分為三種結構順序結構、選擇結構、循環(huán)結構有兩種轉換方式:“編譯”和“解釋”編譯程序(Complier):將高級語言源程序轉換為機器級目標程序,執(zhí)行時只要啟動目標程序即可解釋程序(Interpreter
):將高級語言語句逐條翻譯成機器指令并立即執(zhí)行,不生成目標文件。隨著技術的發(fā)展,出現(xiàn)了許多高級編程語言它們與具體機器結構無關面向算法描述,比機器級語言描述能力強得多高級語言中一條語句對應幾條、幾十條甚至幾百條指令有“面向過程”和“面向?qū)ο蟆钡恼Z言之分現(xiàn)在,幾乎所有程序員都用高級語言編程,但最終要將高級語言轉換為機器語言程序SoftwareSystem
software(系統(tǒng)軟件)
-
簡化編程過程,并使硬件資源被有效利用操作系統(tǒng)(Operating
System):硬件資源管理,用戶接口語言處理系統(tǒng):翻譯程序+
Linker,
Debug,
etc
…翻譯程序(Translator)有三類:匯編程序(Assembler):匯編語言源程序→機器語言目標程序編譯程序(Complier):高級語言源程序→機器級目標程序解釋程序(Interpreter
):將高級語言語句逐條翻譯成機器指令并立即執(zhí)行,不生成目標文件。其他實用程序:
如:磁盤碎片整理程序、備份程序等Application
software(應用軟件)
-
解決具體應用問題/完成具體應用任務各類媒體處理程序:Word/Image/Graphics/…管理信息系統(tǒng)
(MIS)Game, …程序和指令執(zhí)行過程舉例GPRs0123PCMARMDR標志寄存器控制器數(shù)據(jù)控制地址IR存儲器01231415OPaddr輸入設備輸出設備FABALUALUop8位模型機M:8位定長指令字,4個GPR,16個主存單元中央處理器(CPU)數(shù)據(jù)傳送線控制信號線程序和指令執(zhí)行過程舉例假設模型機M中8位指令,格式有兩種:R型、M型格式4位2位2位功能說明R型oprtrsR[rt]←R[rt]
op
R[rs] 或R[rt]←
R[rs]M型opaddrR[0]←M[addr]或M[addr]←
R[0]rs和rt為通用寄存器編號;addr為主存單元地址R型:op=0000,寄存器間傳送(mov);
op=0001,加(add)M型:op=1110,取數(shù)(load);op=1111,存數(shù)(store)問題:指令11100111的功能是什么?答:因為op=1110,故是M型load指令,功能為:R[0]
←M[0111],即:將主存地址0111(7號單元)中的8位數(shù)據(jù)裝入到0號寄存器中。程序和指令執(zhí)行過程舉例若在M上實現(xiàn)“z=x+y”,x和y分別存放在主存5和6號單元中,結果z存放在7號單元中,則程序在主存單元中的初始內(nèi)容為:主存地址主存單元內(nèi)容內(nèi)容說明(Ii表示第i條指令)指令的符號表示01110
0110I1:
R[0]
←
M[6];op=1110:取數(shù)操作loadr0,
6#10000
0100I2:
R[1]
←
R[0];op=0000:傳送操作movr1,
r021110
0101I3:
R[0]
←
M[5];op=1110:取數(shù)操作loadr0,
5#30001
0001I4:
R[0]
←
R[0]
+
R[1];op=0001:加操作addr0,
r141111
0111I5:
M[7]←
R[0];op=1111:存數(shù)操作store7#,
r050001
0000操作數(shù)x,值為16 程序執(zhí)行過程及60010
0001操作數(shù)y,值為33 其結果是什么?70000
0000結果z,初始值為0程序和指令執(zhí)行過程舉例程序執(zhí)行過程I1:1110
0110取指令IR←M[0000]指令譯碼op=1110,取數(shù)PC增量PC←0000+1取數(shù)并執(zhí)行MDR←M[0110]送結果R[0]←MDR執(zhí)行結果R[0]=33指令I1(PC=0)的執(zhí)行過程隨后執(zhí)行PC=1中的指令I2GPRs0123PCMARMDR標志寄存器控制器數(shù)據(jù)控制地址IR存儲器01231415OPaddr輸入設備輸出設備中央處理器(CPU)程序和指令執(zhí)行過程舉例FABALUALUop1110
0110指令
1110
0110功能為R[0]
←M[0110],指令執(zhí)行過程如下:取指IR←M[PC]:MAR←PC;控制線←Read;IR←MDR取數(shù)R[0]←M[addr]:MAR←addr;控制線←Read;R[0]←MDR數(shù)據(jù)傳送線控制信號線程序和指令執(zhí)行過程舉例I2:0000
0100I3:1110
0101IR←M[0001]IR←M[0010]op=0000,傳送op=1110,取數(shù)PC←0001+1PC←0010+1A←R[0]、movMDR←M[0101]R[1]←FR[0]←MDRR[1]=33R[0]=16取指令指令譯碼PC增量取數(shù)并執(zhí)行送結果執(zhí)行結果程序和指令執(zhí)行過程舉例取指令指令譯碼PC增量取數(shù)并執(zhí)行送結果執(zhí)行結果I4:0001
0001I5:1111
0111IR←M[0011]IR←M[0100]op=0001,加op=1111,存數(shù)PC←0011+1PC←0100+1A←R[0]、B←R[1]、addMDR←R[0]R[0]←FM[0111]←MDRR[0]=16+33=49M[7]=49GPRs0123ALUPCMARMDR標控制器數(shù)據(jù)控制地址IR存儲器0123OPaddr輸入設備輸出設備程序和指令執(zhí)行過程舉例FABALUop:中央處理器(CPU)指令
0001
0001功能為R[0]←R[0]+R[1],指令執(zhí)行過程如下ALU運算R[0]←R[0]+R[1]的微操作(在控制信號的控制下完成):A←R[0];B←R[1];ALUop←add;R[0]←F1110
01100001
000114志寄存器 15數(shù)據(jù)傳送線控制信號線CPU中所有微操作都由時鐘信號進行定時,時鐘信號(clock
signal)的寬度為一個時鐘周期(clockcycle)。一條指令的執(zhí)行時間包含一個或多個時鐘周期一個典型程序的轉換處理過程經(jīng)典的“
hello.c
”C-源程序hello.c的ASCII文本表示預處理(cpp)編譯(cc1)printf.o#include
<stdio.h>intmain(){printf("hello,
world\n");}功能:輸出“hello,world” 計算機不能直接執(zhí)行hello.c!hello.c源程序(文本)hello.i源程序(文本)hello.s 匯編匯編語 (as)言程序(文本)hello.o可重定位目標程序(二進制)鏈接 hello(ld) 可執(zhí)行目標程序(二進制)以下是GCC+Linux平臺中的處理過程
Hello程序的數(shù)據(jù)流動過程
./helloRed:shell命令行處理Blue:可執(zhí)行文件加載Cyan:hello程序執(zhí)行過程“./hello”“hello,world\n”hello,world數(shù)據(jù)經(jīng)常在各存儲部件間傳送。故現(xiàn)代計算機大多采用“緩存”技術!所有過程都是在CPU執(zhí)行指令所產(chǎn)生的控制信號的作用下進行的。$./hellohello,
world$主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結構計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結構計算機性能評價不同層次語言之間的等價轉換每條指令由操作碼和若干地址碼組成任何高級語言程序最終通過執(zhí)行若干條指令來完成!開發(fā)和運行程序需什么支撐?最早的程序開發(fā)很簡單(怎樣簡單?)– 直接輸入指令和數(shù)據(jù),啟動后把第一條指令地址送PC開始執(zhí)行用高級語言開發(fā)程序需要復雜的支撐環(huán)境(怎樣的環(huán)境?)需要編輯器編寫源程序需要一套翻譯轉換軟件處理各類源程序編譯方式:預處理程序、編譯器、匯編器、鏈接器解釋方式:解釋程序– 需要一個可以執(zhí)行程序的界面(環(huán)境)GUI方式:圖形用戶界面CUI方式:命令行用戶界面支撐程序開發(fā)和運行的環(huán)境由系統(tǒng)軟件提供最重要的系統(tǒng)軟件是操作系統(tǒng)和語言處理系統(tǒng)語言處理系統(tǒng)運行在操作系統(tǒng)之上,操作系統(tǒng)利用指令管理硬件語言處理程序人機接口語言的運行時系統(tǒng)操作系統(tǒng)內(nèi)核指令集體系結構計算機硬件操作系統(tǒng)語言處理系統(tǒng)早期計算機系統(tǒng)的層次最早的計算機用機器語言編程機器語言稱為第一代程序設計語言(Firstgenerationprogramminglanguage,1GL
)后來用匯編語言編程匯編語言稱為第二代程序設計語言(Secondgenerationprogramminglanguage,2GL
)應用程序指令集體系結構計算機硬件應用程序匯編程序操作系統(tǒng)指令集體系結構計算機硬件現(xiàn)代(傳統(tǒng))計算機系統(tǒng)的層次現(xiàn)代計算機用高級語言編程第三代程序設計語言(3GL)為過程式語言,編碼時需要描述實現(xiàn)過程,即“如何做”。第四代程序設計語言(4GL)
為非過程化語言,編碼時只需說明“做什么”,不需要描述具體的算法實現(xiàn)細節(jié)。應用程序語言處理系統(tǒng)操作系統(tǒng)指令集體系結構計算機硬件可以看出:語言的發(fā)展是一個不斷“抽象”的過程,因而,相應的計算機系統(tǒng)也不斷有新的層次出現(xiàn)語言處理系統(tǒng)包括:各種語言處理程序(如編譯、匯編、鏈接)、運行時系統(tǒng)(如庫函數(shù),調(diào)試、優(yōu)化等功能)操作系統(tǒng)包括人機交互界面、提供服務功能的內(nèi)核例程計算機系統(tǒng)抽象層的轉換程序執(zhí)行結果不僅取決于算法、程序編寫而且取決于語言處理系統(tǒng)操作系統(tǒng)ISA微體系結構功能轉換:上層是下層的抽象,下層是上層的實現(xiàn)底層為上層提供支撐環(huán)境!不同計算機課程處于不同層次必須將各層次關聯(lián)起來解決問題最高層抽象就是點點鼠標、拖拖圖標、敲敲鍵盤,但這背后有多少層轉化??!計算機系統(tǒng)的不同用戶最終用戶工作在由應用程序提供的最上面的抽象層系統(tǒng)管理員工作在由操作系統(tǒng)提供的抽象層應用程序員工作在由語言處理系統(tǒng)(主要有編譯器和匯編器)的抽象層語言處理系統(tǒng)建立在操作系統(tǒng)之上系統(tǒng)程序員(實現(xiàn)系統(tǒng)軟件)工作在ISA層次,必須對ISA非常了解編譯器和匯編器的目標程序由機器級代碼組成操作系統(tǒng)通過指令直接對硬件進行編程控制ISA處于軟件和硬件的交界面(接口)ISA是對硬件的抽象所有軟件功能都建立在ISA之上ISA是最重要的層次!那么,什么是ISA呢?Hardware/Software Interface(界面)軟件硬件軟件和硬件的界面:ISA(Instruction
Set
Architecture
)指令集體系結構機器語言由指令代碼構成,能被硬件直接執(zhí)行。指令集體系結構(ISA)ISA指InstructionSetArchitecture,即指令集體系結構ISA是一種規(guī)約(Specification),它規(guī)定了如何使用硬件可執(zhí)行的指令的集合,包括指令格式、操作種類以及每種操作對應的操作數(shù)的相應規(guī)定;指令可以接受的操作數(shù)的類型;操作數(shù)所能存放的寄存器組的結構,包括每個寄存器的名稱、編號、長度和用途;操作數(shù)所能存放的存儲空間的大小和編址方式;操作數(shù)在存儲空間存放時按照大端還是小端方式存放;指令獲取操作數(shù)的方式,即尋址方式;指令執(zhí)行過程的控制方式,包括程序計數(shù)器、條件碼定義等。ISA在計算機系統(tǒng)中是必不可少的一個抽象層,Why?– 沒有它,軟件無法使用計算機硬件!– 沒有它,一臺計算機不能稱為“通用計算機”ISA和計算機組成(Organization,即MicroArchitecture)是何關系?微體系結構ISA和計算機組成(微結構)之間的關系不同ISA規(guī)定的指令集不同,如,IA-32、MIPS、ARM等計算機組成必須能夠?qū)崿F(xiàn)ISA規(guī)定的功能,如提供GPR、標志、運算電路等同一種ISA可以有不同的計算機組成,如乘法指令可用ALU或乘法器實現(xiàn)控制器輸入設備輸出設備PC MARMDRALU標志寄存器IR地址數(shù)據(jù)控制GPRs0123CPU 存儲器01234567ISA是計算機組成的抽象計算機系統(tǒng)核心層之間的關聯(lián)高級語言程序詞法、語法及語義分析中間代碼生成中間代碼目標代碼生成及優(yōu)化目標代碼前端遵循語言規(guī)范后端遵循ISA規(guī)范和ABI規(guī)范執(zhí)行結果不符合程序開發(fā)者預期舉例:C90中,-2147483648
<
2147483647結果為flaseint
x=1234;printf(“%lf”,x);未定義行為后端根據(jù)ISA規(guī)范和應用程序二進制接口(Application
Binary
Interface,ABI)規(guī)范進行設計實現(xiàn)。不同平臺結果不同,相同平臺每次結果不同結果不符合預期的原因通常有兩種:(1)程序員不了解語言規(guī)范;(2)程序含有未定義行為(undefinedbehavior)或未確定行為(unspecifiedbehavior)的語句ABI是為運行在特定ISA及特定操作系統(tǒng)之上的應用程序中所遵循的一種機器級目標代碼層接口描述了應用程序和操作系統(tǒng)之間、應用程序和所調(diào)用的庫之間、不同組成部分(如過程或函數(shù))之間在較低層次上的機器級代碼接口。運行平臺:操作系統(tǒng)+ISA架構計算機系統(tǒng)核心層之間的關聯(lián)前端高級語言程序詞法、語法及語義分析中間代碼生成中間代碼目標代碼生成及優(yōu)化目標代碼后端后端根據(jù)ISA規(guī)范和應用程序二進制接口(Application
Binary
Interface,ABI)規(guī)范進行設計實現(xiàn)。ABI是為運行在特定ISA及特定操作系統(tǒng)之上的應用程序所遵循的一種機器級目標代碼層接口規(guī)約。例如:過程間調(diào)用約定(參數(shù)和返回值傳遞等)系統(tǒng)調(diào)用約定(系統(tǒng)調(diào)用的參數(shù)和調(diào)用號如何傳遞以及如何從用戶態(tài)陷入操作系統(tǒng)內(nèi)核等)目標文件的二進制格式函數(shù)庫使用約定寄存器使用規(guī)定程序的虛擬地址空間劃分等運行平臺:操作系統(tǒng)+ISA架構本課程所用平臺為IA-32/x86-64+Linux+GCC+C語言,
Linux操作系統(tǒng)下一般使用system
V
ABI本課程大多在講解ABI和ISA規(guī)范!要了解程序的確切行為,最好的方法就是查手冊(用于給出規(guī)范)!主要內(nèi)容課程的由來課程內(nèi)容概要馮.諾依曼結構計算機特點程序的開發(fā)和執(zhí)行過程計算機系統(tǒng)層次結構計算機性能評價計算機性能的基本評價指標“
機器X的速度(性能)是Y的n倍” 的含義:ExTime(Y)Performance(X)= =
nExTime(X)Performance(Y)相對性能用執(zhí)行時間的倒數(shù)來表示!°計算機有兩種不同的性能°
Timetodothetask響應時間(response
time)執(zhí)行時間(execution
time)等待時間或時延(latency)°Tasksperday,hour,sec,ns.
..吞吐率(throughput)帶寬(bandwidth)°
基本的性能評價標準是:CPU的執(zhí)行時間不同應用場合用戶關心的性能不同:-要求吞吐率高的場合,例如:多媒體應用(音/視頻播放要流暢)-要求響應時間短的場合:例如:事務處理系統(tǒng)(存/取款速度要快)-要求吞吐率高且響應時間短的場合:ATM、文件服務器、Web服務器等CPU執(zhí)行時間的計算CPI:CyclesPer
InstructionCPU執(zhí)行時間
=CPU時鐘周期數(shù)
/
程序
X
時鐘周期=CPU時鐘周期數(shù)
/
程序
÷
時鐘頻率=指令條數(shù)
/
程序
X
CPI
X
時鐘周期CPU時鐘周期數(shù)
/
程序
=指令條數(shù)
/
程序
X
CPICPI
=CPU時鐘周期數(shù)
/
程序
÷指令條數(shù)
/
程序CPI
用來衡量以下各方面的綜合結果InstructionSet
Architecture(ISA)Implementationofthat
architecture組成(Organization) &
實現(xiàn)技術(Technology)Program:編譯(Compiler)、算法(Algorithm)AspectsofCPU
PerformanceCPU
time=Seconds=InstructionsxCyclesxSecondsProgramProgramInstructionCycleinstr.
CountCPIclock
rateProgrammingCompilerInstr.Set
Arch.OrganizationTechnology思考:三個因素與哪些方面有關?例如,{…..y=4*x;}AspectsofCPU
PerformanceCPU
time= Seconds= InstructionsxCyclesxSecondsProgramProgramInstructionCycleinstr.Count
CPIclock
rateProgramming??Compiler?(?)Instr.Set
Arch.??Organization??Technology ?用加法指令、乘法指令或左移指令都可實現(xiàn)“y=4*x;”顯然得到的指令條數(shù)不同,CPI也不同如何計算CPI?CPI =wherei ix
FCPIn∑i=
1CiiInstruction
_
CountF
對于某一條特定的指令而言,其CPI是一個確定的值。但是,對于某一個程序或一臺機器而言,其CPI是一個平均值,表示該程序或該機器指令集中每條指令執(zhí)行時平均需要多少時鐘周期。假定CPIi
和
Ci分別為第i類指令的CPI和指令條數(shù),則程序的總時鐘數(shù)為:n ni
=
1 i=
1假定CPIi、Fi是各指令CPI和在程序中的出現(xiàn)頻率,則程序綜合CPI為:總時鐘數(shù)
=∑
CPI
i
x
Ci所以,
CPU時間=
時鐘周期
x∑
CPI
i
x
Ci已知CPU時間、時鐘頻率、總時鐘數(shù)、指令條數(shù),則程序綜合CPI為:CPI=(CPU
時間×時鐘頻率)/指令條數(shù)
=總時鐘周期數(shù)
/指令條數(shù)問題:指令的CPI、機器的CPI、程序的CPI各能反映哪方面的性能?單靠CPI不能反映CPU性能!為什么?例如,單周期處理器CPI=1,但周期長,故性能差!Example1程序P在機器A上運行需10
s,
機器A的時鐘頻率為400MHz。現(xiàn)在要設計一臺機器B,希望該程序在B上運行只需6
s.機器B時鐘頻率的提高導致了其CPI的增加,使得程序P在機器B上時鐘周期數(shù)是在機器A上的1.2倍。機器B的時鐘頻率達到A的多少倍才能使程序P在B上執(zhí)行速度是A上的10/6=1.67倍?Answer:CPU時間A
=
時鐘周期數(shù)A
/
時鐘頻率A時鐘周期數(shù)A
=
10
sec
x
400MHz
=
4000M個時鐘頻率B
=
時鐘周期數(shù)B
/
CPU時間B=1.2x4000M/6sec=800
MHz機器B的頻率是A的兩倍,但機器B的速度并不是A的兩倍!
Marketing
Metrics
(產(chǎn)品宣稱指標) MIPS=InstructionCount/Time
x106=ClockRate/CPIx
106指令使用的頻度動態(tài)變化Peak
MIPS:
(不實用)所以MIPS數(shù)不能說明性能的好壞(用下頁中的例子來說明)MFLOPS =FPOperations/Time
x106MillionFloating-point
OperationsPer
Second(浮點操作速度)不一定是程序中花時間的部分Million
Instructions
Per
Second (定點指令執(zhí)行速度)因為每條指令執(zhí)行時間不同,所以MIPS總是一個平均值。不同機器的指令集不同程序由不同的指令混合而成用MIPS數(shù)表示性能有沒有局限?用MFLOPS數(shù)表示性能也有一定局限!問題:GFLOPS、TFLOPS、PFLOPS等的含義是什么?
Example:
MIPS數(shù)不可靠! (書中例1.3)Assume
we
build
an
optimizing
compiler
fortheload/storemachine.Thecompilerdiscards50%oftheALU
instructions.1)WhatistheCPI
?2)Assuminga20nsclockcycletime(50MHzclockrate).WhatistheMIPSratingforoptimizedcodeversusunoptimizedcode?DoestheMIPSratingagreewiththeratingofexecution
time?Op Freq CycleALU43%1Load21%2Store12%2Branch24%2New Freq
27%27%15%31%Optimizing
compilerCPIMIPS1.5731.81.7328.9結果:因為優(yōu)化后減少了ALU指令(其他指令數(shù)沒變),所以程序執(zhí)行時間一定減少了,但優(yōu)化后的MIPS數(shù)反而降低了。21.5/
(21.5+21+12+24)=27%21 /
(21.5+21+12+24)=27%12 /
(21.5+21+12+24)=15%24 /(21.5+21+12+24)=
31%50M/1.57=31.8MIPS50M/1.73=28.9MIPS僅在軟件上優(yōu)化,沒涉及到任何硬件措施。1.57是如何算出來的?浮點操作速度單位問題:GFLOPS、TFLOPS、PFLOPS等的含義是什么?浮點運算實際上包括了所有涉及小數(shù)的運算,在某類應用軟件中常常出現(xiàn),比整數(shù)運算更費時間。現(xiàn)今大部分的處理器中都有浮點運算器。因此每秒浮點運算次數(shù)所量測的實際上就是浮點運算器的執(zhí)行速度。而最常用來測量每秒浮點運算次數(shù)的基準程序(benchmark)之一,就是Linpack。一個MFLOPS(megaFLOPS)等於每秒一佰萬(=10^6)次的浮點運算,一個GFLOPS(gigaFLOPS)等於每秒拾億(=10^9)次的浮點運算,一個TFLOPS(teraFLOPS)等於每秒萬億(=10^12)次的浮點運算,一個PFLOPS(petaFLOPS)等於每秒千萬億(=10^15)次的浮點運算,一個EFLOPS(exaFLOPS)等於每秒百億億(=10^18)次的浮點運算。全球超級計算機500強2017年6月19號公布:第一名:中國國家超級計算無錫中心研制的“神威·太湖之光”浮點運算速度為每秒9.3億億次。第二名:國防科大研制的“天河二號”超級計算機,每秒3.386億億次的浮點運算速度,之前曾獲得五連冠。速度單位是
Tflop/s
或
TFLOPS
選擇性能評價程序(Benchmarks)
用基準程序來評測計算機的性能基準測試程序是專門用來進行性能評價的一組程序基準程序通過運行實際負載來反映計算機的性能最好的基準程序是用戶實際使用的程序或典型的簡單程序基準程序的缺陷現(xiàn)象:基準程序的性能與某段短代碼密切相關時,會被利用以得到不當?shù)男阅茉u測結果手段:硬件系統(tǒng)設計人員或編譯器開發(fā)者針對這些代碼片段進行特殊的優(yōu)化,使得執(zhí)行這段代碼的速度非??炖?:Intel
Pentium處理器運行SPECint時用了公司內(nèi)部使用的特殊編譯器,使其性能極高例2:矩陣乘法程序SPECmatrix300有99%的時間運行在一行語句上,有些廠商用特殊編譯器優(yōu)化該語句,使性能達VAX11/780的729.8倍!第二章
數(shù)據(jù)的表示和運算數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù)的表示數(shù)據(jù)的存放數(shù)據(jù)的運算數(shù)據(jù)的表示和運算主要教學目標掌握計算機內(nèi)部各種數(shù)據(jù)的編碼表示及其運算方法了解高級語言程序中的各種類型變量對應的表示形式在高級語言程序中的變量、機器數(shù)和底層硬件(寄存器、加法器、ALU等)之間建立關聯(lián)綜合運用所學知識,分析高級語言和機器級語言程序設計中遇到的各種與數(shù)據(jù)表示和運算相關的問題,解釋相應的執(zhí)行結果C語言參考網(wǎng)站:/c/linux-c-programming/數(shù)據(jù)的表示和運算分以下五個部分介紹第一講:數(shù)值數(shù)據(jù)的表示定點數(shù)編碼、整數(shù)的表示、浮點數(shù)表示C語言程序的整數(shù)類型和浮點數(shù)類型第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存放方式邏輯值、西文字符、漢字字符數(shù)據(jù)寬度單位、大端/小端第三講:加法器和算術邏輯部件按位運算\邏輯運算\移位運算\位擴展和位截斷運算無符號和帶符號整數(shù)的加減運算、ALU第四講:定點數(shù)乘除運算無符號和帶符號整數(shù)的乘除運算變量與常數(shù)之間的乘除運算第五講:浮點數(shù)加減乘除運算從C程序的表達式出發(fā),用機器數(shù)在電路中的執(zhí)行來解釋表達式的執(zhí)行結果課程內(nèi)容概要/*sum.c*/intsum(inta[],unsigned
len){int i,sum=0;for (i=0;i<=len–1;i++)sum+=a[i];returnsum;}/*main.c*/int
main(){int a[1]={100};int sum;sum=sum(a,0);printf(“%d”,sum);}數(shù)據(jù)的表示數(shù)據(jù)的運算如果程序處理的是圖像、視頻、聲音、文字等數(shù)據(jù),那么,(1)如何獲得這些數(shù)據(jù)?(2)如何表示這些數(shù)據(jù)?(3)如何處理這些數(shù)據(jù)?“轉換”的概念在數(shù)據(jù)表示中的反映抽象概 具括 體實現(xiàn)感覺媒體信息樹、鏈表等結構化數(shù)據(jù)描述int,float,array,
struct等類型指令指定寄存器或內(nèi)存中數(shù)據(jù)ALU中運算或總線上傳輸?shù)臄?shù)據(jù)邏輯門位信息問題(應用)算法程序(語言)指令集體系結構(ISA)微體系結構電路器件(晶體管)各類數(shù)據(jù)之間的轉換關系對連續(xù)信息采樣,以使信息離散化對離散樣本用0和1進行編碼定點運算指令邏輯、位操作或字符處理指令浮點運算指令數(shù)值數(shù)據(jù)的表示數(shù)值數(shù)據(jù)表示的三要素進位記數(shù)制定、浮點表示如何用二進制編碼即:要確定一個數(shù)值數(shù)據(jù)的值必須先確定這三個要素。例如,機器數(shù)
01011001的值是多少?
答案是:不知道!進位記數(shù)制十進制、二進制、十六進制、八進制數(shù)及其相互轉換定/浮點表示(解決小數(shù)點問題)定點整數(shù)、定點小數(shù)浮點數(shù)(可用一個定點小數(shù)和一個定點整數(shù)來表示)定點數(shù)的編碼(解決正負號問題)原碼、補碼、反碼、移碼(反碼很少用)SignandMagnitude(原碼的表示)Decimal Binary0000010001200103001140100501016011070111u
容易理解, 但是:0
的表示不唯一,故不利于程序員編程加、減運算方式不統(tǒng)一需額外對符號位進行處理,故不利于硬件設計特別當
a<b時,實現(xiàn)
a-b比較困難從
50年代開始,整數(shù)都采用補碼表示但浮點數(shù)的尾數(shù)還是用原碼定點小數(shù)表示Decimal Binary-0 1000-1 1001-2 1010-3 1011-4 1100-5 1101-6 1110-7 1111補碼
-
模運算(modular運算)時鐘是一種模12系統(tǒng)假定鐘表時針指向10點,要將它撥向6點,
則有兩種撥法:①
倒撥4格:10-4=6②
順撥8格:10+8
=
18
≡
6模12系統(tǒng)中:10-4≡
10+8-4≡
8(mod
12)(mod
12)(mod
12)則,稱8是-
4對模12的補碼
(即:-
4的模12補碼等于8)。同樣有
-3
≡
9-5≡
7(mod
12)(mod
12)等重要概念:在一個模運算系統(tǒng)中,一個數(shù)與它除以“?!焙蟮挠鄶?shù)等價。結論1:
一個負數(shù)的補碼等于模減該負數(shù)的絕對值。結論2:
對于某一確定的模,某數(shù)減去小于模的另一數(shù),總可以用該數(shù)加上另一數(shù)負數(shù)的補碼來代替。補碼(modular運算):+和–的統(tǒng)一現(xiàn)實世界中的模運算系統(tǒng)補碼的表示現(xiàn)實世界的模運算系統(tǒng)舉例例1:“鐘表”模運算系統(tǒng)假定時針只能順撥,從10點倒撥4格后是幾點?10-4=10+(12-4)=10+8=
6 (mod
12)例2:“4位十進制數(shù)”
模運算系統(tǒng)假定算盤只有四檔,且只能做加法,則在算盤上計算9828-1928等于多少?9828-1928=9828+(104-1928)=9828+8072=1
7900=7900(mod
104)取模即只留余數(shù),高位“1”被丟棄!相當于只有低4位留在算盤上。計算機中的運算器是模運算系統(tǒng)8位二進制加法器模運算系統(tǒng)計算0111
1111
-
0100
0000
=
?01111111-01000000=01111111+(28-0100
0000)=01111111+11000000=100111111(mod
28)=0011
1111只留余數(shù),“1”被丟棄結論1:
一個負數(shù)的補碼等于對應正數(shù)補碼的“各位取反、末位加1”運算器適合用補碼表示和運算0000000110000010010011101111011101011010101111001101001101101001運算器只有有限位,假設為n位,則運算結果只能保留低n位,故可看成是個只有n檔的二進制算盤,因此,其模為2n
。當n=4時,共有16個機器數(shù):0000
~
1111,可看成是模為24
的鐘表系統(tǒng)。真值的范圍為-8~
+7補碼的定義[X]補=
2n
+
X假定補碼有n位,則:(-2n-1≤X<2n-1,mod
2n)X是真值,[x]補是機器數(shù)真值和機器數(shù)的含義是什么?求特殊數(shù)的補碼假定機器數(shù)有n位①
[-2n-1]補=
2n
-2n-1
=
10…0(n-1個0)
(mod
2n)②
[-1]補=2n-
0…01
=
11…1(n個1) (mod
2n)③
[+0]補=[-0]補=00…0(n個0)32位機器中,int、short、char型數(shù)據(jù)的機器數(shù)各占幾位?補碼與真值之間的簡便轉換例:設機器數(shù)有8位,求123和-123的補碼表示。如何快速得到123的二進制表示?解:
123
=
127
–
4
=
01111111B
–
100B
=
01111011B–123=–01111011B[01111011]補=
28
+
01111011
=
100000000
+
01111011=
01111011
(mod
28),即
7BH。[–
01111011]補=
28
–
01111011
=
10000
0000
–
01111011=11111111–01111011
+1=1000
0100+1 各位取反,末位加1=
1000
0101,即
85
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小班語言活動《水果屋》教案設計
- 小學生法制教育:法律小種子在童心發(fā)芽
- 2025公寓裝修項目施工合同
- 2025項目經(jīng)理施工的合同
- 2024-2025教科版科學一年級下冊(2024)期末考試卷及答案
- 2025房屋租賃中介服務合同樣本
- 顱內(nèi)取栓術后護理
- 2025武漢市瓷磚買賣合同
- 2025雙方委托設備維護保養(yǎng)合同范本
- 2025安置房買賣合同(協(xié)議)
- 26 跨學科實踐“制作能升空的飛機模型”(教學設計)2024-2025學年初中物理項目化課程案例
- 數(shù)控刀片合金知識
- 2025屆上海市(春秋考)高考英語考綱詞匯對照表清單
- 內(nèi)蒙古赤峰市松山區(qū)2023-2024學年八年級下學期期中考試數(shù)學試卷(含答案)
- 大型設備吊裝地基處理方案
- 2025年公開招聘衛(wèi)生系統(tǒng)工作人員歷年管理單位筆試遴選500模擬題附帶答案詳解
- 智能垃圾桶產(chǎn)品介紹
- 2025深圳勞動合同下載
- 建筑工地住房安全協(xié)議書(2篇)
- 【MOOC】中醫(yī)與辨證-暨南大學 中國大學慕課MOOC答案
- 設備稼動率分析報告
評論
0/150
提交評論