lm68140318 发表于 2024-1-8 07:31:43

局部变量赋值


.386
.model flat,stdcall
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD

.data   
sz DWORD 5,6,7,8,9
   

.code

func Proc
               
                push ebp      
      mov ebp,esp
                ;===========================
      
                local @loc1:dword1,2





                ;=============================
                pop ebp            
                ret         
               
func endp



main PROC   
       
       
        invoke func
               


        INVOKE ExitProcess,0
main ENDP   
END main




我的问题:local @loc1:dword1,2      局部变量不能这样直接赋值吗?

FishC 发表于 2024-1-8 07:32:01

在汇编语言中,局部变量是通过在函数的栈帧上分配空间来实现的。而汇编语言并没有直接在声明局部变量时给予初始值的语法。因此,在你的代码中,不能直接在定义局部变量时赋初值。

如果你想给局部变量赋初值,你可以使用`mov`指令将具体的值存储到该变量所在的内存位置。以下是一种可能的解决方案:

func PROC
      
    push ebp      
    mov ebp,esp

    ; 在栈帧上分配一个DWORD大小的空间,用来存储局部变量
    sub esp, 4

    ; 将1赋值给局部变量 @loc1
    mov dword ptr, 1

    ; 将2赋值给局部变量 @loc1 + 4 (下一个DWORD大小的内存位置)
    mov dword ptr, 2

    ; 回收局部变量空间
    add esp, 4

    pop ebp            
    ret         
func endp

这样,你就可以通过`mov`指令给局部变量赋初值了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 局部变量赋值