家庭作業第三章

2022-08-18 19:15:11 字數 1598 閱讀 5186

作業搭檔20135316王劍橋20135332武西垚

3.61

題中**在迴圈時會產生6

個臨時的變數,故共需要六個暫存器在存放資料,但是由於處理器的六個暫存器中,

%esp

和%ebp

不能用於存放臨時資料,而且另外乙個暫存器還必須用來儲存乘法指令的結果。因此必須將迴圈中的值的數量減少到5個。

當沒有足夠多的暫存器來儲存臨時資料時,編譯器必須把一些區域性變數放到儲存器中

由於在每次迴圈中**從儲存器中取出n

的值進行檢查迴圈是否終止,所以我覺得可以去掉每次的減產環節,直接用立即數來控制迴圈結束。**如下:

int var_prod_ele(int n, int a[n][n], int b[n][n], int i, int k)

但是這樣得到的結果仍然會使用到儲存器。

按下面的**,迴圈裡面貌似就沒有用到儲存器。

但是用到了乙個常量4

,就是增加

a的時候,會

add 4

。只需要result,a

,e,b

,4n這五個變數。

思路如下,先初始化a

陣列的行和

b陣列的列,記住他們的位址,同時記住

a陣列那一行最後乙個元素的位址,之後迴圈每次用變換的

a陣列行位址和

a陣列最後乙個元素位址進行比較來控制迴圈的結束。若沒有到達

a陣列行的最後乙個元素,則

a陣列依次向後移動,

b陣列依次向下移動,直到最後達到最後乙個元素。**如下:

int var_prod_ele(int n, int a[n][n], int b[n][n], int i, int k)

return result;

}3.63

e1和e2是用#define宣告的巨集表示式,用引數表示a矩陣的維度。

int sum_col(int n, int a[e1(n)][e2(n)],int j) {

int i;

int result = 0;

for (i = 0; i < e1(n); i++)

result += a[i][j];

return result;

1.分析通過資訊交換所得的觀察。

最常用於協議逆向工程,涉及使用匯流排分析器和資料報嗅探器。在接入計算機匯流排或網路的連線,並成功擷取通訊資料後,可以對匯流排或網路行為進行分析,以製造出擁有相同行為的通訊實現。此法特別適用於裝置驅動程式的逆向工程。有時,由硬體製造商特意所做的工具,如jtag埠或各種除錯工具,也有助於嵌入式系統的逆向工程。對於微軟的windows系統,受歡迎的底層偵錯程式有softice。

2.反彙編,即使用反彙編器,把程式的原始機器碼,翻譯成較便於閱讀理解的彙編**。這適用於任何的電腦程式,對不熟悉機器碼的人特別有用。流行的相關工具有ollydebug和ida。

3.反編譯,即使用反編譯器,嘗試從程式的機器碼或位元組碼,重現高階語言形式的源**。

e1(n)在

esi中,

esi = 3n

。e2(n)在

ebx中,

ebx = 4*e2(n) = 4*(2n-1)

。所以e2(n) = 2n-1

20135223何偉欽 第三章家庭作業

3.54解析 此題較為簡單,只要對號入座,即可寫出相應的c語言 3.56解析 1 由c 函式的定義可先猜測得 esi x,ebx n 由result mask初始化以迴圈表示式的mask的使用可得 edi result,edx為mask,即是 暫存器 變數 esi x ebx n edi resul...

20135202閆佳歆 第三章家庭作業 3 63

原來的函式 int sum col int n,int a e1 n e2 n int j int i int result 0 for i 0 i轉化為goto 的版本 int sum col int n,int a e1 n e2 n int j int i 0 int result 0 if ...

第三章作業

1.完成課本每乙個程式設計題。要求先畫出流程演算法圖或n s圖,然後程式設計實現,有可能的話使用兩種以上方法 2.程式設計求 百錢百雞 問題。雞翁一值錢五,雞母 一值錢三,雞雛三值錢一。百錢買百雞,問雞翁 雞母 雞雛各幾何?3.程式設計輸入乙個整數,計算它是幾位數字,分別輸出每一位數字,並輸出各個數...