装配中的文字颜色更改 (8086)

问题描述 投票:0回答:1

我有这个汇编8086(TASM)代码,屏幕上打印的文本是紫色的,我不希望它是紫色的(我需要蓝色或黑色), 那我该如何改变呢?

代码:

.model small
.stack 100h
.data

;----------------------------------------------------------------------------

playMS         DB '                        PIANO ++  by Reuven',13,10
               DB 13,10
               DB '                    welcome! this is your piano:',13,10
               DB '       example: piano note(keyboard key)',13,10
               DB 13,10
               DB '                C#(2)   D#(3)        F#(5)   G#(6)    A#(7)' ,13,10
               DB '            C(q)    D(w)    E(e)  F(r)    G(t)    A(y)    B(u)',13,10,13,10
               DB 13,10
               DB '                       press ESC to exit','$'

;----------------------------------------------------------------------------

.code

TONO MACRO NUMERO               ;macro that of the tune 
        MOV     BX,NUMERO       ;call the PROC
        CALL    BOCINA
ENDM

;----------------------------------------------------------------------------

CLRSCR PROC
;clean the window
        MOV     AH,6
        XOR     AL,AL
        XOR     CX,CX
        MOV     DX,184FH
        MOV     BH,13
        INT     10H
        RET
ENDP

;----------------------------------------------------------------------------

BocinaOn  PROC                  ;Turn on the horn
        IN      AL, 61h
        OR      AL, 11B
        OUT     61h, AL
        RET
BocinaOn  ENDP

;----------------------------------------------------------------------------

BocinaOff  PROC                 ;Turn off the horn
        IN      AL, 61h
        AND     AL, 11111100b
        OUT     61h, AL
        RET
BocinaOff  ENDP

;----------------------------------------------------------------------------

Ajustar  PROC                  ;Adjusts the horn with the note frequency
        PUSH    BP
        MOV     BP, SP
        MOV     DX, 18      
        MOV     AX, 13353   
        MOV     BX, [BP + 4]
        DIV     BX
        MOV     BX, AX  
        MOV     AL, 0B6h
        OUT     43h, AL
;SEND TO PORT THE FREQUENCY IN TWO BYTES BY SEPARATE
        MOV     AX, BX
        OUT     42h, AL ;SEND FIRST BYTE = 378H
        MOV     AL, AH
        OUT     42h, AL ;SENDS SECOND BYTE = 3F8H
        POP     BP
        RET
Ajustar  ENDP

;----------------------------------------------------------------------------

Suena proc                      ;מפעיל את הצופר ומציב שם
        CALL bocinaON           ;מקש מהמקלדת
        MOV     AX,40H
        MOV     ES,AX
        MOV     DX,ES:[006EH]
        MOV     AX,ES:[006CH]
        ADD     AX,7
        ADC     DX,0            ;הוספה של שבע יחידות לערך
CLIC:
        CMP     DX,ES:[006EH]   ;עד שיהיה שיוויון
        JB      FINI            ;פעולה מעגלית עד הסוף
        JA      CLIC            ;שיהיה שייוין צריך לצאת מהמעגל
        CMP     AX,ES:[006CH]
        JA      CLIC
FINI:
        CALL    BocinaOff       ;כיבוי של הצופר
        RET
Suena endp

;----------------------------------------------------------------------------

Bocina proc                     ;Este procedimiento guarda AX y BX en
        PUSH    BX              ;la pila para no perder su valor, con
        MOV     AX, BX          ;esto llama a ajusta y a suena
        PUSH    AX
        CALL    Ajustar         ;Pone la frecuencia en el puerto.
        POP     AX
        POP     BX
        CALL    SUENA           ;Activa el speaker y lo desactiva.
        ret
Bocina endp

;----------------------------------------------------------------------------
;CONVERTIR A MINUSCULA SI ERA MAYUSCULA

MINUSCULA PROC
        CMP AL, 65    ;'A'
        JB  CONTINUAR ;SI LA TECLA ES MENOR QUE LA 'A' NO HACE NADA
        CMP AL, 90    ;'Z'
        JA  CONTINUAR ;SI LA TECLA ES MAYOR QUE LA 'Z' NO HACE NADA
        ADD AL, 32    ;Convierte may£scula en min£scula.
     CONTINUAR:
        RET
