本實驗要用到彙編器PCSpim,軟體我放到百度網盤裡面了
連結: https://pan.baidu.com/s/1dtY9xkC9MWD1jVuDkLN4aQ
密碼: d9wu
實驗要求:
1)編寫test.asm檔案,在PCSpim中打開它,并使用單步執行和連續執行方式運作該程式,不需要設定為裸機執行方式(Bare Machine)。
test.asm代碼
main: li $v0, 5
syscall
move $t0, $v0
li $v0, 5
syscall
move $t1, $v0
bgt $t0, $t1, t0_bigger
move $t2, $t1
b endif
t0_bigger: move $t2, $t0
endif: move $a0, $t2
li $v0, 1
syscall
jr $ra;
2)編寫R_CPU_Test.asm檔案,并在PCSpim中單步運作,觀察各個寄存器的值是否和預期的一緻。注意:為了能正确執行R_CPU_Test.asm程式,要将模拟器設定為裸機執行方式。
R_CPU_Test.asm代碼(#預期結果)
nor $1 ,$0 ,$0 ; #$1 =FFFF_FFFF
sltu $2 ,$0 ,$1 ; #$2 =0000_0001
add $3 ,$2 ,$2 ; #$3 =0000_0002
add $4 ,$3 ,$2 ; #$4 =0000_0003
add $5 ,$4 ,$3 ; #$5 =0000_0005
add $6 ,$5 ,$3 ; #$6 =0000_0007
sllv $7 ,$6 ,$2 ; #$7 =0000_000E
add $9 ,$5 ,$6 ; #$9 =0000_000C
sllv $8 ,$6 ,$9 ; #$8 =0000_7000
xor $9 ,$1 ,$8 ; #$9 =FFFF_8FFF
add $10,$9 ,$1 ; #$10=FFFF_8FFE
sub $11,$8 ,$7 ; #$11=0000_6FF2
sub $12,$7 ,$8 ; #$12=FFFF_900E
and $13,$9 ,$12; #$13=FFFF_800E
or $14,$9 ,$12; #$14=FFFF_9FFF
or $15,$6 ,$7 ; #$15=0000_000F
nor $16,$6 ,$7 ; #$16=FFFF_FFF0
add $17,$7 ,$3 ; #$17=0000_0010
sllv $18,$8 ,$17; #$18=7000_0000
sllv $19,$3 ,$17; #$19=0002_0000
sllv $20,$19,$7 ; #$20=8000_0000
add $21,$20,$1 ; #$21=7FFF_FFFF
or $22,$18,$21; #$22=7FFF_FFFF
add $23,$20,$22; #$23=FFFF_FFFF
sub $24,$20,$22; #$24=0000_0001
sub $25,$22,$20; #$25=FFFF_FFFF
xor $26,$18,$1 ; #$26=8FFF_FFFF
sltu $27,$22,$20; #$27=0000_0001
sltu $28,$26,$20; #$28=0000_0000
add $29,$22,$2 ; #$29=8000_0000
sub $30,$20,$2 ; #$30=7FFF_FFFF
add $31,$11,$26; #$30=9000_6FF1
3)将上述程式的指令代碼逐條摘錄出來,複制至ROM IP關聯檔案*.coe中,供後繼實驗使用。
PCSpim使用教程:
測試結果:
Test.asm裝載之後,一直點單步運作,程式要求我們在控制台輸入兩個數,之後輸出結果。
雖然看不懂彙編,根據輸入輸出,可以猜測,程式的功能就是找出較小數。
R_CPU_Test.asm裝載之後,單步運作,發現到了0x00400014就跑不動了。點選go,跳轉到0x00400024繼續單步運作。發現寄存器結果與預期完全一緻。
寄存器 | 内容 | 寄存器 | 内容 | 寄存器 | 内容 |
$0 | 0x00000000 | $11 | 0x00006ff2 | $22 | 0x70000000 |
$1 | 0xffffffff | $12 | 0xffff900e | $23 | 0xf0000000 |
$2 | 0x00000001 | $13 | 0xffff800e | $24 | 0x00000000 |
$3 | 0x00000002 | $14 | 0xffff9fff | $25 | 0x00000000 |
$4 | 0x00000003 | $15 | 0x0000000f | $26 | 0x3000ff13 |
$5 | 0x00000005 | $16 | 0xfffffff0 | $27 | 0xffffffff |
$6 | 0x00000007 | $17 | 0x00000010 | $28 | 0x00000000 |
$7 | 0x0000000e | $18 | 0x70000000 | $29 | 0x70000001 |
$8 | 0x00007000 | $19 | 0x00020000 | $30 | 0x00000000 |
$9 | 0xffff8fff | $20 | 0x80000000 | $31 | 0x30016f05 |
$10 | 0xffff8ffe | $21 | 0x00000000 |
儲存日志檔案(Save Log File)
R_CPU_Test.coe機器碼
memory_initialization_radix=16;
memory_initialization_vector=00000827 0001102b 00421820 00622020 00832820 00a33020 00463804 00a64820 01264004
00284826 01215020 01075822 00e86022 012c6824 012c7025 00c77825 00c78027 00e38820 02289004 02239804 00f3a004
0281a820 0255b025 0296b820 0296c022 02d4c822 0241d026 02d4d82b 0354e02b 02c2e820 0282f022 017af820;
心得體會:
PCSpim這個軟體需要一點點時間摸索,其他的事情并不是很難