创建一个过程并在Flat汇编程序中调用它?

时间:2015-06-21 16:02:40

标签: assembly fasm

我正在阅读这些教程 - 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 

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

参考youtube教程在Microsoft Macro Assembler(MASM)中。不平坦的汇编(FASM)。这是两种不同的语言,虽然有相同的语法。

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

<instruction> <args...>

并尝试搜索<instruction>操作码。如果没有,则显示错误。

您感到困惑,因为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

答案 2 :(得分:0)

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

org 100h

blue:
    mov ax,3
    call green 
    mov ax,5
    ret 

green:
    mov ax,2
    ret