鱼C论坛

 找回密码
 立即注册
查看: 565|回复: 1

局部变量赋值

[复制链接]
发表于 2024-1-8 07:31:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 
.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[2]:dword  1,2





                ;=============================
                pop ebp              
                ret         
                
func endp
 
  
 
main PROC   
        
        
        invoke func
                
 
 
        INVOKE ExitProcess,0  
main ENDP   
END main  




我的问题:local @loc1[2]:dword  1,2      局部变量不能这样直接赋值吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-8 07:32:01 | 显示全部楼层
在汇编语言中,局部变量是通过在函数的栈帧上分配空间来实现的。而汇编语言并没有直接在声明局部变量时给予初始值的语法。因此,在你的代码中,不能直接在定义局部变量时赋初值。

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

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

    ; 将1赋值给局部变量 @loc1
    mov dword ptr[ebp-4], 1

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

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

    pop ebp              
    ret         
func endp

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表