《計(jì)算機(jī)系統(tǒng)原理》 課件全套 第1-6章 計(jì)算機(jī)系統(tǒng)概論- 程序中IO操作的實(shí)現(xiàn)_第1頁(yè)
《計(jì)算機(jī)系統(tǒng)原理》 課件全套 第1-6章 計(jì)算機(jī)系統(tǒng)概論- 程序中IO操作的實(shí)現(xiàn)_第2頁(yè)
《計(jì)算機(jī)系統(tǒng)原理》 課件全套 第1-6章 計(jì)算機(jī)系統(tǒng)概論- 程序中IO操作的實(shí)現(xiàn)_第3頁(yè)
《計(jì)算機(jī)系統(tǒng)原理》 課件全套 第1-6章 計(jì)算機(jī)系統(tǒng)概論- 程序中IO操作的實(shí)現(xiàn)_第4頁(yè)
《計(jì)算機(jī)系統(tǒng)原理》 課件全套 第1-6章 計(jì)算機(jī)系統(tǒng)概論- 程序中IO操作的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩642頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第一章

計(jì)算機(jī)系統(tǒng)概述為何要開設(shè)計(jì)算機(jī)系統(tǒng)原理課程計(jì)算機(jī)系統(tǒng)原理課程概要計(jì)算機(jī)系統(tǒng)概述計(jì)算機(jī)性能評(píng)價(jià)主要內(nèi)容課程由來(lái)課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)用“系統(tǒng)思維”分析問題ISO

C90標(biāo)準(zhǔn)下,在32位系統(tǒng)上以下C表達(dá)式的結(jié)果是什么?-2147483648<

2147483647false(與事實(shí)不符)!Why?ISO

C99標(biāo)準(zhǔn)下為true,Why?以下關(guān)系表達(dá)式結(jié)果呢?inti=

-2147483648;i<

2147483647true!Why?-2147483647-1 < 2147483647,結(jié)果怎樣?理解該問題需要知道:編譯器如何處理字面量高級(jí)語(yǔ)言中運(yùn)算規(guī)則高級(jí)語(yǔ)言與指令之間的對(duì)應(yīng)機(jī)器指令的執(zhí)行過程機(jī)器級(jí)數(shù)據(jù)的表示和運(yùn)算……用“系統(tǒng)思維”分析問題sum(inta[],unsigned

len){int i,sum=

0;for (i=0;i<=len–1;

i++)sum+=

a[i];return

sum;}當(dāng)用len=0調(diào)用sum函數(shù)時(shí),其返回值應(yīng)該是多少?當(dāng)參數(shù)len為0時(shí),返回值應(yīng)該是0,但是在機(jī)器上執(zhí)行時(shí),卻發(fā)生訪存異常。但當(dāng)len為int型時(shí)則正常。Why?理解該問題需要知道:高級(jí)語(yǔ)言中運(yùn)算規(guī)則機(jī)器指令的含義和執(zhí)行計(jì)算機(jī)內(nèi)部的運(yùn)算電路異常的檢測(cè)和處理虛擬地址空間……若x和y為int型,當(dāng)x=65535時(shí),y=x*x; y的值為多少?y=-131071。Why?現(xiàn)實(shí)世界中,x2≥0,但在計(jì)算機(jī)世界并不一定成立。對(duì)于任何int型變量x和y,(x>y)==

(-x<-y)總成立嗎?當(dāng)x=-2147483648,y任意(除-2147483648外)時(shí)不成立Why?在現(xiàn)實(shí)世界中成立,但在計(jì)算機(jī)世界中并不一定成立。用“系統(tǒng)思維”分析問題理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示機(jī)器指令的執(zhí)行計(jì)算機(jī)內(nèi)部的運(yùn)算電路用“系統(tǒng)思維”分析問題main.cint

d=100;intx=200;int

main(){p1(

);printf(“d=%d,x=%d\n”,d,x);return

0;}打印結(jié)果是什么?d=0,x=1072693

248Why?p1.cdouble

d;voidp1(

){d=1.0;}理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示變量的存儲(chǔ)空間分配數(shù)據(jù)的大端/小端存儲(chǔ)方式鏈接器的符號(hào)解析規(guī)則……用“系統(tǒng)思維”分析問題/*

復(fù)制數(shù)組到堆中,count為數(shù)組元素個(gè)數(shù)

*/intcopy_array(int*array,intcount)

{int

i;/*

在堆區(qū)申請(qǐng)一塊內(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;}當(dāng)參數(shù)count很大時(shí),則count*sizeof(int)會(huì)溢出。如count=230+1時(shí),count*sizeof(int)=4。堆(heap)中大量數(shù)據(jù)被破壞!理解該問題需要知道:乘法運(yùn)算及溢出虛擬地址空間存儲(chǔ)空間映射……當(dāng)count=230+1時(shí),程序會(huì)發(fā)生什么情況?用“系統(tǒng)思維”分析問題運(yùn)行結(jié)果為“Floating

point

exception”,顯然CPU檢測(cè)到了溢出異常上述結(jié)果在Linux上獲得,為什么兩者結(jié)果不同?在Windows上運(yùn)算的結(jié)果又為何不同?理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示(如:真值和機(jī)器數(shù)的關(guān)系)機(jī)器指令的含義和執(zhí)行(如:取負(fù)指令、除法指令)計(jì)算機(jī)內(nèi)部的運(yùn)算電路(如:除法電路會(huì)判是否異常)編譯器如何優(yōu)化(如:a/-1可用取負(fù)指令實(shí)現(xiàn))操作系統(tǒng)如何處理異常(如:除法錯(cuò)異常的處理)……代碼段一:inta=

2147483648;intb=a/-1;printf("%d,%d\n",a,b);運(yùn)行結(jié)果為-2147483648,-2147483648Warning:thisdecimalconstantisunsignedonlyinISOC90[enabledby

default]代碼段二:inta=

2147483648;intb=-1;intc=a/

b;printf("%d,%d\n",a,

c);用“系統(tǒng)思維”分析問題以下是一段C語(yǔ)言代碼:#include

<stdio.h>main(){doublea=10;printf("a=%d\n",

a);}在IA-32上運(yùn)行時(shí),打印結(jié)果為a=0在x86-64上運(yùn)行時(shí),打印出來(lái)的a是一個(gè)不確定值為什么?理解該問題需要知道:IEEE

754

的表示X87

FPU的體系結(jié)構(gòu)IA-32和x86-64中過程調(diào)用的參數(shù)傳遞計(jì)算機(jī)內(nèi)部的運(yùn)算電路……用“系統(tǒng)思維”分析問題doublefun(int

i){volatiledoubled[1]={3.14};volatilelongint

a[2];a[i]=1073741824;/*Possiblyoutofbounds*/returnd[0];}對(duì)于上述C語(yǔ)言函數(shù),i=0~4時(shí),fun(i)分別返回什么值?fun(0)

3.14fun(1)

3.14fun(2)

3.1399998664856fun(3)

2.00000061035156fun(4)

3.14,

