【问题标题】:Creating a procedure and calling it in Flat assembler?创建一个过程并在平面汇编程序中调用它?
【发布时间】:2016-01-26 18:20:36
【问题描述】:

我正在阅读这些教程 -https://www.youtube.com/watch?v=0dLkvasLSlo&list=PLPedo-T7QiNsIji329HyTzbKBuCAHwNFC&index=33,我想在平面汇编程序中创建一个过程。这是我尝试过的,当我尝试模仿它时,它会给我非法指令“proc”的通知。请任何人都可以帮助我修复代码或建议我在哪里做错了。谢谢。

fasm

org 100h


proc blue  

mov ax,3
call green 

mov ax,5

ret 
endp 

proc green

mov ax,2
ret 
endp 

【问题讨论】:

    标签: assembly fasm


    【解决方案1】:

    实际上,proc 和 endp 是常用宏的名称,旨在围绕过程调用创建堆栈帧。 换句话说,它们允许使用堆栈传递参数,也可以使用堆栈为过程创建局部变量。 如果您习惯于使用高级语言进行编码,这些宏确实非常有用,并且可以提高源代码的可读性。

    在标准 fasm for windows 发行版中有一个它们的实现,在 INCLUDE/MACRO 文件夹下。试图破译它们有点令人生畏,因为要遵守不同的调用约定,需要做很多事情。 但是,使用它们既简单又直接。只需遵循 fasm 附带的示例即可。

    【讨论】:

      【解决方案2】:

      参考的 youtube 教程位于 Microsoft Macro Assembler (MASM) 中。非平面汇编器 (FASM)。这是两种不同的语言,但语法相同。

      您将收到 MASM 和 FASM 错误,因为您的处理器没有 proc 指令。 FASM 读取该行

      <instruction> <args...>
      

      并尝试搜索&lt;instruction&gt; 操作码。如果没有则显示错误。

      您感到困惑,因为proc 声明实际上是 FASM 和 MASM 中的宏。但要使其正常工作,您需要在其定义中包含正确的模块。在 fasm 中,你可以写:

      include 'MACRO\PROC32.INC'
      

      位于%you_fasm_dirctory%\INCLUDE\MACRO\。 MASM 使用类似的语法。

      无论如何。在任何汇编程序中定义过程有两种常用方法: 1) 使用原始语法; 2) 使用宏。

      原始方式是使用标签并使用局部变量手动设置堆栈帧。然后清洁它。你应该谷歌信息。最简单的方法是使用宏。它为你做了很多工作。

      在此处查看 FASM 解决方案:http://flatassembler.net/docs.php?article=win32#1.3

      【讨论】:

        【解决方案3】:

        这不是 fasm 语法。 fasm 不使用proc/endp。只需使用一个标签,例如:

        org 100h
        
        blue:
            mov ax,3
            call green 
            mov ax,5
            ret 
        
        green:
            mov ax,2
            ret 
        

        【讨论】:

        • :- 很棒的小丑。太感谢了。上帝保佑。
        猜你喜欢
        • 1970-01-01
        • 2015-05-28
        • 1970-01-01
        • 1970-01-01
        • 2014-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        相关资源
        最近更新 更多