2012-12-03 59 views
1

我在Assembly中製作了一個應該反轉字符串的程序,例如「我是否看到老鼠?」但我似乎無法弄清楚錯誤意味着什麼:「使用方括號來尋址內存,ADDR或OFFSET來獲取地址: - Mov句柄,[dest + ebx]。」任何想法這意味着什麼?謝謝!使用方括號來解決內存錯誤程序集

.Data 

hInst DD  NULL 
src  DB  "Was it a rat I saw?   ", 0DH, 0AH 
ssize DD  ($ - src) 
dest DB  "...................   ", 0DH, 0AH 
handle DD  NULL 

.Code 

start: 
    Invoke GetModuleHandle, NULL 
    Invoke GetStdHandle, STD_OUTPUT_HANDLE 
    Mov [hInst], Eax 
    Call Main 
    Invoke ExitProcess, Eax 

Main: 

    Xor Eax, Eax 
    Ret 

L1: 
    Mov Ecx, [ssize] 
    Mov Ebx, 0 

L2: 
    Mov Al, [src + Ebx] 
    Mov [dest + Ebx], Al 
    Mov handle, [dest + Ebx] 
    Invoke WriteConsole, [handle] 
    Inc Ebx 
    Loop L2 

回答

2

在單條指令中,不能將數據從一個存儲器位置移動到另一個存儲器位置。 CPU的地址模式不允許。

而是嘗試

mov EAX, [dest + EBX] 
mov [handle], EAX 
+0

真棒,感謝這麼多,佩爾鬆先生!不過現在不打印,所以有什麼想法,如果這與我如何調用WriteConsole函數有關? – m00nbeam360

+0

閱讀文檔。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms687401(v=vs.85).aspx –

+0

@ m00nbeam - 我不知道任何關於你正在使用的宏庫,對不起。我們只能猜測WriteConsole可能需要更多的參數。 –

相關問題