[問題] 用MASM存取高階語言傳進去的陣列

看板ASM (組合語言)作者 (雨的印記)時間15年前 (2010/06/19 22:27), 編輯推噓5(504)
留言9則, 2人參與, 最新討論串1/1
為了某些程式的需求 想要先寫一些測式的做法 可是也失敗了 我想用MASM寫一段procedure 去存取由C++傳進去的陣列 C++ part: extern "C" int getFirst(int *arr) void main() { int *a = new int[5] for(int i=0;i<5;i++) { a[i] = i; } int b = getFirst(a); cout << b; } MASM part: .code _getFirst proc near push ebp mov ebp, esp mov eax, [ebp] pop ebp ret _getFirst endp 我該怎樣才可以用MASM 去做這個procedure呢 該從高階改還是低階改 還有 關於暫存器的用法 有什麼 使用原則(像EBP ESP等) 也跟大家請教一下 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.22.18.78

06/19 22:31, , 1F
補充 [ebp] 後面加上 +8 +12 也不是我要的
06/19 22:31, 1F
※ 編輯: wil771126 來自: 163.22.18.78 (06/19 22:38)

06/20 02:17, , 2F
我發現式用 [eax+8] 來取 規則是什麼@@
06/20 02:17, 2F

06/20 02:48, , 3F
[eax+8]?你是存取a[2]對吧
06/20 02:48, 3F

06/20 02:51, , 4F
mov eax, [ebp]這行有點奇怪,你拿舊ebp的值要做什麼?
06/20 02:51, 4F

06/20 22:21, , 5F
如果是傳一個整數 要用esp (傳給ebp) 當address去取得
06/20 22:21, 5F

06/20 22:21, , 6F
eax+8 是a[0]沒錯 好像傳進去都從+8開始的
06/20 22:21, 6F

06/21 03:56, , 7F
那你得把環境敘述的更詳細,最好還要截圖
06/21 03:56, 7F

06/21 03:57, , 8F
因為這不合一般的規則,a已經推進getFirst的堆疊裡
06/21 03:57, 8F

06/21 03:58, , 9F
就應該用getFirst的ebp來取
06/21 03:58, 9F
文章代碼(AID): #1C7DFOdd (ASM)
文章代碼(AID): #1C7DFOdd (ASM)