翻譯后的MIPS代碼中sll和add的目的是什么?

我正在讀一些關于將C語句翻譯成MIPS的MIPS注釋。

交換函數的C代碼如下:

swap ( int v[], int k) {
    int temp;
    temp = v[k];
    v[k] = v[k + 1];
    v[k + 1] = temp;
}

我被告知k映射到5美元,v[]的基址映射到4美元,temp映射到15美元。swap函數接受參數k=3,并假設v的基址是2000。

簡化的MIPS版本如下:

swap:

    sll $2, $5, 2
    add $2, $4, $2
    lw  $15, 0($2)
    lw  $16, 4($2)
    sw  $16, 0($2)
    sw  $15, 4($2)

這里的困惑是為什么在翻譯的MIPS中有sll和add?

? 最佳回答:

這來自于字節可尋址,就像大多數現代機器一樣。

字節尋址意味著處理器可以訪問內存的每個字節—在這樣的系統中,將有效字節地址值增加1意味著引用內存的下一個連續字節。

int數據類型使用的字是32-bits寬的,因此需要4字節的內存。因此,a[0]占用字節addr+0addr+1addr+2addr+3,其中addra的字節地址。a[1]是從a[0]偏移4字節,在addr+4

C知道“arrays ofint”的元素需要4個字節,每個字節之間有4個字節的間隔,因此它知道a+i在hood下意味著a + i * 4,它將引用數組中每個元素的4個連續地址,從i*4開始,這為所有較低的元素留出了空間。

計算i * 4有時被稱為“縮放”。而在C中我們可以直接引用索引位置a[i],而在匯編中我們必須顯式地縮放索引。

sll是一種有效的乘以4的方法,sll中的常數2表示左邊的2位(也就是:*1002,即二進制中的*100)。

加法將數組基與縮放索引相加,以獲得數組引用所需字的實際地址。

我們還可以看到使用常量0或4生成的代碼。因為這些常量也是按比例縮放的,所以4表示數組中超出計算范圍的下一個元素。也就是說,如果0($2)a[k],那么4($2)a[k+1]

主站蜘蛛池模板: 波多野结衣一区在线| 麻豆AV一区二区三区久久| 国产精品一区二区三区免费| 国产福利电影一区二区三区,日韩伦理电影在线福 | 无码国产精品一区二区免费模式| 成人精品一区二区不卡视频| 无码午夜人妻一区二区三区不卡视频| 国产精品一区视频| 国产乱码精品一区二区三区中 | 国产精品成人一区二区三区| 精品久久一区二区三区| 国产亚洲一区区二区在线| 合区精品久久久中文字幕一区| 成人免费视频一区| 国产日韩综合一区二区性色AV| 国模私拍福利一区二区| 亚洲熟女www一区二区三区| 97se色综合一区二区二区| 91在线视频一区| 国产精品一区视频| 无码丰满熟妇一区二区| 成人免费一区二区三区在线观看| 亚洲AV日韩综合一区尤物| 少妇无码一区二区三区| 亚洲av无码成人影院一区| 精品国产一区二区三区av片| 日韩在线视频一区二区三区 | 日韩精品一区二区三区国语自制| 国产在线精品一区在线观看| 午夜视频久久久久一区| 免费一区二区三区| 亚洲国产欧美国产综合一区 | 伦理一区二区三区| 亚洲av色香蕉一区二区三区| 国产伦精品一区二区三区四区 | 精品无码成人片一区二区98| 欧洲精品一区二区三区| 精品久久久久中文字幕一区| 日韩内射美女人妻一区二区三区| 人妻精品无码一区二区三区| 红杏亚洲影院一区二区三区 |