Parameters MASM中带参数的程序?

Parameters MASM中带参数的程序?,parameters,return,procedure,masm,Parameters,Return,Procedure,Masm,如何在MASM中编写接受一个或多个参数并返回一个或多个值的过程 我正在尝试以下代码 DATA SEGMENT DATA ENDS ;;=================================== MYPROCS SEGMENT CONV_ROUT PROC VAL:BYTE RET VAL CONV_ROUT ENDP MYPROCS ENDS ;;=================================== CODE SEGMENT ASSUME CS:CODE

如何在MASM中编写接受一个或多个参数并返回一个或多个值的过程

我正在尝试以下代码

DATA SEGMENT

DATA ENDS
;;===================================
MYPROCS SEGMENT

CONV_ROUT   PROC VAL:BYTE

RET VAL
CONV_ROUT ENDP

MYPROCS ENDS
;;===================================
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:  MOV AX,DATA
MOV DS,AX

CALL FAR PTR CONV_ROUT AL

MOV AH,4CH
INT 21H

CODE ENDS
END START
目前,上面的代码给出了以下错误

q3.asm(7): error A2119: language type must be specified
q3.asm(9): error A2006: undefined symbol : VAL
q3.asm(19): error A2206: missing operator in expression
你必须决定你采取哪种“通话约定”。下面的示例使用“stdcall”。参数在堆栈上传递,返回值在AX中。堆栈将由过程(“被调用方”)清除


我建议您不要使用far调用和far过程,如果您真的不需要它的话。

这段代码看起来像16位?如果你想自学asm,这可能不是一个好的起点。虽然有些虚拟机支持这一点,但32位和64位的实现方式不同。
.MODEL SMALL, STDCALL

DATA SEGMENT

DATA ENDS
;;===================================
MYPROCS SEGMENT
ASSUME CS:MYPROCS

CONV_ROUT   PROC FAR VAL:WORD
MOV AX, VAL
RET
CONV_ROUT ENDP

MYPROCS ENDS
;;===================================
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:  MOV AX,DATA
MOV DS,AX

PUSH AX
CALL FAR PTR CONV_ROUT

MOV AX,4C00H
INT 21H

CODE ENDS
END START