資料的機器級表示與處理 C語言的運算

2021-08-21 08:09:26 字數 2400 閱讀 3747

高階語言程式中涉及的運算(以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 ...