0
sample:
pushq %rbp
movq %rsp, %rbp
movl %edi, -20(%rbp)
movl $1, -16(%rbp)
movl $0, -12(%rbp)
movl $0, -8(%rbp)
cmpl $2, -20(%rbp)
讓我們說的輸入值是1如何設置1爲%RBP或%RSP我們在哪裏放的輸入值在寄存器在x64彙編
比什麼是%EDI的價值雖然
sample:
pushq %rbp
movq %rsp, %rbp
movl %edi, -20(%rbp)
movl $1, -16(%rbp)
movl $0, -12(%rbp)
movl $0, -8(%rbp)
cmpl $2, -20(%rbp)
讓我們說的輸入值是1如何設置1爲%RBP或%RSP我們在哪裏放的輸入值在寄存器在x64彙編
比什麼是%EDI的價值雖然
讓我們一步一步來:
sample
首先設置一個堆棧幀:pushq %rbp; movq %rsp, %rbp
movl %edi, -20(%rbp)
。如果它是葉函數,則沒有明確遞減rsp
。movl $1, -16(%rbp); movl $0, -12(%rbp); movl $0, -8(%rbp)
。-20(%rbp)
與-20(%rbp)
堆棧上的edi
的保存值與2進行比較。假設它根據該比較做了某些事情(也許其餘代碼是相關的),則該函數的輸入必須是edi
中的值。另一種解決此問題的方法是AMD64 ABI,它指定rdi
用於將第一個參數傳遞給函數。然後你可以進一步推斷出sample
的第一個參數是一個32位寬的整數。
這甚至不是8086彙編代碼。這是x64: -/ –
哦,我的老師給了我這個,我們正在學習8086,所以我認爲這是,但什麼是1%edi的輸入值是正確的? – Nabmeister
然後你的老師知道sh * t關於程序集。 –