然后存儲(chǔ)保護(hù)錯(cuò)理解該問題需要知道:機(jī)器級(jí)數(shù)據(jù)的表示過程調(diào)用機(jī)制棧幀中數(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?以上兩個(gè)程序功能完全一樣,算法完全一樣,因此,時(shí)間和空間復(fù)雜度完全一樣,執(zhí)行時(shí)間一樣嗎?理解該問題需要知道:數(shù)組的存放方式Cache機(jī)制訪問局部性……用“系統(tǒng)思維”分析問題使用老版本gcc

–O2編譯時(shí),程序一輸出0,程序二輸出卻是1Why?用“系統(tǒng)思維”分析問題關(guān)鍵差別在于一條指令:fldl和

fildl理解該問題需要知道:數(shù)據(jù)的表示編譯(程序的轉(zhuǎn)換)局部變量在棧中的位置……計(jì)算機(jī)系統(tǒng)是一個(gè)整體看了前面的舉例,你的感覺是什么呢?– 計(jì)算機(jī)好像不可靠從機(jī)器角度來(lái)說,它永遠(yuǎn)對(duì)!你的感覺不可靠!程序執(zhí)行結(jié)果不僅依賴于高級(jí)語(yǔ)言語(yǔ)法和語(yǔ)義,還與其他好多方面有關(guān)理解程序的執(zhí)行結(jié)果要從系統(tǒng)層面考慮!本來(lái)以為學(xué)學(xué)編程和計(jì)算機(jī)基本原理就能當(dāng)程序員,沒想到還挺復(fù)雜的,并不是那么簡(jiǎn)單學(xué)完“計(jì)算機(jī)系統(tǒng)原理”就會(huì)對(duì)計(jì)算機(jī)系統(tǒng)有清晰的認(rèn)識(shí),以后再學(xué)其他相關(guān)課程就容易多了。要把很多概念和知識(shí)聯(lián)系起來(lái)才能理解程序的執(zhí)行結(jié)果把許多概念和知識(shí)聯(lián)系起來(lái)就是李國(guó)杰院士所提出的“系統(tǒng)思維”。即:站在“計(jì)算機(jī)系統(tǒng)”的角度考慮問題!系統(tǒng)能力基于“系統(tǒng)思維”系統(tǒng)思維從計(jì)算機(jī)系統(tǒng)角度出發(fā)分析問題和解決問題首先取決于對(duì)計(jì)算機(jī)系統(tǒng)有多了解,“知其然并知其所以然”高級(jí)語(yǔ)言語(yǔ)句都要轉(zhuǎn)換為機(jī)器指令才能在計(jì)算機(jī)上執(zhí)行機(jī)器指令是一串0/1序列,能被機(jī)器直接理解并執(zhí)行計(jì)算機(jī)系統(tǒng)是模運(yùn)算系統(tǒng),字長(zhǎng)有限,高位被丟棄運(yùn)算器不知道參加運(yùn)算的是帶符號(hào)數(shù)還是無(wú)符號(hào)數(shù)在計(jì)算機(jī)世界,x*x可能小于0,(x+y)+z不一定等于x+(y+z)訪問內(nèi)存需幾十到幾百個(gè)時(shí)鐘,而訪問磁盤要幾百萬(wàn)個(gè)時(shí)鐘進(jìn)程具有獨(dú)立的邏輯控制流和獨(dú)立的地址空間過程調(diào)用使用棧存放參數(shù)和局部變量等,遞歸過程有大量額外指令,增加時(shí)間開銷,并可能發(fā)生棧溢出…….只有先理解系統(tǒng),才能設(shè)計(jì)、改進(jìn)系統(tǒng),并應(yīng)用好系統(tǒng)!基本認(rèn)識(shí)為什么要學(xué)習(xí)計(jì)算機(jī)系統(tǒng)原理?為什么要學(xué)習(xí)計(jì)算機(jī)系統(tǒng)原理課程呢?強(qiáng)化“系統(tǒng)思維”更好地理解計(jì)算機(jī)系統(tǒng),從而編寫出更好的程序編程序時(shí)少出錯(cuò)在程序出錯(cuò)時(shí)很快找到出錯(cuò)的地方編寫出更快的程序明白程序是怎樣在計(jì)算機(jī)上執(zhí)行的為后續(xù)課程的學(xué)習(xí)打下良好基礎(chǔ)– …….主要內(nèi)容課程由來(lái)課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)什么是計(jì)算機(jī)系統(tǒng)?計(jì)算機(jī)系統(tǒng)抽象層的轉(zhuǎn)換程序執(zhí)行結(jié)果不僅取決于算法、程序編寫而且取決于語(yǔ)言處理系統(tǒng)操作系統(tǒng)ISA微體系結(jié)構(gòu)不同計(jì)算機(jī)課程處于不同層次必須將各層次關(guān)聯(lián)起來(lái)解決問題計(jì)算機(jī)系統(tǒng)原理內(nèi)容提要計(jì)算機(jī)系統(tǒng)抽象層課程目標(biāo):清楚理解計(jì)算機(jī)是如何生成和運(yùn)行可執(zhí)行文件的!重點(diǎn)在高級(jí)語(yǔ)言以下各抽象層– C語(yǔ)言程序設(shè)計(jì)層數(shù)據(jù)的機(jī)器級(jí)表示、運(yùn)算語(yǔ)句和過程調(diào)用的機(jī)器級(jí)表示操作系統(tǒng)、編譯和鏈接的部分內(nèi)容指令集體系結(jié)構(gòu)(ISA)和匯編層指令系統(tǒng)、機(jī)器代碼、匯編語(yǔ)言微體系結(jié)構(gòu)及硬件層CPU的通用結(jié)構(gòu)層次結(jié)構(gòu)存儲(chǔ)系統(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ù)的運(yùn)算各類語(yǔ)句的轉(zhuǎn)換與表示(指令)各類復(fù)雜數(shù)據(jù)類型的轉(zhuǎn)換表示過程(函數(shù))調(diào)用的轉(zhuǎn)換表示鏈接(linker)和加載程序執(zhí)行(存儲(chǔ)器訪問)異常和中斷處理輸入輸出(I/O)課程內(nèi)容概要三個(gè)主題:表示(Representation)不同數(shù)據(jù)類型(包括帶符號(hào)整數(shù)、無(wú)符號(hào)整數(shù)、浮點(diǎn)數(shù)、數(shù)組、結(jié)構(gòu)等)在寄存器或存儲(chǔ)器中如何表示和存儲(chǔ)?指令如何表示和編碼(譯碼)?存儲(chǔ)地址(指針)如何表示以及如何生成復(fù)雜數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)元素的地址?轉(zhuǎn)換(Translation)和鏈接(Link)高級(jí)語(yǔ)言程序?qū)?yīng)的機(jī)器級(jí)代碼是怎樣的?如何合并成可執(zhí)行文件?執(zhí)行控制流(Control

flow)計(jì)算機(jī)能理解的“程序”是如何組織和控制的?在磁盤中的可執(zhí)行文件如何加載到主存并執(zhí)行的?在程序執(zhí)行過程中CPU如何訪問指令和操作數(shù)?I/O操作的執(zhí)行控制流如何從用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)?課程內(nèi)容概要前導(dǎo)知識(shí):C語(yǔ)言程序設(shè)計(jì)、數(shù)字邏輯電路基礎(chǔ)內(nèi)容組織:兩大部分第一部分

系統(tǒng)概述和可執(zhí)行文件的生成(表示和轉(zhuǎn)換)計(jì)算機(jī)系統(tǒng)概述數(shù)據(jù)的機(jī)器級(jí)表示與處理程序的轉(zhuǎn)換及機(jī)器級(jí)表示第二部分

可執(zhí)行文件的運(yùn)行(執(zhí)行控制流)程序的鏈接和加載執(zhí)行層次結(jié)構(gòu)存儲(chǔ)系統(tǒng)I/O操作的實(shí)現(xiàn)參考資源MOOC網(wǎng)站計(jì)算機(jī)系統(tǒng)基礎(chǔ)(一):程序的表示、轉(zhuǎn)換與鏈接https:///course/NJU-1001625001計(jì)算機(jī)系統(tǒng)基礎(chǔ)(二):程序的執(zhí)行和存儲(chǔ)訪問https:///course/NJU-1001964032計(jì)算機(jī)系統(tǒng)基礎(chǔ)(三):異常、中斷和輸入/輸出https:///course/NJU-1002532004計(jì)算機(jī)系統(tǒng)基礎(chǔ)(四):編程與調(diào)試實(shí)踐https:///course/NJU-1449521162計(jì)算機(jī)系統(tǒng)基礎(chǔ)(五):x86模擬器編程實(shí)踐https:///course/NJU-1464941173前導(dǎo)課程–C語(yǔ)言程序設(shè)計(jì)、(數(shù)字邏輯電路,不是必須)教材:–《計(jì)算機(jī)系統(tǒng)原理》,袁春風(fēng),機(jī)械工業(yè)出版社主要參考書:–《計(jì)算機(jī)系統(tǒng)基礎(chǔ)(第2版)》袁春風(fēng)等,機(jī)械工業(yè)出版社,2018–《深入理解計(jì)算機(jī)系統(tǒng)》(第3版),Randal

E.

Bryant,

david

R.O’Hallaron著,龔奕利等譯,機(jī)械工業(yè)出版社,2016主要內(nèi)容課程的由來(lái)課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)第一臺(tái)通用電子計(jì)算機(jī)的誕生–美國(guó)賓夕法尼亞大學(xué)研制–用于解決復(fù)雜彈道計(jì)算問題–5000次加法/s–平方、立方、sin、cos等–用十進(jìn)制表示信息并運(yùn)算1935-1939年,第一臺(tái)電子數(shù)字計(jì)算機(jī)樣機(jī)(ABC)研制成功1946年,第1臺(tái)實(shí)際使用的電子數(shù)字計(jì)算機(jī)

ENIAC誕生–由電子真空管組成ElectronicNumericalIntegratorAndComputer電子數(shù)字積分計(jì)算機(jī)–采用手動(dòng)編程,通過設(shè)置開關(guān)和插拔電纜來(lái)實(shí)現(xiàn)“世界第一臺(tái)電子計(jì)算機(jī)”之爭(zhēng):1973年美國(guó)明尼蘇達(dá)地區(qū)法院推翻并吊銷了莫克利的專利,宣布美國(guó)艾奧瓦州立大學(xué)約翰·文森特·阿塔那索夫(John

Vincent

Atanasoff)被稱為“電子計(jì)算機(jī)之父”ElectronicNumericalIntegratorAnd

