MIPSsim匯程式設計序之坑點1

2021-10-06 07:40:02 字數 1352 閱讀 7404

原來的匯程式設計序如下:

.text

main:

addiu $r2,$r0,a

addiu $r3,$r0,b

loop:

lw $r1,0($r2)

add $r1,$r1,$r3

sw $r1,0($r2)

lw $r5,0($r1)

addi $r5,$r5,10

addi $r2,$r2,4

sub $r4,$r3,$r2

bgtz $r4,loop

sll $r0,$r0,0

teq $r0,$r0

sll $r0,$r0,0

sll $r0,$r0,0

.data

a: .word 0, 4, 8

b: .word 2, 1, 0

引導程式後的指令如下:

可以看到:陣列a的元素是從a的起始位置開始的。a為0,4,8。b為2,1,0。這是沒有錯的。

但當我們修改匯程式設計序後,如下:

.text

main:

addiu $r2,$r0,a

#addiu $r3,$r0,b

loop:

lw $r1,0($r2)

add $r1,$r1,$r3

sw $r1,0($r2)

lw $r5,0($r1)

addi $r5,$r5,10

addi $r2,$r2,4

sub $r4,$r3,$r2

bgtz $r4,loop

sll $r0,$r0,0

teq $r0,$r0

sll $r0,$r0,0

sll $r0,$r0,0

.data

a: .word 0, 4, 8

b: .word 2, 1, 0

我所做的修改只是將第4行**注釋掉,使得main後面只有一條指令便又開始有乙個標籤loop了。

這時我們看看引導程式後的指令:

!!!這時我們會很懵b的看到陣列a和陣列b中的元素錯位了,a變成0,0,4了,而b變成8,2,1了。如果不知道這個問題,那麼在運算元組時,會導致很嚴重的錯誤。而且前面的loop標籤也沒有顯示出來。

!!!所以避免這個坑的辦法就是寫程式時,開始要有兩條(以上)的指令再來定義標籤。

ARM匯程式設計序鑑賞 1

area asmembedeedfile code,readonly 定義一段可讀的 區域 export mulcountfunction 輸出函式 mulcountfunction import val 插入變數val mulcountfunction ldr r1,val 取val的暫存器位址,...

匯程式設計序 退出

作為第乙個匯程式設計序,本程式除了退出以外,並沒有執行其他的功能。目的 退出並向linux核心返回乙個狀態碼的簡單程式 輸入 無 輸出 返回乙個狀態碼.在執行程式後可通過輸入echo 來讀取狀態碼 變數 eax儲存系統呼叫號 ebx儲存返回狀態 section data section text g...

微機匯程式設計序

又是自學的一學期,呵呵。學到最後也就知道零星半點指令吧,複雜的程式可能還是不怎麼會寫,熟練當然也不敵c了,但是彙編之於嵌入式,往上走肯定少不了遇到,學好還是必要的!此次僅作入門吧。今日所學,明日之用。1 統計正負零的個數 datas segment array db 1,2,1,0,2,0,2,4,...