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。
Jzoj 2549 家庭作業
老師在開學第一天就把所有作業都布置了,每個作業如果在規定的時間內交上來的話才有學分。每個作業的截止日期和學分可能是不同的。每個作業的完成時間都是只有一天 例如,假設有7 77次作業的學分和完成時間如下 第一天第二天 第三天第四天 第五天第六天 第七天作業號12 3456 7期限11 3322 6學分...
u202 家庭作業
time limit 1 second memory limit 128 mb 老師在開學第一天就把所有作業都布置了,每個作業如果在規定的時間內交上來的話才有學分。每個作業的截止日期和學分可能是不同的 例如如果乙個作業學分為10,要求在6天內交,那麼要想拿到這10學分,就必須在第6天結束前交。每個作...
09 《家庭理財系統的設計與改進》
摘要 國家經濟的快速發展給人們的經濟水平帶來了提高,也給大家帶來的新的理財思想,產生了很多的家庭理財軟體,家庭理財系統使得人們的家庭理財手段有了多樣化的發展,理財活動已經成為了人們最關注的事情,也是人們生活的一部分。人們希望有乙個能夠自動給自己理財的軟體,讓自己更加輕鬆,家庭理財系統就是利用計算機的...