Computer占地面積170平方米重30噸有18000多個(gè)真空管耗電160千瓦該機(jī)正式運(yùn)行到1955年10月2日,這十年間共運(yùn)行80

223個(gè)小時(shí)馮·諾依曼的故事1944年,馮·諾依曼參加原子彈的研制工作,涉及極為困難的計(jì)算。1944年夏的一天,諾依曼巧遇美國(guó)彈道實(shí)驗(yàn)室的軍方負(fù)責(zé)人戈?duì)査固?,他正參與ENIAC的研制工作。馮·諾依曼被戈?duì)査固菇榻B加入ENIAC研制組,1945年,他們?cè)诠餐懻摰幕A(chǔ)上,馮·諾依曼以“關(guān)于EDVAC的報(bào)告草案”為題,起草了長(zhǎng)達(dá)101頁(yè)的總結(jié)報(bào)告,發(fā)表了全新的“存儲(chǔ)程序通用電子計(jì)算機(jī)方案”。一向?qū)8憷碚撗芯康钠樟炙诡D高等研究院批準(zhǔn)讓馮·諾依曼建造計(jì)算機(jī),其依據(jù)就是這份報(bào)告。ElectronicDiscreteVariableAutomaticComputer現(xiàn)代計(jì)算機(jī)的原型1946年,普林斯頓高等研究院(the

Institute

for

Advance

Studyat

Princeton,IAS

)開始設(shè)計(jì)“存儲(chǔ)程序”計(jì)算機(jī),被稱為IAS計(jì)算機(jī)(1951年才完成,它并不是第一臺(tái)存儲(chǔ)程序計(jì)算機(jī),1949年由英國(guó)劍橋大學(xué)完成的EDSAC是第一臺(tái))。在那個(gè)報(bào)告中提出的計(jì)算機(jī)結(jié)構(gòu)被稱為馮·諾依曼結(jié)構(gòu)。馮·諾依曼結(jié)構(gòu)最重要的思想是什么?“存儲(chǔ)程序(Stored-program)”

工作方式:任何要計(jì)算機(jī)完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動(dòng)執(zhí)行。一旦程序被啟動(dòng),計(jì)算機(jī)應(yīng)能在不需操作人員干預(yù)下,自動(dòng)完成逐條取出指令和執(zhí)行指令的任務(wù)。馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)也稱為馮·諾依曼機(jī)器(Von

NeumannMachine)。幾乎現(xiàn)代所有的通用計(jì)算機(jī)大都采用馮·諾依曼結(jié)構(gòu),因此,IAS計(jì)算機(jī)是現(xiàn)代計(jì)算機(jī)的原型機(jī)。馮·諾依曼結(jié)構(gòu)計(jì)算機(jī)采用存儲(chǔ)程序工作方式:任何要計(jì)算機(jī)完成的工作都要先被編寫成程序,然后將程序和原始數(shù)據(jù)送入主存并啟動(dòng)執(zhí)行。一旦程序被啟動(dòng),計(jì)算機(jī)應(yīng)能在不需操作人員干預(yù)下,自動(dòng)完成逐條取出指令和執(zhí)行指令的任務(wù)。你認(rèn)為馮·諾依曼結(jié)構(gòu)是怎樣的?l 應(yīng)該有個(gè)主存,用來(lái)存放程序和數(shù)據(jù)l 應(yīng)該有一個(gè)自動(dòng)逐條取出指令的部件l 還應(yīng)該有具體執(zhí)行指令(即運(yùn)算)的部件l 程序由指令構(gòu)成l 指令描述如何對(duì)數(shù)據(jù)進(jìn)行處理l 應(yīng)該有將程序和原始數(shù)據(jù)輸入計(jì)算機(jī)的部件l 應(yīng)該有將運(yùn)算結(jié)果輸出計(jì)算機(jī)的部件你還能想出更多嗎?你猜得八九不離十了

IAS計(jì)算機(jī)結(jié)構(gòu)

馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)模型

早期,部件之間用分散方式相連現(xiàn)在,部件之間大多用總線方式相連趨勢(shì),點(diǎn)對(duì)點(diǎn)(分散方式)高速連接馮·諾依曼結(jié)構(gòu)的主要思想馮·諾依曼結(jié)構(gòu)的主要思想是什么呢?計(jì)算機(jī)應(yīng)由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五個(gè)基本部件組成。各基本部件的功能是:存儲(chǔ)器不僅能存放數(shù)據(jù),而且也能存放指令,形式上兩者沒有區(qū)別,但計(jì)算機(jī)應(yīng)能區(qū)分?jǐn)?shù)據(jù)還是指令;控制器應(yīng)能自動(dòng)取出指令來(lái)執(zhí)行;運(yùn)算器應(yīng)能進(jìn)行加/減/乘/除四種基本算術(shù)運(yùn)算,并且也能進(jìn)行一些邏輯運(yùn)算和附加運(yùn)算;操作人員可以通過輸入設(shè)備、輸出設(shè)備和主機(jī)進(jìn)行通信。內(nèi)部以二進(jìn)制表示指令和數(shù)據(jù)。每條指令由操作碼和地址碼兩部分組成。操作碼指出操作類型,地址碼指出操作數(shù)的地址。由一串指令組成程序。采用“存儲(chǔ)程序”工作方式。GPRs0123PCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備控制信號(hào)線數(shù)據(jù)傳送線中央處理器(CPU)現(xiàn)代計(jì)算機(jī)結(jié)構(gòu)模型FABALUALUop計(jì)算機(jī)是如何工作的呢?計(jì)算機(jī)相當(dāng)于現(xiàn)實(shí)生活中的什么?工廠、飯店認(rèn)識(shí)計(jì)算機(jī)中最基本的部件CPU:中央處理器;PC:程序計(jì)數(shù)器;MAR:存儲(chǔ)器地址寄存器ALU:算術(shù)邏輯部件;IR:指令寄存器;MDR:存儲(chǔ)器數(shù)據(jù)寄存器GPRs:通用寄存器組(由若干通用寄存器組成,早期就是累加器)GPRs0123PCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備中央處理器(CPU)FABALUALUop控制信號(hào)線數(shù)據(jù)傳送線計(jì)算機(jī)是如何工作的?先想象一下媽媽是怎樣做一桌你喜歡(指定)的菜的?廚房-CPU,你媽-控制器,盤-GPRs,鍋灶等-ALU

,架子-存儲(chǔ)器GPRs0123PCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備中央處理器(CPU)FABALUALUop控制信號(hào)線數(shù)據(jù)傳送線計(jì)算機(jī)是如何工作的?l 做菜前原材料(數(shù)據(jù))和菜譜(指令)都按序放在廚房外的架子(存儲(chǔ)器)上,每個(gè)架子有編號(hào)(存儲(chǔ)單元地址)。菜譜上信息:原料位置、做法、做好的菜放在哪里等例如,把10、11號(hào)架上的原料一起炒,并裝入3號(hào)盤然后,我告訴媽媽從第5個(gè)架上(起始PC=5)指定菜譜開始做l 開始做菜第一步:從5號(hào)架上取菜譜(根據(jù)PC取指令)第二步:看菜譜(指令譯碼)第三步:從架上或盤中取原材料(取操作數(shù))第四步:洗、切、炒等具體操作(指令執(zhí)行)第五步:裝盤或直接送桌(回寫結(jié)果)第六步:算出下一菜譜所在架子號(hào)6=5+1(修改PC的值)繼續(xù)做下一道菜(執(zhí)行下一條指令)類似“存儲(chǔ)程序”工作方式計(jì)算機(jī)是如何工作的?如果你知道你媽媽是如何做菜的,你就已經(jīng)知道計(jì)算機(jī)是如何工作的!你能告訴我計(jì)算機(jī)是如何工作的嗎?

