孫程智
摘 要 計(jì)算機(jī)硬件的設(shè)計(jì)目標(biāo)來源于軟件需求。高級語言中用到的各種運(yùn)算,通過編譯成底層的算數(shù)運(yùn)算指令和邏輯運(yùn)算指令實(shí)現(xiàn),這些底層運(yùn)算指令能在機(jī)器硬件上直接被執(zhí)行。因此在介紹運(yùn)算部件的設(shè)計(jì)之前,有必要先了解一下高級語言程序和機(jī)器指令所涉及到的一些運(yùn)算。所有高級語言的運(yùn)算功能大同小異,某一種語言能代表高級語言的總體情況,因此用C語言中的運(yùn)算為例進(jìn)行說明。
關(guān)鍵詞 C語言 運(yùn)算 移位運(yùn)算
中圖分類號:G306;TP311.1 文獻(xiàn)標(biāo)識碼:A
1 C程序中涉及到的運(yùn)算
加減乘除等算數(shù)運(yùn)算是高級語言中必須提供的基本運(yùn)算,可以有無符號數(shù)的算數(shù)運(yùn)算、待符號整數(shù)的算數(shù)運(yùn)算和浮點(diǎn)數(shù)的算數(shù)運(yùn)算。C語言中除了這些運(yùn)算以外,還有以下幾類基本運(yùn)算:按位運(yùn)算、漏記運(yùn)算、移位運(yùn)算、位擴(kuò)展和位截?cái)噙\(yùn)算。
1.1移位運(yùn)算
C語言中提供了一組移位運(yùn)算,移位操作有邏輯移位和算術(shù)移位兩種,邏輯移位不考慮符號為,總是把高位移出,低位補(bǔ)0。對于無符號整數(shù)的邏輯左移,如果最高位移出的是1,則發(fā)生溢出。因?yàn)橛?jì)算機(jī)內(nèi)部的待符號整數(shù)都是用補(bǔ)碼表示的,所以對于待符號整數(shù)的移位操作應(yīng)采用補(bǔ)碼算數(shù)移位方式,左移時(shí)高位移出,低位補(bǔ)0如果移出的高位不同于移位后的符號位,即左移前,后符號位不同,則發(fā)生溢出,右移時(shí)低位移出高位補(bǔ)符號。雖然C語言沒有明確規(guī)定應(yīng)該采用邏輯移位還是算術(shù)移位,但是實(shí)際上許多機(jī)器和編譯器都對無符號整數(shù)采用邏輯移位方式,而對帶符號整數(shù)采用算術(shù)移位方式。
1.2邏輯運(yùn)算
C語言中的邏輯算符有:符號表示OR運(yùn)算;符號表示AND運(yùn)算;符號表示NOT運(yùn)算。邏輯運(yùn)算很容易和按位運(yùn)算混希,事實(shí)上他們的功能完全不同。邏輯運(yùn)算是非數(shù)值計(jì)算,其操作數(shù)只有兩個(gè)邏輯值True和False通常用非0數(shù)表示邏輯值True,而全0數(shù)表示邏輯值False;而按位運(yùn)算是一種數(shù)值運(yùn)算,運(yùn)算時(shí)將兩個(gè)操作數(shù)中對應(yīng)各二進(jìn)位按照指定的邏輯運(yùn)算規(guī)則逐位進(jìn)行計(jì)算。
1.3位擴(kuò)展和位截?cái)噙\(yùn)算
C語言中沒有明確的為擴(kuò)展運(yùn)算符,但是在進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換時(shí),如果遇到一個(gè)短數(shù)項(xiàng)常數(shù)轉(zhuǎn)化,就要進(jìn)行為擴(kuò)展運(yùn)算了,進(jìn)行為擴(kuò)展運(yùn)算時(shí),擴(kuò)展后的數(shù)值應(yīng)保持不變,有兩種為擴(kuò)展方式,0擴(kuò)展和符號擴(kuò)展。0擴(kuò)展用于無符號數(shù)只要在短的無符號數(shù)前添加足夠的0即可,符號擴(kuò)展用于補(bǔ)碼表示的帶符號整數(shù),通過在短的帶符號整數(shù)前添加足夠多的符號位來擴(kuò)展。
1.4按位運(yùn)算
語言中的按位運(yùn)算有:符號“|”表示按位OR運(yùn)算,符號“&”表示按位AND運(yùn)算1;符號“~”表示按位NOT運(yùn)算;符號“^”表示按位XOR運(yùn)算。按位運(yùn)算的一個(gè)重要運(yùn)用就是實(shí)現(xiàn)掩碼操作,通過與給定的一個(gè)位模式進(jìn)行按位與可以提取所需要的為,然后可以對這些位進(jìn)行“置1”、“清0”、“1測試”或“0測試”等。這里位模式被稱為“掩碼”。
2 MIPS指令中涉及的運(yùn)算
高級語言中的所有運(yùn)算都是通過指令系統(tǒng)中的運(yùn)算指令實(shí)現(xiàn)的,一個(gè)指令系統(tǒng)中涉及運(yùn)算的指令有很多。MIPS指令系統(tǒng)涉及的運(yùn)算有按位邏輯運(yùn)算、邏輯移位、算數(shù)移位、帶符號整數(shù)的加減乘除、無符號整數(shù)加減乘除、帶符號整數(shù)的符號擴(kuò)展、無符號數(shù)的0擴(kuò)展、單精度浮點(diǎn)數(shù)加減乘除、雙精度浮點(diǎn)數(shù)加減乘除等。MIPS指令中沒有專門的算術(shù)左移指令。因?yàn)閷τ谧笠苼碚f邏輯移位和算術(shù)移位的結(jié)果都一樣,都是丟棄k個(gè)最高位。并在低位補(bǔ)k個(gè)0。所以,帶符號整數(shù)和無符號整數(shù)的左移都可用邏輯左移指令實(shí)現(xiàn)。利用MIPS提供的這些運(yùn)算指令完全能夠?qū)崿F(xiàn)C語言所需要的各種運(yùn)算要求。
3總結(jié)
C語言是計(jì)算機(jī)不可或缺的一部分,我們應(yīng)該牢牢掌握。
參考文獻(xiàn)
[1] 王威.計(jì)算機(jī)網(wǎng)絡(luò)管理工作與維護(hù)技術(shù)探討[J].電子技術(shù)與軟件工程,2015(03):36.
[2] 楊文許.計(jì)算機(jī)網(wǎng)絡(luò)管理與維護(hù)技術(shù)[J].祖國,2013(02):84.
[3] 劉翌龍.淺談網(wǎng)絡(luò)管理與維護(hù)[J].無線互聯(lián)科技,2014(06):6+51.
[4] 張學(xué)軍.淺談?dòng)?jì)算機(jī)網(wǎng)絡(luò)管理與維護(hù)的思考[J].商業(yè)文化(上半月),2011(11):397.