高階語言程式中涉及的運算(以c語言為例)
整數算術運算、浮點數算術運算
按位、邏輯、移位、位擴充套件和位截斷
指令集中涉及到的運算
涉及到的定點數運算
算術運算
帶符號整數運算:取負 / 符號擴充套件 / 加 / 減 / 乘 / 除 / 算術移位
無符號整數運算:0擴充套件 / 加 / 減 / 乘 / 除
邏輯運算
邏輯操作:與 / 或 / 非 / …
移位操作:邏輯左移 / 邏輯右移
涉及到的浮點數運算:加、減、乘、除
基本運算部件alu的設計
算術運算(最基本的運算)
無符號數、帶符號整數、浮點數的+、-、*、/ 運算等
按位運算
用途對位串實現「掩碼」(mask)操作或相應的其他處理
(主要用於對多**資料或狀態/控制資訊進行處理)
操作按位或:「|」
按位與:「&」
按位取反:「~」
按位異或:「^」
問題:如何從16位取樣資料y中提取高位位元組,並使低位元組為0?
可用「&」實現「掩碼」操作:y & 0xff00
例如,當y=0x2c0b時,得到結果為:0x2c00
邏輯運算
用途用於關係表示式的運算
例如,if (x>y and i<100)then ……中的「and」運算
操作「‖」表示「or」運算
「&&」表示「and」運算
例如, if ((x>y) && (i<100)) then ……
「!」表示「not」運算
與按位運算的差別
符號表示不同:& ~ && ;| ~ ‖; ……
運算過程不同:按位 ~ 整體
結果型別不同:位串 ~ 邏輯值
移位運算
用途提取部分資訊
擴大或縮小數值的2、4、8…倍
操作左移::x<>k
不區分是邏輯移位還是算術移位,由x的型別確定
無符號數:邏輯左移、邏輯右移
高(低)位移出,低(高)位補0,可能溢位!
問題:何時可能發生溢位?如何判斷溢位?
若高位移出的是1,則左移時發生溢位
帶符號整數:算術左移、算術右移
左移:高位移出,低位補0。可能溢位!
溢位判斷:若移出的位不等於新的符號位,則溢位。
右移:低位移出,高位補符,可能發生有效資料丟失。
位擴充套件和位截斷運算
用途型別轉換時可能需要資料擴充套件或截斷
操作沒有專門操作運算子,根據型別轉換前後資料長短確定是擴充套件還是截斷
擴充套件:短轉長
無符號數:0擴充套件,前面補0
帶符號整數:符號擴充套件,前面補符
截斷:長轉短
強行將高位丟棄,故可能發生「溢位」
例1(擴充套件操作):在大端機上輸出si, usi, i, ui的十進位制和十六進製制值是什麼?
short si = -32768;
unsigned short usi = si;
int i = si;
unsingned ui = usi ;
總結:c語言程式中的基本資料型別及其基本運算型別
基本資料型別
無符號數、帶符號整數、浮點數、位串、字元(串)
基本運算型別
算術、按位、邏輯、移位、擴充套件和截斷、匹配
計算機如何實現高階語言程式中的運算?
將各類表示式編譯**換)為指令序列
計算機直接執行指令來完成運算
例:c語言賦值語句「f = (g+h) – (i+j);」中變數i、j、f、g、h由編譯器分別分配給mips暫存器$t0~$t4。暫存器$t0~$t7的編號對應8~15,上述程式段對應的mips機器**和彙編表示(#後為注釋)如下:
000000 01011 01100 01101 00000 100000 add $t5, $t3, $t4 # g+h
000000 01000 01001 01110 00000 100000 add $t6, $t0, $t1 # i+j
000000 01101 01110 01010 00000 100010 sub $t2, $t5, $t6 # f =(g+h)–(i+j)
C語言過程(函式)的機器級表示
乙個函式呼叫包括將資料 包括引數和返回值 和控制從 一部分傳到另一部分。還包括對函式內區域性變數分配空間,並在退出時釋放空間。其中,轉移控制到過程 和 從過程轉移出控制 使用指令 區域性變數的分配和釋放通過 程式棧 來實現。棧由高位址向低位址方向增長。對單個過程分配的棧稱為 棧幀。以兩個指標來界定 ...
程式的機器級表示
三種 立即數 常數值,在att格式的彙編 中,書寫格式是 整數,如 123 0x12 暫存器 如 32位的 eax 16位的 ax 8位的 al 儲存器引用 mov 同等傳送,即倆者的大小一致 如 movb byte,movew word,movel longword dw movs movz 不同...
程式的機器級表示
32位和64位 instruction system architecture 程式計數器pc eip 整數暫存器 8個每個32位 有的用來記錄狀態,有的用來儲存臨時資料,區域性變數,返回值 3.條件碼暫存器 指標都是雙字 char short long 其他4位元組 movb movw movl ...