2007年12月8日 星期六

1208 輸出腳位設定

目的:
C語言轉換成MIPS R3000組合語言轉換成機器碼後放置在MIPS R3000內,如何檢查C語言執行結果與MIPS R3000的輸出結果相符合便成一個重要的問題

流程圖:



C語言:
#include
main(){
int aa=111,i,j,f[8][8]=
{{126,123,124,118,124,117,119,116},
{120,122,119,120,118,121,119,120},
{129,121,126,119,124,118,123,117},
{121,127,120,123,122,122,118,121},
{130,130,125,126,127,131,127,124},
{140,139,140,146,144,139,140,140},
{151,147,147,150,150,150,150,152},
{159,160,158,155,155,155,155,154}};

for ( i=0;i<8;i++){
for( j=0;j<8;j++){
f[i][j]=f[i][j]-128;
aa=f[i][j]-128;
}}}

程式的目的主要是將f[8][8]的各個元素減128,宣告一個數aa目的是要將所有運算過後的元素放置在aa裡面,使得在PCSpim裡面可以較容易找出運算過後的各個元素放置在記憶體的哪個部份。
經過LCC compiler 與自動轉換程式修改部分組合語言後,使用PCspim找出aa所存放的記憶體位址,並且檢查答案是否正確。

aa=111
0x3416006f ori $22, $0, 111 ; 84: la $22,111
aa=f[i][j]-128;
0x8f180000 lw $24, 0($24) ; 114: lw $24,($24)
0x2716ff80 addiu $22, $24, -128 ; 115: subu $22,$24,128

利用C語言與組合語言對照,可發現aa所存放的位置在$22內,所以我們只要將$22傳給輸出腳位,就可以很容易的在synapitCAD模擬出來的波形圖內,觀察出答案是否與C語言執行出來的結果相符合。

IO0=regs[22];

assign IO0=regs[22];




下圖為C語言執行結果與synapitCAD執行結果對照:












沒有留言: