首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编TASM问题

汇编TASM问题
EN

Stack Overflow用户
提问于 2015-12-14 23:53:13
回答 1查看 972关注 0票数 0

1)所以,我把这个asm代码放在一个.asm文件中,基本上它做的事情如下

代码语言:javascript
复制
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在这里:

代码语言:javascript
复制
   ;/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行。

这些宏使用:

代码语言:javascript
复制
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)我在asm中也有这个代码,基本上它只是做了如下的事情:

代码语言:javascript
复制
BEGIN


X:=2;  
Y:=2+X;
Z:=Y;

WRITELN("VALOR DE Z"); 
WRITELN( Z ); 


END programa1.

Asm在这里:

代码语言:javascript
复制
;/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上工作?

EN

回答 1

Stack Overflow用户

发布于 2015-12-15 00:00:03

我相当肯定MASM需要COMPI ENDP,但是TASM只需要ENDP。此外,您在其中一个语句中使用了MACRO这个词:

代码语言:javascript
复制
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中的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34278739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档