assembly 如何更改输出颜色?

70gysomp  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(137)

因此,我尝试编码,我不知道如何改变输出颜色。我是新的汇编语言。我想十进制蓝色,十六进制绿色和八进制红色。解释与更新的代码是非常感谢。我仍然是新的汇编语言,我想一些指针如何学习好,或将它脱落很快在未来。

org 100h

.DATA

DECIMAL DB 'Enter Decimal :$'
BINARY DB 0DH, 0AH, 'Binary: $'
HEX DB 0DH, 0AH, 'Hexadecimal: $'
OCTAL DB 0DH, 0AH, 'Octal: $'

D_DATA DB 10 DUP('$')   ;DECIMAL
B_DATA DB 10 DUP('$')   ;BINARY
H_DATA DB 10 DUP('$')   ;HEX
O_DATA DB 10 DUP('$')   ;OCTAL
 
.code

START:
    MOV AX, @data
    MOV DS, AX

    MOV DX, OFFSET DECIMAL
    MOV AH, 9H
    INT 21H

    MOV SI, OFFSET D_DATA
    MOV CX, 0

ENTER:
    MOV AH, 1H
    INT 21H
    INC CX

    MOV [SI], AL
    INC SI
   
    CMP AL, 0DH
    MOV DL, D_DATA
    MOV AX, 0
    JE  BIN1
    CMP CX, 2
    JNE ENTER
    MOV AL, 10
    MOV AH, 0
    MOV DL, D_DATA
    SUB DL, 30H
    MUL DL
    MOV DL, D_DATA + 1

BIN1:
    SUB DL, 20H
    ADD AL, DL
    PUSH AX
    MOV BX, 2
    MOV CX, 0

BINSOLV:
    MOV DX, 0
    DIV BX
    ADD DX, 48
    PUSH DX
    INC CX
    CMP AX, 0
    JNZ BINSOLV

    MOV SI, OFFSET B_DATA

BININPUT:
    POP AX
    MOV [SI], AL
    INC SI
    DEC CX

    JNZ BININPUT

    POP AX
    PUSH AX
    MOV BX, 8
    MOV CX, 0

HEX1:
    SUB DL, 20H
    ADD AL, DL
    PUSH AX
    MOV BX, 16
    MOV CX, 0
    
HEXSOLV:
    MOV DX, 0
    DIV BX
    ADD DX, 48
    PUSH DX
    INC CX
    CMP AX, 0
    JNZ HEXSOLV

    MOV SI, OFFSET H_DATA

HEXINPUT:
    POP AX
    MOV [SI], AL
    INC SI
    DEC CX

    JNZ HEXINPUT

    POP AX
    PUSH AX
    MOV BX, 8
    MOV CX, 0

OCT1:
    SUB DL, 20H
    ADD AL, DL
    PUSH AX
    MOV BX, 8
    MOV CX, 0    

OCTSOLV:
    MOV DX, 0
    DIV BX
    ADD DX, 48
    PUSH DX
    INC CX
    CMP AX, 0
    JNZ OCTSOLV

    MOV SI, OFFSET O_DATA

OCTINPUT:
    POP AX
    MOV [SI], AL
    INC SI
    DEC CX
    JNZ OCTINPUT

END:
    MOV AH, 9
    MOV DX, OFFSET BINARY
    INT 21H
    MOV AH, 9
    MOV DX, OFFSET B_DATA
    INT 21H 

    MOV AH, 9
    MOV DX, OFFSET HEX
    INT 21H
    MOV AH, 9
    MOV DX, OFFSET H_DATA
    INT 21H 

    MOV AH, 9 
    MOV DX, OFFSET OCTAL
    INT 21H
    MOV AH, 9
    MOV DX, OFFSET O_DATA
    INT 21H
                

ret
cyvaqqii

cyvaqqii1#

Displaying characters with DOS or BIOS中描述了生成彩色文本的方法。在“全屏应用程序”下,查找标记为WriteStringWithAttributeTVM:的代码段。将其代码包含在程序中,然后将八进制数字的输出从

MOV AH, 9 
MOV DX, OFFSET OCTAL
INT 21H
MOV AH, 9
MOV DX, OFFSET O_DATA
INT 21H

mov  dx, OFFSET OCTAL
mov  ah, 09h 
int  21h
mov  bl, 4                       ; Red for octal
mov  si, OFFSET O_DATA
call WriteStringWithAttributeTVM

因为我的子例程使用以零结尾的字符串,所以还需要更改缓冲区定义:

O_DATA db 10 DUP(0)   ; OCTAL

对其他数字表示法应用类似的更改。

BIN1:
    SUB DL, 20H
    ADD AL, DL

您需要减去30 h才能转换。

HEX1:
    SUB DL, 20H
    ADD AL, DL

您需要减去30 h才能转换,而DL被 BINSOLV 中的字长除法破坏了!

OCT1:
    SUB DL, 20H
    ADD AL, DL

您需要减去30 h才能转换,而DL被 BINSOLVHEXSOLV 中的字长除法破坏了!
我仍然是新的汇编语言,我想要一些指针如何学习好
好吧,不要只是提取我告诉你的代码片段,还要阅读我链接的整个Q/A。
还有Displaying numbers with DOSHow buffered input worksInputting multi-radix multi-digit signed numbers with DOS,它们包含了大量的信息......

相关问题