我正在做一个汇编计算器,我需要做一个菜单,但我的程序只打印第一个字符串。
TITLE CALCULADORA
.MODEL SMALL
.STACK 100H
.DATA
;menu
MENU DB 'MENU$'
MSOMA DB 'Digite 1 para Soma$'
MSUB DB 'Digite 2 para Subtração$'
.CODE
MAIN PROC
MOV AX,@DATA ;Localizacao do endereco de memoria das variaveis, e colocando-os en AX
MOV DS,AX ;transferindo as dados da memoria em seu local padrao, no caso, DS (Data Stack)
LEA DX,MENU ;Colocando o endereco do menu em DX
MOV AH,9 ;funçao de exibicao de string
INT 21H ;execucao de AH
CALL PULA_LINHA ;"Chamando" a funcao PULA_LINHA
LEA DX,MSOMA ;Colocando o endereco do menu em DX
MOV AH,9 ;funçao de exibicao de string
INT 21H ;execucao de AH
CALL PULA_LINHA ;"Chamando" a funcao PULA_LINHA
MAIN ENDP
PULA_LINHA PROC
MOV AH,2 ;inicia a funçao de leitura de caracter
MOV DL,0DH ;caracter para o cursor retornar a posicao inicial
INT 21H ;executando o conteudo de AH, que por sua vez printa o conteudo de DL
MOV DL,0AH ;caracter de descer a linha
INT 21H ;executando a tarefa
PULA_LINHA ENDP
MOV AH,4CH ;saida do dos
INT 21H ;saindo
END MAIN
答案 0 :(得分:2)
正如迈克尔已经在他的comment中提到的那样,你“搞砸了”返回的功能,并错误地“返回操作系统”并“回到来电者”:
TITLE CALCULADORA
.MODEL SMALL
.STACK 100H
.DATA
;menu
MENU DB 'MENU$'
MSOMA DB 'Digite 1 para Soma$'
MSUB DB 'Digite 2 para Subtração$'
.CODE
MAIN PROC
MOV AX,@DATA ;Localizacao do endereco de memoria das variaveis, e colocando-os en AX
MOV DS,AX ;transferindo as dados da memoria em seu local padrao, no caso, DS (Data Stack)
LEA DX,MENU ;Colocando o endereco do menu em DX
MOV AH,9 ;funçao de exibicao de string
INT 21H ;execucao de AH
CALL PULA_LINHA ;"Chamando" a funcao PULA_LINHA
LEA DX,MSOMA ;Colocando o endereco do menu em DX
MOV AH,9 ;funçao de exibicao de string
INT 21H ;execucao de AH
CALL PULA_LINHA ;"Chamando" a funcao PULA_LINHA
; ----------------------------------------------------------<<<<
; HERE you want to quit to OS, so the INT 21h/4Ch goes here
MOV AH,4CH ;saida do dos
INT 21H ;saindo
; ----------------------------------------------------------<<<<
MAIN ENDP
PULA_LINHA PROC
MOV AH,2 ;inicia a funçao de leitura de caracter
MOV DL,0DH ;caracter para o cursor retornar a posicao inicial
INT 21H ;executando o conteudo de AH, que por sua vez printa o conteudo de DL
MOV DL,0AH ;caracter de descer a linha
INT 21H ;executando a tarefa
; ----------------------------------------------------------<<<<
; HERE you just want to return to the caller, that's done with
RET
; ----------------------------------------------------------<<<<
PULA_LINHA ENDP
END MAIN