“存儲(chǔ)程序”工作方式!GPRs0123PCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備中央處理器(CPU)FABALUALUop控制信號(hào)線數(shù)據(jù)傳送線計(jì)算機(jī)是如何工作的?程序由指令組成,若所有指令執(zhí)行完,則程序執(zhí)行結(jié)束l 程序在執(zhí)行前數(shù)據(jù)和指令事先存放在存儲(chǔ)器中,每條指令和每個(gè)數(shù)據(jù)都有地址,指令按序存放,指令由OP、ADDR字段組成,程序起始地址置PC(原材料和菜譜都放在廚房外的架子上,

每個(gè)架子有編號(hào)。媽媽從第5個(gè)架上指定菜譜開始做)l 開始執(zhí)行程序第一步:根據(jù)PC取指令(從5號(hào)架上取菜譜)第二步:指令譯碼(看菜譜)第三步:取操作數(shù)(從架上或盤中取原材料)第四步:指令執(zhí)行(洗、切、炒等具體操作)第五步:回寫結(jié)果(裝盤或直接送桌)第六步:修改PC的值(算出下一菜譜所在架子號(hào)6=5+1)繼續(xù)執(zhí)行下一條指令(繼續(xù)做下一道菜)計(jì)算機(jī)是如何工作的?程序啟動(dòng)前,指令和數(shù)據(jù)都存放在存儲(chǔ)器中,形式上沒有差別,都是0/1序列采用”存儲(chǔ)程序“工作方式:– 程序由指令組成,程序被啟動(dòng)后,計(jì)算機(jī)能自動(dòng)取出一條一條指令執(zhí)行,在執(zhí)行過程中無(wú)需人的干預(yù)。指令執(zhí)行過程中,指令和數(shù)據(jù)被從存儲(chǔ)器取到CPU,存放在CPU內(nèi)的寄存器中,指令在IR中,數(shù)據(jù)在GPR中。指令中需給出的信息:操作性質(zhì)(操作碼)源操作數(shù)1

或/和

源操作數(shù)2(立即數(shù)、寄存器編號(hào)、存儲(chǔ)地址)目的操作數(shù)地址

(寄存器編號(hào)、存儲(chǔ)地址)存儲(chǔ)地址的描述與操作數(shù)的數(shù)據(jù)結(jié)構(gòu)有關(guān)!IR?GPR?主要內(nèi)容課程的由來(lái)課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)用機(jī)器語(yǔ)言編寫程序,并記錄在紙帶或卡片上最早的程序開發(fā)過程穿孔表示0,未穿孔表示10:0101

01101:0010

01002:

……3:

……4:0110

01115:

……6:

……假設(shè):0010-jxx若在第4條指令前加入指令,則需重新計(jì)算地址碼(如jxx的目標(biāo)地址),然后重新打孔。不靈活!書寫、閱讀困難!太原始了,無(wú)法忍受,咋辦?用符號(hào)表示而不用0/1表示!輸出:指示燈等輸入:按鈕、開關(guān);所有信息都是0/1序列!轉(zhuǎn)移指令若用符號(hào)表示跳轉(zhuǎn)位置和變量位置,是否簡(jiǎn)化了問題?于是,匯編語(yǔ)言出現(xiàn)用助記符表示操作碼用標(biāo)號(hào)表示位置用助記符表示寄存器–

…..用匯編語(yǔ)言開發(fā)程序0:0101

01101:0010

01002:

……3:

……4:0110

01115:

……6:

……subBjnz

L0…………L0:add

C……B:……C:

……在第4條指令前加指令時(shí)不用改變sub、jnz和add指令中的地址碼!你認(rèn)為用匯編語(yǔ)言編寫的優(yōu)點(diǎn)是: 7:

……不會(huì)因?yàn)樵鰷p指令而需要修改其他指令不需記憶指令碼,編寫方便可讀性比機(jī)器語(yǔ)言強(qiáng)不過,這帶來(lái)新的問題,是什么呢?人容易了,可機(jī)器不認(rèn)識(shí)這些指令了!需將匯編語(yǔ)言轉(zhuǎn)換為機(jī)器語(yǔ)言!用匯編程序轉(zhuǎn)換匯編語(yǔ)言源程序由匯編指令構(gòu)成你能用一句話描述什么是匯編指令嗎?用助記符和標(biāo)號(hào)來(lái)表示的指令(與機(jī)器指令一一對(duì)應(yīng))指令又是什么呢?包含操作碼和操作數(shù)或其地址碼(機(jī)器指令用二進(jìn)制表示,匯編指令用符號(hào)表示)– 可以描述:取(或存一個(gè)數(shù))兩個(gè)數(shù)加(或減、乘、除、與、或等)根據(jù)運(yùn)算結(jié)果判斷是否轉(zhuǎn)移執(zhí)行想象用匯編語(yǔ)言編寫復(fù)雜程序是怎樣的情形?(例如,用匯編語(yǔ)言實(shí)現(xiàn)排序(sort)、矩陣相乘)進(jìn)一步認(rèn)識(shí)機(jī)器級(jí)語(yǔ)言subBjnz

L0…………L0:add

C……B:……C:

……機(jī)器語(yǔ)言和匯編語(yǔ)言都是面向機(jī)器結(jié)構(gòu)的語(yǔ)言,故它們統(tǒng)稱為機(jī)器級(jí)語(yǔ)言– 需要描述的細(xì)節(jié)太多了!程序會(huì)很長(zhǎng)很長(zhǎng)!而且在不同結(jié)構(gòu)的機(jī)器上就不能運(yùn)行!結(jié)論:用匯編語(yǔ)言比機(jī)器語(yǔ)言好,但是,還是很麻煩!SKIP指令所能描述的功能對(duì)于以下結(jié)構(gòu)的機(jī)器,你能設(shè)計(jì)出幾條指令嗎?LoadM#,R# (將存儲(chǔ)單元內(nèi)容裝入寄存器)Store

R#,M# (將寄存器內(nèi)容裝入存儲(chǔ)單元)Add

R#,R#

(類似的還有Sub,Mul等;操作數(shù)還可“R#,M#”等)BACKGPRs0123PCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備中央處理器(CPU)FABALUALUop控制信號(hào)線數(shù)據(jù)傳送線用高級(jí)語(yǔ)言開發(fā)程序處理邏輯分為三種結(jié)構(gòu)順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)有兩種轉(zhuǎn)換方式:“編譯”和“解釋”編譯程序(Complier):將高級(jí)語(yǔ)言源程序轉(zhuǎn)換為機(jī)器級(jí)目標(biāo)程序,執(zhí)行時(shí)只要啟動(dòng)目標(biāo)程序即可解釋程序(Interpreter

):將高級(jí)語(yǔ)言語(yǔ)句逐條翻譯成機(jī)器指令并立即執(zhí)行,不生成目標(biāo)文件。隨著技術(shù)的發(fā)展,出現(xiàn)了許多高級(jí)編程語(yǔ)言它們與具體機(jī)器結(jié)構(gòu)無(wú)關(guān)面向算法描述,比機(jī)器級(jí)語(yǔ)言描述能力強(qiáng)得多高級(jí)語(yǔ)言中一條語(yǔ)句對(duì)應(yīng)幾條、幾十條甚至幾百條指令有“面向過程”和“面向?qū)ο蟆钡恼Z(yǔ)言之分現(xiàn)在,幾乎所有程序員都用高級(jí)語(yǔ)言編程,但最終要將高級(jí)語(yǔ)言轉(zhuǎn)換為機(jī)器語(yǔ)言程序SoftwareSystem

software(系統(tǒng)軟件)

-

簡(jiǎn)化編程過程,并使硬件資源被有效利用操作系統(tǒng)(Operating

System):硬件資源管理,用戶接口語(yǔ)言處理系統(tǒng):翻譯程序+

Linker,

Debug,

etc

…翻譯程序(Translator)有三類:匯編程序(Assembler):匯編語(yǔ)言源程序→機(jī)器語(yǔ)言目標(biāo)程序編譯程序(Complier):高級(jí)語(yǔ)言源程序→機(jī)器級(jí)目標(biāo)程序解釋程序(Interpreter

):將高級(jí)語(yǔ)言語(yǔ)句逐條翻譯成機(jī)器指令并立即執(zhí)行,不生成目標(biāo)文件。其他實(shí)用程序:

如:磁盤碎片整理程序、備份程序等Application

software(應(yīng)用軟件)

-

解決具體應(yīng)用問題/完成具體應(yīng)用任務(wù)各類媒體處理程序:Word/Image/Graphics/…管理信息系統(tǒng)

(MIS)Game, …程序和指令執(zhí)行過程舉例GPRs0123PCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備FABALUALUop8位模型機(jī)M:8位定長(zhǎng)指令字,4個(gè)GPR,16個(gè)主存單元中央處理器(CPU)數(shù)據(jù)傳送線控制信號(hào)線程序和指令執(zhí)行過程舉例假設(shè)模型機(jī)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為通用寄存器編號(hào);addr為主存單元地址R型:op=0000,寄存器間傳送(mov);

op=0001,加(add)M型:op=1110,取數(shù)(load);op=1111,存數(shù)(store)問題:指令11100111的功能是什么?答:因?yàn)閛p=1110,故是M型load指令,功能為:R[0]

