1) Итак, у меня есть этот ассемблерный код в файле .asm, в основном его делают что-то вродеАссамблея TASM вопросы
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
И когда им пытаются бежать это в cmd dosbox, (cmd в win 7 wont work) с tasm file.asm im с этими ошибками
Предупреждение codigo.asm() Открыть процедуру: COMPI
Fatal codigo.asm (55) Неожиданный конец файла встречается
я не знаю, почему, потому что я точно уверен, что им закрытия порядок и начала Alse последней строки в моем файле есть 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
ENDM
2) Кроме того, я этот код в ассемблере, в основном ее просто делать что-то вроде:
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
Но им с другой вопрос (им не имея открытую ошибку процедуры, хотя, почему?), Что им печать: VALOR DE Z1 VALOR DE Z
-Почему im печатать «VALOR DE Z» дважды? -1 его ответ, хотя он должен печатать только VALOR DE Z и 1 не два раза. -Я использую те же макросы, которые я опубликовал, а также работает в Dosbox 0.74
Любые идеи? Спасибо, кстати.
P.D. Im in a dell inspiron 64bit n5150 intel core i7 2670Qm 2.20Ghz 6gb ram Почему код формата не работает на issue2?
Я пробовал исправить форматирование кода в этом последнем блочном блоке, но я не могу заставить его застрять. –
Мое предложение состоит в том, чтобы удалить вопрос 2, оставив только вопрос 1. Затем спросите отдельный вопрос SO на вопрос 2. –
Я думаю, что проблема с вашим вопросом №1 заключается в том, что у вас есть эта строка 'I_MAYOR MACRO X, Z, T2' в процедура «COMPI». Слово «МАКРО» не должно быть там. Я думаю, вы имели в виду 'I_MAYOR X, Z, T2'. Я думаю, что это заставляет TASM запутаться, так как он думает, что вы начинаете новый макрос. –