鱼C论坛

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

局部变量赋值

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

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

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

x

  1. .386  
  2. .model flat,stdcall
  3. option casemap:none
  4. .stack 4096

  5. ExitProcess PROTO,dwExitCode:DWORD  

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

  9. .code  

  10. func Proc
  11.                
  12.                 push ebp      
  13.         mov ebp,esp
  14.                 ;===========================
  15.         
  16.                 local @loc1[2]:dword  1,2





  17.                 ;=============================
  18.                 pop ebp              
  19.                 ret         
  20.                
  21. func endp

  22.   

  23. main PROC   
  24.        
  25.        
  26.         invoke func
  27.                


  28.         INVOKE ExitProcess,0  
  29. main ENDP   
  30. END main  
复制代码





我的问题:local @loc1[2]:dword  1,2      局部变量不能这样直接赋值吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

  1. func PROC
  2.         
  3.     push ebp      
  4.     mov ebp,esp

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

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

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

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

  13.     pop ebp              
  14.     ret         
  15. func endp
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-19 20:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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