←M[0111],即:將主存地址0111(7號(hào)單元)中的8位數(shù)據(jù)裝入到0號(hào)寄存器中。程序和指令執(zhí)行過程舉例若在M上實(shí)現(xiàn)“z=x+y”,x和y分別存放在主存5和6號(hào)單元中,結(jié)果z存放在7號(hào)單元中,則程序在主存單元中的初始內(nèi)容為:主存地址主存單元內(nèi)容內(nèi)容說明(Ii表示第i條指令)指令的符號(hào)表示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 其結(jié)果是什么?70000

0000結(jié)果z,初始值為0程序和指令執(zhí)行過程舉例程序執(zhí)行過程I1:1110

0110取指令I(lǐng)R←M[0000]指令譯碼op=1110,取數(shù)PC增量PC←0000+1取數(shù)并執(zhí)行MDR←M[0110]送結(jié)果R[0]←MDR執(zhí)行結(jié)果R[0]=33指令I(lǐng)1(PC=0)的執(zhí)行過程隨后執(zhí)行PC=1中的指令I(lǐng)2GPRs0123PCMARMDR標(biāo)志寄存器控制器數(shù)據(jù)控制地址IR存儲(chǔ)器01231415OPaddr輸入設(shè)備輸出設(shè)備中央處理器(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ù)傳送線控制信號(hào)線程序和指令執(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í)行送結(jié)果執(zhí)行結(jié)果程序和指令執(zhí)行過程舉例取指令指令譯碼PC增量取數(shù)并執(zhí)行送結(jié)果執(zhí)行結(jié)果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標(biāo)控制器數(shù)據(jù)控制地址IR存儲(chǔ)器0123OPaddr輸入設(shè)備輸出設(shè)備程序和指令執(zhí)行過程舉例FABALUop:中央處理器(CPU)指令

0001

0001功能為R[0]←R[0]+R[1],指令執(zhí)行過程如下ALU運(yùn)算R[0]←R[0]+R[1]的微操作(在控制信號(hào)的控制下完成):A←R[0];B←R[1];ALUop←add;R[0]←F1110

01100001

000114志寄存器 15數(shù)據(jù)傳送線控制信號(hào)線CPU中所有微操作都由時(shí)鐘信號(hào)進(jìn)行定時(shí),時(shí)鐘信號(hào)(clock

signal)的寬度為一個(gè)時(shí)鐘周期(clockcycle)。一條指令的執(zhí)行時(shí)間包含一個(gè)或多個(gè)時(shí)鐘周期一個(gè)典型程序的轉(zhuǎn)換處理過程經(jīng)典的“

hello.c

”C-源程序hello.c的ASCII文本表示預(yù)處理(cpp)編譯(cc1)printf.o#include

<stdio.h>intmain(){printf("hello,

world\n");}功能:輸出“hello,world” 計(jì)算機(jī)不能直接執(zhí)行hello.c!hello.c源程序(文本)hello.i源程序(文本)hello.s 匯編匯編語(yǔ) (as)言程序(文本)hello.o可重定位目標(biāo)程序(二進(jìn)制)鏈接 hello(ld) 可執(zhí)行目標(biāo)程序(二進(jìn)制)以下是GCC+Linux平臺(tái)中的處理過程

Hello程序的數(shù)據(jù)流動(dòng)過程

./helloRed:shell命令行處理Blue:可執(zhí)行文件加載Cyan:hello程序執(zhí)行過程“./hello”“hello,world\n”hello,world數(shù)據(jù)經(jīng)常在各存儲(chǔ)部件間傳送。故現(xiàn)代計(jì)算機(jī)大多采用“緩存”技術(shù)!所有過程都是在CPU執(zhí)行指令所產(chǎn)生的控制信號(hào)的作用下進(jìn)行的。$./hellohello,

world$主要內(nèi)容課程的由來(lái)課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)不同層次語(yǔ)言之間的等價(jià)轉(zhuǎn)換每條指令由操作碼和若干地址碼組成任何高級(jí)語(yǔ)言程序最終通過執(zhí)行若干條指令來(lái)完成!開發(fā)和運(yùn)行程序需什么支撐?最早的程序開發(fā)很簡(jiǎn)單(怎樣簡(jiǎn)單?)– 直接輸入指令和數(shù)據(jù),啟動(dòng)后把第一條指令地址送PC開始執(zhí)行用高級(jí)語(yǔ)言開發(fā)程序需要復(fù)雜的支撐環(huán)境(怎樣的環(huán)境?)需要編輯器編寫源程序需要一套翻譯轉(zhuǎn)換軟件處理各類源程序編譯方式:預(yù)處理程序、編譯器、匯編器、鏈接器解釋方式:解釋程序– 需要一個(gè)可以執(zhí)行程序的界面(環(huán)境)GUI方式:圖形用戶界面CUI方式:命令行用戶界面支撐程序開發(fā)和運(yùn)行的環(huán)境由系統(tǒng)軟件提供最重要的系統(tǒng)軟件是操作系統(tǒng)和語(yǔ)言處理系統(tǒng)語(yǔ)言處理系統(tǒng)運(yùn)行在操作系統(tǒng)之上,操作系統(tǒng)利用指令管理硬件語(yǔ)言處理程序人機(jī)接口語(yǔ)言的運(yùn)行時(shí)系統(tǒng)操作系統(tǒng)內(nèi)核指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件操作系統(tǒng)語(yǔ)言處理系統(tǒng)早期計(jì)算機(jī)系統(tǒng)的層次最早的計(jì)算機(jī)用機(jī)器語(yǔ)言編程機(jī)器語(yǔ)言稱為第一代程序設(shè)計(jì)語(yǔ)言(Firstgenerationprogramminglanguage,1GL

)后來(lái)用匯編語(yǔ)言編程匯編語(yǔ)言稱為第二代程序設(shè)計(jì)語(yǔ)言(Secondgenerationprogramminglanguage,2GL

)應(yīng)用程序指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件應(yīng)用程序匯編程序操作系統(tǒng)指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件現(xiàn)代(傳統(tǒng))計(jì)算機(jī)系統(tǒng)的層次現(xiàn)代計(jì)算機(jī)用高級(jí)語(yǔ)言編程第三代程序設(shè)計(jì)語(yǔ)言(3GL)為過程式語(yǔ)言,編碼時(shí)需要描述實(shí)現(xiàn)過程,即“如何做”。第四代程序設(shè)計(jì)語(yǔ)言(4GL)

為非過程化語(yǔ)言,編碼時(shí)只需說明“做什么”,不需要描述具體的算法實(shí)現(xiàn)細(xì)節(jié)。應(yīng)用程序語(yǔ)言處理系統(tǒng)操作系統(tǒng)指令集體系結(jié)構(gòu)計(jì)算機(jī)硬件可以看出:語(yǔ)言的發(fā)展是一個(gè)不斷“抽象”的過程,因而,相應(yīng)的計(jì)算機(jī)系統(tǒng)也不斷有新的層次出現(xiàn)語(yǔ)言處理系統(tǒng)包括:各種語(yǔ)言處理程序(如編譯、匯編、鏈接)、運(yùn)行時(shí)系統(tǒng)(如庫(kù)函數(shù),調(diào)試、優(yōu)化等功能)操作系統(tǒng)包括人機(jī)交互界面、提供服務(wù)功能的內(nèi)核例程計(jì)算機(jī)系統(tǒng)抽象層的轉(zhuǎn)換程序執(zhí)行結(jié)果不僅取決于算法、程序編寫而且取決于語(yǔ)言處理系統(tǒng)操作系統(tǒng)ISA微體系結(jié)構(gòu)功能轉(zhuǎn)換:上層是下層的抽象,下層是上層的實(shí)現(xiàn)底層為上層提供支撐環(huán)境!不同計(jì)算機(jī)課程處于不同層次必須將各層次關(guān)聯(lián)起來(lái)解決問題最高層抽象就是點(diǎn)點(diǎn)鼠標(biāo)、拖拖圖標(biāo)、敲敲鍵盤,但這背后有多少層轉(zhuǎn)化??!計(jì)算機(jī)系統(tǒng)的不同用戶最終用戶工作在由應(yīng)用程序提供的最上面的抽象層系統(tǒng)管理員工作在由操作系統(tǒng)提供的抽象層應(yīng)用程序員工作在由語(yǔ)言處理系統(tǒng)(主要有編譯器和匯編器)的抽象層語(yǔ)言處理系統(tǒng)建立在操作系統(tǒng)之上系統(tǒng)程序員(實(shí)現(xiàn)系統(tǒng)軟件)工作在ISA層次,必須對(duì)ISA非常了解編譯器和匯編器的目標(biāo)程序由機(jī)器級(jí)代碼組成操作系統(tǒng)通過指令直接對(duì)硬件進(jìn)行編程控制ISA處于軟件和硬件的交界面(接口)ISA是對(duì)硬件的抽象所有軟件功能都建立在ISA之上ISA是最重要的層次!那么,什么是ISA呢?Hardware/Software Interface(界面)軟件硬件軟件和硬件的界面:ISA(Instruction

Set

Architecture

)指令集體系結(jié)構(gòu)機(jī)器語(yǔ)言由指令代碼構(gòu)成,能被硬件直接執(zhí)行。指令集體系結(jié)構(gòu)(ISA)ISA指InstructionSetArchitecture,即指令集體系結(jié)構(gòu)ISA是一種規(guī)約(Specification),它規(guī)定了如何使用硬件可執(zhí)行的指令的集合,包括指令格式、操作種類以及每種操作對(duì)應(yīng)的操作數(shù)的相應(yīng)規(guī)定;指令可以接受的操作數(shù)的類型;操作數(shù)所能存放的寄存器組的結(jié)構(gòu),包括每個(gè)寄存器的名稱、編號(hào)、長(zhǎng)度和用途;操作數(shù)所能存放的存儲(chǔ)空間的大小和編址方式;操作數(shù)在存儲(chǔ)空間存放時(shí)按照大端還是小端方式存放;指令獲取操作數(shù)的方式,即尋址方式;指令執(zhí)行過程的控制方式,包括程序計(jì)數(shù)器、條件碼定義等。ISA在計(jì)算機(jī)系統(tǒng)中是必不可少的一個(gè)抽象層,Why?– 沒有它,軟件無(wú)法使用計(jì)算機(jī)硬件!– 沒有它,一臺(tái)計(jì)算機(jī)不能稱為“通用計(jì)算機(jī)”ISA和計(jì)算機(jī)組成(Organization,即MicroArchitecture)是何關(guān)系?微體系結(jié)構(gòu)ISA和計(jì)算機(jī)組成(微結(jié)構(gòu))之間的關(guān)系不同ISA規(guī)定的指令集不同,如,IA-32、MIPS、ARM等計(jì)算機(jī)組成必須能夠?qū)崿F(xiàn)ISA規(guī)定的功能,如提供GPR、標(biāo)志、運(yùn)算電路等同一種ISA可以有不同的計(jì)算機(jī)組成,如乘法指令可用ALU或乘法器實(shí)現(xiàn)控制器輸入設(shè)備輸出設(shè)備PC MARMDRALU標(biāo)志寄存器IR地址數(shù)據(jù)控制GPRs0123CPU 存儲(chǔ)器01234567ISA是計(jì)算機(jī)組成的抽象計(jì)算機(jī)系統(tǒng)核心層之間的關(guān)聯(lián)高級(jí)語(yǔ)言程序詞法、語(yǔ)法及語(yǔ)義分析中間代碼生成中間代碼目標(biāo)代碼生成及優(yōu)化目標(biāo)代碼前端遵循語(yǔ)言規(guī)范后端遵循ISA規(guī)范和ABI規(guī)范執(zhí)行結(jié)果不符合程序開發(fā)者預(yù)期舉例:C90中,-2147483648