MINUSCULA ENDP

;----------------------------------------------------------------------------
;CAPTURA LA TECLA CON LA NOTA QUE EL USUARIO DESEA.

TECLA PROC
        MOV     AH,8            ;Si la hay, obtiene la nota
        INT     21H
        CALL    MINUSCULA
        RET
TECLA ENDP
;----------------------------------------------------------------------------
;Cicla el programa hasta que el usuario presione la tecla ESC.
;El procedimiento reacciona a las teclas indicadas en el segmento de datos.
;Cualquier otra tecla es ignorada.
;La tecla presionada es convertida a min£scula, ya que la tabla ASCII
;trata distinto unas de otras.
;Despu‚s de que cada tecla es presionada, el ciclo vuelve al inicio y
;se repite.
;Si la tecla presionada corresponde a una nota musical, el c¢digo
;correspondiente es enviado al parlante.

SPEAKER PROC
COMIENZA:
        CALL    TECLA
        CMP     AL,'q'   ;DO alto
        JNE     S1       ;SI NO ES LA TECLA ESPERADA, SALTA PARA VERIFICAR LA SIGUIENTE.
        TONO    523      ;SI ES LA TECLA ESPERADA, GENERA EL SONIDO CORRESPONDIENTE
        JMP     COMIENZA ;DESPUES DEL SONIDO REINICIA PARA ESPERAR OTRO SONIDO.
S1:     CMP     AL,'w'   ;RE alto
        JNE     S2
        TONO    587
        JMP     COMIENZA
S2:     CMP     AL,'e'   ;MI alto
        JNE     S3
        TONO    659
        JMP     COMIENZA
S3:     CMP     AL,'r'   ;FA alto
        JNE     S4
        TONO    698
        JMP     COMIENZA
S4:     CMP     AL,'t'   ;SOL alto
        JNE     S5
        TONO    784
        JMP     COMIENZA
S5:     CMP     AL,'y'   ;LA alto
        JNE     S6
        TONO    880
        JMP     COMIENZA
S6:     CMP     AL,'u'   ;SI alto
        JNE     S8
        TONO    988
        JMP     NOSALTO1
SALTO1:
   JMP COMIENZA
NOSALTO1:
        JMP     COMIENZA
S8:     CMP     AL,'2'   ;DO# alto
        JNE     S9
        TONO    554
        JMP     COMIENZA
S9:     CMP     AL,'3'   ;RE# alto
        JNE     S10
        TONO    622
        JMP     COMIENZA
S10:    CMP     AL,'5'   ;FA# alto
        JNE     S11
        TONO    740
        JMP     COMIENZA
S11:    CMP     AL,'6'   ;SOL# alto
        JNE     S12
        TONO    830
        JMP     COMIENZA
S12:    CMP     AL,'7'   ;SIb alto
        JNE     S25
        TONO    923
        JMP     COMIENZA
SALTO2:
   JMP SALTO1
S25:    CMP     AL,27 ;27 = tecla ESC (terminar).
        JNE     SALTO2
        RET
SPEAKER ENDP

;----------------------------------------------------------------------------

msg PROC
        MOV     AH,9
        LEA     DX,playMS
        INT     21H
        RET
msg ENDP

;----------------------------------------------------------------------------

RUN:
        MOV     AX, @data         
        MOV     DS, AX            
        CALL    CLRSCR            ;clean.
        CALL    msg               ;msg.
        CALL    SPEAKER           ;sound on.
        MOV     AX, 4C00H
        INT     21H

;----------------------------------------------------------------------------

END RUN
assembly x86-16 tasm dosbox emu8086
1个回答
2
投票

我很久以前就制作了钢琴代码,我猜你是从另一个答案中得到的,所以现在它是公开的。无论如何,您可以在程序中更改文本的颜色

CLRSCR

CLRSCR PROC
;clean the window
        MOV     AH,6
        XOR     AL,AL
        XOR     CX,CX
        MOV     DX,184FH
        MOV     BH,13     ;◄■■ REPLACE BY 0 (BLACK) OR 1 (BLUE).
        INT     10H
        RET
ENDP
© www.soinside.com 2019 - 2024. All rights reserved.