原來的函式:
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(!(i在書中給的彙編**中,逐句分析如下:
movl 8(%ebp),%edx ;把ebp+8中的值賦給edx,也就是n
leal (%edx,%edx),%eax ;eax中的值等於兩倍的edx中的值,即2n
leal -1(%eax),%ecx ;ecx中的值等於eax中的值-1,即2n-1
leal (%eax,%edx),%esi ;esi中的值等於eax的值加edx的值,即3n,esi儲存的是e1(n)的值
movl $0,%eax ;eax置零,eax儲存的是result的值
testl %esi,%esi ;檢查esi中的值是正、負還是0
jle .l3 ;因為初始化i是0,如果esi中的e1(n)≤0的話,就滿足!(i所以,由上面的逐句分析可得,esi中儲存的是e1(n)的值,e1(n)=3n;
e2(n)儲存在ebx中,ebx=4*e2(n),所以e2(n)=2n-1.
這道題鍛鍊了我對組合語言的分析過程,知道每一句對應的動作,不同指令的用法,暫存器中的數值的變化等等;同時還練習了for迴圈是如何在彙編中被實現的,這道題如果直接對著原函式分析不好分析,但是轉變為goto形式的**後就比較直接、一目了然
20135202閆佳歆 第二章家庭作業 2 69
以下是rotate right函式的 unsigned rotate right unsigned x,int n return x 這裡用到的原理是,區分n的情況,如果是0則直接返回原值,如果不是0,就按照移位的次數控制迴圈,每次迴圈只移位1位。具體迴圈的實現,是借助了乙個變數為endbit,最後...
第三章 堆疊
1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...
第三章 曙光
第三章 曙光 第二場校園招聘開始了。其實,洋對這個公司的不是很了解。因為前幾天突然在bbs上面看到了這個公司的招聘資訊,洋覺得這個公司不錯,就上網投了簡歷。接下來的乙個多小時,讓洋很震撼!想不到這個公司這個厲害,而且無論從哪方面來說,絕對不比之前的那個公司差。想不到自己的乙個不經意的決定到了這個大的...