【问题标题】:How to print text in color with interrupts?如何用中断打印彩色文本?
【发布时间】:2013-12-28 06:30:13
【问题描述】:

这是我的默认代码,它以白色打印。我知道如何在没有中断的情况下进行彩色打印,但我不想那样做。我想使用中断以任何其他颜色打印它。我该怎么做?任何的想法?提前致谢 我正在使用emu8086作为汇编程序

data segment
    wellcome db 'Wellcome User !',13, 10 ,'$'
    how    db 'how are you',13,10,'$'
ends

stack segment
    dw  64 dup(0)
ends

code segment 

    start:
        push ax      
        mov ax,data
        mov ds,ax
        mov es,ax    
        pop ax     

        lea si, wellcome
        call print

        lea dx, how
        call print  
    MOV  AH, 00h;wait for any key
    INT  16h

    mov ax, 0x4c00; terminating 
    int 21h                                                        
print: 
            ;printing the line
            mov ah, 9
            int 21h
    ret                                  
ends 

【问题讨论】:

    标签: assembly colors x86-16 16-bit


    【解决方案1】:

    这是解决方案,我知道了。在打印子程序中进行以下更改

    print: 
           ;printing the line
           mov bl,2  ;color attribute
           mov ah, 9 
           mov al,0  ;avoding extra characters
           int 10h   ;printing colors
           int 21h
    ret    
    

    【讨论】:

    • 这个“解决方案”一团糟。 AH=9 for int 10h 是“打印字符”功能。 AL 应该包含字符代码,CX - 重复次数和 BL - 颜色属性。因此,当您调用 int 10h 时,您正在打印 /0 字符的未知数字(无论在 CX 中是什么)。然后您立即致电int 21h - 仅此一项就应该指出代码是错误的。假设中断 10h 处理程序不会更改寄存器,您正在为未知字符串地址调用函数 09h(打印 $-终止的字符串)(DX 未初始化)。
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2019-03-22
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多