我正在阅读这些教程 - https://www.youtube.com/watch?v=0dLkvasLSlo&list=PLPedo-T7QiNsIji329HyTzbKBuCAHwNFC&index=33,我想在平面汇编程序中创建一个过程。这是我尝试过的,当我试图模仿时,它给了我非法指令“proc”的通知。请任何人帮我修改代码或建议我在哪里做错了。谢谢。
org 100h
proc blue
mov ax,3
call green
mov ax,5
ret
endp
proc green
mov ax,2
ret
endp
答案 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