<

2147483647結(jié)果為flaseint

x=1234;printf(“%lf”,x);未定義行為后端根據(jù)ISA規(guī)范和應(yīng)用程序二進(jìn)制接口(Application

Binary

Interface,ABI)規(guī)范進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。不同平臺(tái)結(jié)果不同,相同平臺(tái)每次結(jié)果不同結(jié)果不符合預(yù)期的原因通常有兩種:(1)程序員不了解語(yǔ)言規(guī)范;(2)程序含有未定義行為(undefinedbehavior)或未確定行為(unspecifiedbehavior)的語(yǔ)句ABI是為運(yùn)行在特定ISA及特定操作系統(tǒng)之上的應(yīng)用程序中所遵循的一種機(jī)器級(jí)目標(biāo)代碼層接口描述了應(yīng)用程序和操作系統(tǒng)之間、應(yīng)用程序和所調(diào)用的庫(kù)之間、不同組成部分(如過程或函數(shù))之間在較低層次上的機(jī)器級(jí)代碼接口。運(yùn)行平臺(tái):操作系統(tǒng)+ISA架構(gòu)計(jì)算機(jī)系統(tǒng)核心層之間的關(guān)聯(lián)前端高級(jí)語(yǔ)言程序詞法、語(yǔ)法及語(yǔ)義分析中間代碼生成中間代碼目標(biāo)代碼生成及優(yōu)化目標(biāo)代碼后端后端根據(jù)ISA規(guī)范和應(yīng)用程序二進(jìn)制接口(Application

Binary

Interface,ABI)規(guī)范進(jìn)行設(shè)計(jì)實(shí)現(xiàn)。ABI是為運(yùn)行在特定ISA及特定操作系統(tǒng)之上的應(yīng)用程序所遵循的一種機(jī)器級(jí)目標(biāo)代碼層接口規(guī)約。例如:過程間調(diào)用約定(參數(shù)和返回值傳遞等)系統(tǒng)調(diào)用約定(系統(tǒng)調(diào)用的參數(shù)和調(diào)用號(hào)如何傳遞以及如何從用戶態(tài)陷入操作系統(tǒng)內(nèi)核等)目標(biāo)文件的二進(jìn)制格式函數(shù)庫(kù)使用約定寄存器使用規(guī)定程序的虛擬地址空間劃分等運(yùn)行平臺(tái):操作系統(tǒng)+ISA架構(gòu)本課程所用平臺(tái)為IA-32/x86-64+Linux+GCC+C語(yǔ)言,

Linux操作系統(tǒng)下一般使用system

V

ABI本課程大多在講解ABI和ISA規(guī)范!要了解程序的確切行為,最好的方法就是查手冊(cè)(用于給出規(guī)范)!主要內(nèi)容課程的由來(lái)課程內(nèi)容概要馮.諾依曼結(jié)構(gòu)計(jì)算機(jī)特點(diǎn)程序的開發(fā)和執(zhí)行過程計(jì)算機(jī)系統(tǒng)層次結(jié)構(gòu)計(jì)算機(jī)性能評(píng)價(jià)計(jì)算機(jī)性能的基本評(píng)價(jià)指標(biāo)“

機(jī)器X的速度(性能)是Y的n倍” 的含義:ExTime(Y)Performance(X)= =

nExTime(X)Performance(Y)相對(duì)性能用執(zhí)行時(shí)間的倒數(shù)來(lái)表示!°計(jì)算機(jī)有兩種不同的性能°

Timetodothetask響應(yīng)時(shí)間(response

time)執(zhí)行時(shí)間(execution

time)等待時(shí)間或時(shí)延(latency)°Tasksperday,hour,sec,ns.

..吞吐率(throughput)帶寬(bandwidth)°

基本的性能評(píng)價(jià)標(biāo)準(zhǔn)是:CPU的執(zhí)行時(shí)間不同應(yīng)用場(chǎng)合用戶關(guān)心的性能不同:-要求吞吐率高的場(chǎng)合,例如:多媒體應(yīng)用(音/視頻播放要流暢)-要求響應(yīng)時(shí)間短的場(chǎng)合:例如:事務(wù)處理系統(tǒng)(存/取款速度要快)-要求吞吐率高且響應(yīng)時(shí)間短的場(chǎng)合:ATM、文件服務(wù)器、Web服務(wù)器等CPU執(zhí)行時(shí)間的計(jì)算CPI:CyclesPer

InstructionCPU執(zhí)行時(shí)間

=CPU時(shí)鐘周期數(shù)

/

程序

X

時(shí)鐘周期=CPU時(shí)鐘周期數(shù)

/

程序

÷

時(shí)鐘頻率=指令條數(shù)

/

程序

X

CPI

X

時(shí)鐘周期CPU時(shí)鐘周期數(shù)

/

程序

=指令條數(shù)

/

程序

X

CPICPI

=CPU時(shí)鐘周期數(shù)

/

程序

÷指令條數(shù)

/

程序CPI

用來(lái)衡量以下各方面的綜合結(jié)果InstructionSet

Architecture(ISA)Implementationofthat

architecture組成(Organization) &

實(shí)現(xiàn)技術(shù)(Technology)Program:編譯(Compiler)、算法(Algorithm)AspectsofCPU

PerformanceCPU

time=Seconds=InstructionsxCyclesxSecondsProgramProgramInstructionCycleinstr.

CountCPIclock

rateProgrammingCompilerInstr.Set

