1)所以,我把这个asm代码放在一个.asm文件中,基本上它做的事情如下
BEGIN
X:=2;
Y:=2+X;
Z:=Y;
IF( Z > X ) THEN
WRITELN("VALOR DE Z");
WRITELN( Z );
ELSE
WRITELN("VALOR DE X");
WRITELN( X );
END;
END programa1.ASM在这里:
;/StartHeader
INCLUDE macrose.mac
DOSSEG
.MODEL SMALL
STACK 100h
.DATA
BUFFER DB 8 DUP('$') ;23h
BUFFERTEMP DB 8 DUP('$') ;23h
BLANCO DB '#'
BLANCOS DB '$'
MENOS DB '-$'
COUNT DW 0
NEGATIVO DB 0
ARREGLO DW 0
ARREGLO1 DW 0
ARREGLO2 DW 0
LISTAPAR LABEL BYTE
LONGMAX DB 254
TOTCAR DB ?
INTRODUCIDOS DB 254 DUP ('$')
MULT10 DW 1
NUM DW ?
X dw ?
Y dw ?
Z dw ?
T1 dw ?
T2 dw ?
cadena1 db "VALOR DE Z",'$'
cadena2 db "VALOR DE X",'$'
.CODE
.386
BEGIN:
MOV AX, @DATA
MOV DS, AX
CALL COMPI
MOV AX, 4C00H
INT 21H
COMPI PROC
I_ASIGNAR 2, X
SUMAR X, 2, T1
I_ASIGNAR T1, Y
I_ASIGNAR Y, Z
I_MAYOR MACRO X, Z, T2
JF T2, P1
WRITE cadena1
ADD Z, 30H
WRITE Z
JMP Q1
P1:
WRITE cadena2
ADD X, 30H
WRITE X
Q1:
ret
COMPI ENDP
END BEGIN当im试图在cmd dosbox中运行它时,(cmd在win 7中是不起作用的),而tasm file.asm im有这些错误
警告codigo.asm()开放过程: COMPI
致命 codigo.asm(55)遇到的文件意外结束
我不知道为什么,因为我很确定我的程序和开始,最后一行在我的档案是54,我不知道为什么要告诉我,问题是在第55行。
这些宏使用:
JF MACRO VALOR1,DESTINO
MOV AX,VALOR1
CMP AX,1
JNE DESTINO
ENDM
WRITE MACRO MESSAGE
PUSH AX ;EXTRA
MOV AH, 09H
LEA DX, MESSAGE
INT 21H
POP AX ;EXTRA
ENDM
I_ASIGNAR MACRO OPERANDO2, OPERANDO1
PUSH AX
MOV AX, OPERANDO2
MOV OPERANDO1, AX
POP AX
ENDM
SUMAR MACRO OPERANDO2, OPERANDO1, RESULTADO
PUSH AX
MOV AX, OPERANDO1
ADD AX, OPERANDO2
MOV RESULTADO, AX
POP AX
ENDM
I_MAYOR MACRO OPERANDO2, OPERANDO1, RESULTADO
LOCAL LABEL1
LOCAL SALIR
PUSH AX
MOV AX, OPERANDO1
CMP AX, OPERANDO2
JLE LABEL1
MOV RESULTADO, 1
JMP SALIR
LABEL1:
MOV RESULTADO, 0
SALIR:
POP AX
ENDM2)我在asm中也有这个代码,基本上它只是做了如下的事情:
BEGIN
X:=2;
Y:=2+X;
Z:=Y;
WRITELN("VALOR DE Z");
WRITELN( Z );
END programa1.Asm在这里:
;/StartHeader
INCLUDE macrose.mac
DOSSEG
.MODEL SMALL
STACK 100h
.DATA
BUFFER DB 8 DUP('$') ;23h
BUFFERTEMP DB 8 DUP('$') ;23h
BLANCO DB '#'
BLANCOS DB '$'
MENOS DB '-$'
COUNT DW 0
NEGATIVO DB 0
ARREGLO DW 0
ARREGLO1 DW 0
ARREGLO2 DW 0
LISTAPAR LABEL BYTE
LONGMAX DB 254
TOTCAR DB ?
INTRODUCIDOS DB 254 DUP ('$')
MULT10 DW 1
NUM DW ?
X dw ?
Y dw ?
Z dw ?
T1 dw ?
cadena1 db "VALOR DE Z",'$'
.CODE
.386
BEGIN:
MOV AX, @DATA
MOV DS, AX
CALL COMPI
MOV AX, 4C00H
INT 21H
COMPI PROC
I_ASIGNAR 2, X
SUMAR X, 2, T1
I_ASIGNAR T1, Y
I_ASIGNAR Y, Z
WRITE cadena1
ADD Z, 30H
WRITE Z
ret
COMPI ENDP
END BEGIN但我还有另外一个问题(我没有公开过程错误,为什么?)im打印: VALOR DE Z1 VALOR DE Z
-Why im打印两次"VALOR DE Z“?-1它的答案是,它应该只打印VALOR DE Z和1而不是两次。使用我发布的相同宏的-Im,也在DOSBOX0.74中运行
有什么想法吗?顺便说一句。
我在戴尔inspiron 64位n5150英特尔核心i7 2670QM2.20GHz6GB内存中为什么代码格式不能在issue2上工作?
发布于 2015-12-15 00:00:03
我相当肯定MASM需要COMPI ENDP,但是TASM只需要ENDP。此外,您在其中一个语句中使用了MACRO这个词:
COMPI PROC
I_ASIGNAR 2, X
SUMAR X, 2, T1
I_ASIGNAR T1, Y
I_ASIGNAR Y, Z
I_MAYOR MACRO X, Z, T2 ; <<<--- Remove "MACRO"
JF T2, P1
WRITE cadena1
ADD Z, 30H
WRITE Z
JMP Q1
P1:
WRITE cadena2
ADD X, 30H
WRITE X
Q1:
ret
COMPI ENDP 这应该可以解决问题1中的问题。
https://stackoverflow.com/questions/34278739
复制相似问题