2015-12-14 4 views
0

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?

+0

Я пробовал исправить форматирование кода в этом последнем блочном блоке, но я не могу заставить его застрять. –

+0

Мое предложение состоит в том, чтобы удалить вопрос 2, оставив только вопрос 1. Затем спросите отдельный вопрос SO на вопрос 2. –

+0

Я думаю, что проблема с вашим вопросом №1 заключается в том, что у вас есть эта строка 'I_MAYOR MACRO X, Z, T2' в процедура «COMPI». Слово «МАКРО» не должно быть там. Я думаю, вы имели в виду 'I_MAYOR X, Z, T2'. Я думаю, что это заставляет TASM запутаться, так как он думает, что вы начинаете новый макрос. –

ответ

0

Я уверен, что 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.

 Смежные вопросы

  • Нет связанных вопросов^_^