Arch.OrganizationTechnology思考:三個(gè)因素與哪些方面有關(guān)?例如,{…..y=4*x;}AspectsofCPU

PerformanceCPU

time= Seconds= InstructionsxCyclesxSecondsProgramProgramInstructionCycleinstr.Count

CPIclock

rateProgramming??Compiler?(?)Instr.Set

Arch.??Organization??Technology ?用加法指令、乘法指令或左移指令都可實(shí)現(xiàn)“y=4*x;”顯然得到的指令條數(shù)不同,CPI也不同如何計(jì)算CPI?CPI =wherei ix

FCPIn∑i=

1CiiInstruction

_

CountF

對(duì)于某一條特定的指令而言,其CPI是一個(gè)確定的值。但是,對(duì)于某一個(gè)程序或一臺(tái)機(jī)器而言,其CPI是一個(gè)平均值,表示該程序或該機(jī)器指令集中每條指令執(zhí)行時(shí)平均需要多少時(shí)鐘周期。假定CPIi

Ci分別為第i類指令的CPI和指令條數(shù),則程序的總時(shí)鐘數(shù)為:n ni

=

1 i=

1假定CPIi、Fi是各指令CPI和在程序中的出現(xiàn)頻率,則程序綜合CPI為:總時(shí)鐘數(shù)

=∑

CPI

i

x

Ci所以,

CPU時(shí)間=

時(shí)鐘周期

x∑

CPI

i

x

Ci已知CPU時(shí)間、時(shí)鐘頻率、總時(shí)鐘數(shù)、指令條數(shù),則程序綜合CPI為:CPI=(CPU

時(shí)間×?xí)r鐘頻率)/指令條數(shù)

=總時(shí)鐘周期數(shù)

/指令條數(shù)問題:指令的CPI、機(jī)器的CPI、程序的CPI各能反映哪方面的性能?單靠CPI不能反映CPU性能!為什么?例如,單周期處理器CPI=1,但周期長(zhǎng),故性能差!Example1程序P在機(jī)器A上運(yùn)行需10

s,

機(jī)器A的時(shí)鐘頻率為400MHz?,F(xiàn)在要設(shè)計(jì)一臺(tái)機(jī)器B,希望該程序在B上運(yùn)行只需6

s.機(jī)器B時(shí)鐘頻率的提高導(dǎo)致了其CPI的增加,使得程序P在機(jī)器B上時(shí)鐘周期數(shù)是在機(jī)器A上的1.2倍。機(jī)器B的時(shí)鐘頻率達(dá)到A的多少倍才能使程序P在B上執(zhí)行速度是A上的10/6=1.67倍?Answer:CPU時(shí)間A

=

時(shí)鐘周期數(shù)A

/

時(shí)鐘頻率A時(shí)鐘周期數(shù)A

=

10

sec

x

400MHz

=

4000M個(gè)時(shí)鐘頻率B

=

時(shí)鐘周期數(shù)B

/

CPU時(shí)間B=1.2x4000M/6sec=800

MHz機(jī)器B的頻率是A的兩倍,但機(jī)器B的速度并不是A的兩倍!

Marketing

Metrics

(產(chǎn)品宣稱指標(biāo)) MIPS=InstructionCount/Time

x106=ClockRate/CPIx

106指令使用的頻度動(dòng)態(tài)變化Peak

MIPS:

(不實(shí)用)所以MIPS數(shù)不能說明性能的好壞(用下頁(yè)中的例子來(lái)說明)MFLOPS =FPOperations/Time

x106MillionFloating-point

OperationsPer

Second(浮點(diǎn)操作速度)不一定是程序中花時(shí)間的部分Million

Instructions

Per

Second (定點(diǎn)指令執(zhí)行速度)因?yàn)槊織l指令執(zhí)行時(shí)間不同,所以MIPS總是一個(gè)平均值。不同機(jī)器的指令集不同程序由不同的指令混合而成用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結(jié)果:因?yàn)閮?yōu)化后減少了ALU指令(其他指令數(shù)沒變),所以程序執(zhí)行時(shí)間一定減少了,但優(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是如何算出來(lái)的?浮點(diǎn)操作速度單位問題:GFLOPS、TFLOPS、PFLOPS等的含義是什么?浮點(diǎn)運(yùn)算實(shí)際上包括了所有涉及小數(shù)的運(yùn)算,在某類應(yīng)用軟件中常常出現(xiàn),比整數(shù)運(yùn)算更費(fèi)時(shí)間。現(xiàn)今大部分的處理器中都有浮點(diǎn)運(yùn)算器。因此每秒浮點(diǎn)運(yùn)算次數(shù)所量測(cè)的實(shí)際上就是浮點(diǎn)運(yùn)算器的執(zhí)行速度。而最常用來(lái)測(cè)量每秒浮點(diǎn)運(yùn)算次數(shù)的基準(zhǔn)程序(benchmark)之一,就是Linpack。一個(gè)MFLOPS(megaFLOPS)等於每秒一佰萬(wàn)(=10^6)次的浮點(diǎn)運(yùn)算,一個(gè)GFLOPS(gigaFLOPS)等於每秒拾億(=10^9)次的浮點(diǎn)運(yùn)算,一個(gè)TFLOPS(teraFLOPS)等於每秒萬(wàn)億(=10^12)次的浮點(diǎn)運(yùn)算,一個(gè)PFLOPS(petaFLOPS)等於每秒千萬(wàn)億(=10^15)次的浮點(diǎn)運(yùn)算,一個(gè)EFLOPS(exaFLOPS)等於每秒百億億(=10^18)次的浮點(diǎn)運(yùn)算。全球超級(jí)計(jì)算機(jī)500強(qiáng)2017年6月19號(hào)公布:第一名:中國(guó)國(guó)家超級(jí)計(jì)算無(wú)錫中心研制的“神威·太湖之光”浮點(diǎn)運(yùn)算速度為每秒9.3億億次。第二名:國(guó)防科大研制的“天河二號(hào)”超級(jí)計(jì)算機(jī),每秒3.386億億次的浮點(diǎn)運(yùn)算速度,之前曾獲得五連冠。速度單位是

Tflop/s

TFLOPS

選擇性能評(píng)價(jià)程序(Benchmarks)

用基準(zhǔn)程序來(lái)評(píng)測(cè)計(jì)算機(jī)的性能基準(zhǔn)測(cè)試程序是專門用來(lái)進(jìn)行性能評(píng)價(jià)的一組程序基準(zhǔn)程序通過運(yùn)行實(shí)際負(fù)載來(lái)反映計(jì)算機(jī)的性能最好的基準(zhǔn)程序是用戶實(shí)際使用的程序或典型的簡(jiǎn)單程序基準(zhǔn)程序的缺陷現(xiàn)象:基準(zhǔn)程序的性能與某段短代碼密切相關(guān)時(shí),會(huì)被利用以得到不當(dāng)?shù)男阅茉u(píng)測(cè)結(jié)果手段:硬件系統(tǒng)設(shè)計(jì)人員或編譯器開發(fā)者針對(duì)這些代碼片段進(jìn)行特殊的優(yōu)化,使得執(zhí)行這段代碼的速度非??炖?:Intel

Pentium處理器運(yùn)行SPECint時(shí)用了公司內(nèi)部使用的特殊編譯器,使其性能極高例2:矩陣乘法程序SPECmatrix300有99%的時(shí)間運(yùn)行在一行語(yǔ)句上,有些廠商用特殊編譯器優(yōu)化該語(yǔ)句,使性能達(dá)VAX11/780的729.8倍!第二章

