| 
 
Lập Trình ASM,cách 
tạo biến cục bộ 
Code: .386 
.model 
flat,stdcall option casemap:none include 
\masm32\include\windows.inc include 
\masm32\include\kernel32.inc includelib 
\masm32\lib\kernel32.lib include \masm32\include\user32.inc 
includelib \masm32\lib\user32.lib 
.data 
MsgBoxCaption  
db "Iczelion Tutorial No.2",0 MsgBoxText      db "Win32 
Assembly is Great!",0 .code 
start: invoke MessageBox, NULL, addr 
MsgBoxText, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL 
end startđây là dòng biến của chương trình.data MsgBoxCaption db "Iczelion Tutorial No.2",0 MsgBoxText db "Win32 Assembly is Great!",0 cho mình hỏi là đây có phải là biến cục bộ của hàm main hay không,hay là biến toàn cục của toàn chương trình vậy | 
| 
 
Đó là biến toàn cục 
của chương trình. Biến cục bộ được lưu trong 
stack. | 
| 
 
Quote: 
 
rất cảm ơn bạn đã 
trả lời,bạn cho mình hỏi thêm là làm thế nào để mình có thể làm cho 2 biến đó là 
2 biến cục bộ vậy,bạn có thể ghi code ra được không 
:D | 
| 
 Dùng từ khóa LOCAL khai báo trước biến. Biến này chỉ có tác dụng trong bản thân một thủ tục xử lý mà thôi. 
Code: WndProc 
proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM    
    LOCAL hdc:HDC        LOCAL 
ps:PAINTSTRUCT        LOCAL 
rect:RECT        .IF uMsg==WM_DESTROY      
          invoke PostQuitMessage,NULL        .ELSEIF 
uMsg==WM_PAINT                invoke BeginPaint,hWnd, ADDR 
ps                mov    hdc,eax              
  invoke GetClientRect,hWnd, ADDR rect                invoke 
DrawText, hdc,ADDR OurText,-1, ADDR rect, DT_SINGLELINE or DT_CENTER or 
DT_VCENTER                invoke EndPaint,hWnd, ADDR 
ps        .ELSE                invoke 
DefWindowProc,hWnd,uMsg,wParam,lParam                
ret        .ENDIF        xor    
eax,eax        retWndProc 
endp
Best 
Regards! | 
| 
 
Quote: 
 
Một cách khác nữa để 
dùng biến cục bộ : 
Code: push ebpmov 
ebp,esp// Bây giờ dùng biến cục bộ. Các biến này có dạng [ebp + 
4 * n]pop ebpret | 
| 
 
TASM: 
 
Code: test_proc  
      proc    c  
      ; parameters         arg        
arg1:DWORD        arg    arg2:DWORD            
arg    arg3:DWORD        arg    arg4:DWORD     
    local  local1:DWORD        local  
local2:DWORD        pusha        
nop        nop        popa    
    rettest_proc        endp | 
| 
 
Quote: 
 
Cái này thiếu sub 
esp, XXX Nếu không làm như vậy các biến cục bộ sẽ bị ghi đè lên khi có các lệnh làm thay đổi stack. Với lại cách của Mèo là cách khi trình biên dịch dịch cái của Thug ra. | 
| 
 
Quote: 
 
Ờ nhỉ, mình quên 
mất :D |