彙編與C程式疑難 計組討論課4

2021-09-19 03:05:52 字數 1259 閱讀 8745

**一結果是0x80000000,**二會出現執行錯誤。

**一中,在計算變數除以整數時,編譯器做了優化,自動將該變數轉化成一系列位運算和加法運算。如除以-1,他直接把資料取反了,沒有執行除法。而除以變數時,不會執行這樣的優化,直接除了。而int_min(有符號)除以-1,和任意整數除以0,一樣,會出現錯誤,這與sigfpe訊號有關。關於sigfpe訊號的wiki。

有以下相關的知識

eflags暫存器

標誌位檢視eflags暫存器,他會把標誌位為1的位列印出來

i r eflags

sigfpe 是乙個程序在執行了乙個錯誤的算術操作時給他傳送的訊號。一般有兩種情況:

1、整數除以0

2、int_min / -1

在linux命令列中會出現floating point exception (core dumped),也就是浮點數例外 (核心已轉儲)

原因如下,截自同學的ppt。

就是說,在老版本gcc中,執行兩個如a = f(10)時,第乙個會發生精度損失,而第二個不會,所以判斷會出現「不等於」。而對於第二個**,有三個f(10)的計算,所以前兩個的結果都存到暫存器當中,發生了相同的精度損失,結果相同,所以判斷「等於」。

bug1:申請了記憶體沒有釋放

bug2:沒有對count的大小進行判斷

bug2中如果count很大,如2^30,乘以sizeof(int) = 4 之後,會發生溢位。

malloc的函式原型為void *malloc(size_t size);

溢位經過強制型別轉化後,會變成很小的數,然後沒有分配正確的記憶體。如果不知情使用了這些記憶體,就會出錯。

計權聲級(A計權,B計權與C計權)

由於人耳對不同頻率的聲音的感受能力不同,即相同聲壓級的聲音,人們會在聽覺上感到不同的響度。當需要客觀測量又要反映主觀響度感覺的方法來度量和評估實際的聲音強弱。國際標準為 iec61672 2014 由於a計權對描述人耳聽力相對於真實聲學的頻率響應最有意義,所以應用最為廣泛。但由於a計權僅適用於相對安...

匯程式設計序呼叫c程式

首先是匯程式設計序,還是前面的例子,只是加了2行程式 extern main 說明這個函式從外面程式獲得 section data charact db a section text global start start mov ecx,charact push ecx call usestack ...

ARM彙編程式設計之C程式呼叫匯程式設計序

編寫乙個彙編子程式,實現兩個字資料的加法運算,編寫乙個c程式來呼叫該彙編子程式,並將運算結果使用printf 函式顯示出來。示例如下 為解決這個問題,分別編寫滿足需求的c程式和匯程式設計序。c程式源 define uint32 unsigned int extern uint32 add uint3...