數(shù)據(jù)的表示和運(yùn)算數(shù)值數(shù)據(jù)的表示非數(shù)值數(shù)據(jù)的表示數(shù)據(jù)的存放數(shù)據(jù)的運(yùn)算數(shù)據(jù)的表示和運(yùn)算主要教學(xué)目標(biāo)掌握計(jì)算機(jī)內(nèi)部各種數(shù)據(jù)的編碼表示及其運(yùn)算方法了解高級(jí)語(yǔ)言程序中的各種類型變量對(duì)應(yīng)的表示形式在高級(jí)語(yǔ)言程序中的變量、機(jī)器數(shù)和底層硬件(寄存器、加法器、ALU等)之間建立關(guān)聯(lián)綜合運(yùn)用所學(xué)知識(shí),分析高級(jí)語(yǔ)言和機(jī)器級(jí)語(yǔ)言程序設(shè)計(jì)中遇到的各種與數(shù)據(jù)表示和運(yùn)算相關(guān)的問題,解釋相應(yīng)的執(zhí)行結(jié)果C語(yǔ)言參考網(wǎng)站:/c/linux-c-programming/數(shù)據(jù)的表示和運(yùn)算分以下五個(gè)部分介紹第一講:數(shù)值數(shù)據(jù)的表示定點(diǎn)數(shù)編碼、整數(shù)的表示、浮點(diǎn)數(shù)表示C語(yǔ)言程序的整數(shù)類型和浮點(diǎn)數(shù)類型第二講:非數(shù)值數(shù)據(jù)的表示、數(shù)據(jù)的存放方式邏輯值、西文字符、漢字字符數(shù)據(jù)寬度單位、大端/小端第三講:加法器和算術(shù)邏輯部件按位運(yùn)算\邏輯運(yùn)算\移位運(yùn)算\位擴(kuò)展和位截?cái)噙\(yùn)算無(wú)符號(hào)和帶符號(hào)整數(shù)的加減運(yùn)算、ALU第四講:定點(diǎn)數(shù)乘除運(yùn)算無(wú)符號(hào)和帶符號(hào)整數(shù)的乘除運(yùn)算變量與常數(shù)之間的乘除運(yùn)算第五講:浮點(diǎn)數(shù)加減乘除運(yùn)算從C程序的表達(dá)式出發(fā),用機(jī)器數(shù)在電路中的執(zhí)行來(lái)解釋表達(dá)式的執(zhí)行結(jié)果課程內(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ù)的運(yùn)算如果程序處理的是圖像、視頻、聲音、文字等數(shù)據(jù),那么,(1)如何獲得這些數(shù)據(jù)?(2)如何表示這些數(shù)據(jù)?(3)如何處理這些數(shù)據(jù)?“轉(zhuǎn)換”的概念在數(shù)據(jù)表示中的反映抽象概 具括 體實(shí)現(xiàn)感覺媒體信息樹、鏈表等結(jié)構(gòu)化數(shù)據(jù)描述int,float,array,

struct等類型指令指定寄存器或內(nèi)存中數(shù)據(jù)ALU中運(yùn)算或總線上傳輸?shù)臄?shù)據(jù)邏輯門位信息問題(應(yīng)用)算法程序(語(yǔ)言)指令集體系結(jié)構(gòu)(ISA)微體系結(jié)構(gòu)電路器件(晶體管)各類數(shù)據(jù)之間的轉(zhuǎn)換關(guān)系對(duì)連續(xù)信息采樣,以使信息離散化對(duì)離散樣本用0和1進(jìn)行編碼定點(diǎn)運(yùn)算指令邏輯、位操作或字符處理指令浮點(diǎn)運(yùn)算指令數(shù)值數(shù)據(jù)的表示數(shù)值數(shù)據(jù)表示的三要素進(jìn)位記數(shù)制定、浮點(diǎn)表示如何用二進(jìn)制編碼即:要確定一個(gè)數(shù)值數(shù)據(jù)的值必須先確定這三個(gè)要素。例如,機(jī)器數(shù)

01011001的值是多少?

答案是:不知道!進(jìn)位記數(shù)制十進(jìn)制、二進(jìn)制、十六進(jìn)制、八進(jìn)制數(shù)及其相互轉(zhuǎn)換定/浮點(diǎn)表示(解決小數(shù)點(diǎn)問題)定點(diǎn)整數(shù)、定點(diǎn)小數(shù)浮點(diǎn)數(shù)(可用一個(gè)定點(diǎn)小數(shù)和一個(gè)定點(diǎn)整數(shù)來(lái)表示)定點(diǎn)數(shù)的編碼(解決正負(fù)號(hào)問題)原碼、補(bǔ)碼、反碼、移碼(反碼很少用)SignandMagnitude(原碼的表示)Decimal Binary0000010001200103001140100501016011070111u

容易理解, 但是:0

的表示不唯一,故不利于程序員編程加、減運(yùn)算方式不統(tǒng)一需額外對(duì)符號(hào)位進(jìn)行處理,故不利于硬件設(shè)計(jì)特別當(dāng)

a<b時(shí),實(shí)現(xiàn)

a-b比較困難從

50年代開始,整數(shù)都采用補(bǔ)碼表示但浮點(diǎn)數(shù)的尾數(shù)還是用原碼定點(diǎn)小數(shù)表示Decimal Binary-0 1000-1 1001-2 1010-3 1011-4 1100-5 1101-6 1110-7 1111補(bǔ)碼

-

模運(yùn)算(modular運(yùn)算)時(shí)鐘是一種模12系統(tǒng)假定鐘表時(shí)針指向10點(diǎn),要將它撥向6點(diǎn),

則有兩種撥法:①

倒撥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對(duì)模12的補(bǔ)碼

(即:-

4的模12補(bǔ)碼等于8)。同樣有

-3

9-5≡

7(mod

12)(mod

12)等重要概念:在一個(gè)模運(yùn)算系統(tǒng)中,一個(gè)數(shù)與它除以“?!焙蟮挠鄶?shù)等價(jià)。結(jié)論1:

一個(gè)負(fù)數(shù)的補(bǔ)碼等于模減該負(fù)數(shù)的絕對(duì)值。結(jié)論2:

對(duì)于某一確定的模,某數(shù)減去小于模的另一數(shù),總可以用該數(shù)加上另一數(shù)負(fù)數(shù)的補(bǔ)碼來(lái)代替。補(bǔ)碼(modular運(yùn)算):+和–的統(tǒng)一現(xiàn)實(shí)世界中的模運(yùn)算系統(tǒng)補(bǔ)碼的表示現(xiàn)實(shí)世界的模運(yùn)算系統(tǒng)舉例例1:“鐘表”模運(yùn)算系統(tǒng)假定時(shí)針只能順撥,從10點(diǎn)倒撥4格后是幾點(diǎn)?10-4=10+(12-4)=10+8=

6 (mod

12)例2:“4位十進(jìn)制數(shù)”

模運(yùn)算系統(tǒng)假定算盤只有四檔,且只能做加法,則在算盤上計(jì)算9828-1928等于多少?9828-1928=9828+(104-1928)=9828+8072=1

7900=7900(mod

104)取模即只留余數(shù),高位“1”被丟棄!相當(dāng)于只有低4位留在算盤上。計(jì)算機(jī)中的運(yùn)算器是模運(yùn)算系統(tǒng)8位二進(jìn)制加法器模運(yùn)算系統(tǒng)計(jì)算0111

1111

-

0100

0000

=

?01111111-01000000=01111111+(28-0100

0000)=01111111+11000000=100111111(mod

28)=0011

1111只留余數(shù),“1”被丟棄結(jié)論1:

一個(gè)負(fù)數(shù)的補(bǔ)碼等于對(duì)應(yīng)正數(shù)補(bǔ)碼的“各位取反、末位加1”運(yùn)算器適合用補(bǔ)碼表示和運(yùn)算0000000110000010010011101111011101011010101111001101001101101001運(yùn)算器只有有限位,假設(shè)為n位,則運(yùn)算結(jié)果只能保留低n位,故可看成是個(gè)只有n檔的二進(jìn)制算盤,因此,其模為2n

。當(dāng)n=4時(shí),共有16個(gè)機(jī)器數(shù):0000

~

1111,可看成是模為24

的鐘表系統(tǒng)。真值的范圍為-8~

+7補(bǔ)碼的定義[X]補(bǔ)=

2n

+

X假定補(bǔ)碼有n位,則:(-2n-1≤X<2n-1,mod

2n)X是真值,[x]補(bǔ)是機(jī)器數(shù)真值和機(jī)器數(shù)的含義是什么?求特殊數(shù)的補(bǔ)碼假定機(jī)器數(shù)有n位①

[-2n-1]補(bǔ)=

2n

-2n-1

=

10…0(n-1個(gè)0)

(mod

2n)②

[-1]補(bǔ)=2n-

0…01

=

11…1(n個(gè)1) (mod

2n)③

[+0]補(bǔ)=[-0]補(bǔ)=00…0(n個(gè)0)32位機(jī)器中,int、short、char型數(shù)據(jù)的機(jī)器數(shù)各占幾位?補(bǔ)碼與真值之間的簡(jiǎn)便轉(zhuǎn)換例:設(shè)機(jī)器數(shù)有8位,求123和-123的補(bǔ)碼表示。如何快速得到123的二進(jìn)制表示?解:

123

=

127

4

=

01111111B

100B

=

01111011B–123=–01111011B[01111011]補(bǔ)=

28

+

01111011

=

100000000

+

01111011=

01111011

(mod

28),即

7BH。[–

01111011]補(bǔ)=

28

01111011

=

10000

0000

01111011=11111111–01111011

+1=1000

0100+1 各位取反,末位加1=

1000

0101,即

85

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論