【问题标题】:nasm How to make a text to blink?nasm 如何使文本闪烁?
【发布时间】:2014-09-21 09:04:27
【问题描述】:

这是引导加载程序的代码。

    BITS 16
start:
    mov ax, 07C0h
    add ax, 288
    mov ss, ax
    mov sp, 4096
    mov ax, 07C0h
    mov ds, ax

cycle:
    mov si, message1
    call show_messages

    mov si, message2
    call show_messages

    mov si, message3
    call show_messages

    jmp $

    message1 db 13,10,"Message 1",13,10,0
    message2 db 13,10,"Message 2",13,10,0
    message3 db 13,10,"Message 3,10,0

show_messages:
    mov ah, 0Eh
repeat:
    lodsb
    cmp al, 0
    je END
    int 10h
    jmp repeat

END:
    ret
    times 510-($-$$) db 0
    dw 0xAA55

我需要让消息闪烁,如果可以更改颜色,并让消息从右向左移动。如何改善这一点?这段代码是否可以在 virtualbox 中运行,或者我需要将程序写入软盘并启动它来检查?

如果无法重新制作代码,可能会有一些建议。

【问题讨论】:

  • 假设您的视频卡与 VGA 兼容,请尝试VGA text mode 的 wiki 链接

标签: assembly nasm bootloader


【解决方案1】:

我想,你需要写入显存。在显存(0xB800)中,屏幕上的每个字符(文本模式下为80x25)都有一个属性,其最高位控制字符是否闪烁。因此,如果您将这些设置为 1,它应该会闪烁。

    BITS 16
start:
    mov ax, 07C0h
    add ax, 288
    mov ss, ax
    mov sp, 4096
    mov ax, 07C0h
    mov ds, ax

    mov AX,0xB800           ; set up to the video memory
    mov ES,AX
    mov CX,80 * 25 * 2 - 1  ; size of video memory
    mov BX,1

    Loop:                   ; do through on the video memory
    cmp BX,CX               ; exit if we finished
    ja Exit
    or byte [ES:BX],10000000b   ; set the highest bit to 1 (enable blinking)
    add BX,2                ; go to the next character
    jmp Loop
    Exit:

cycle:
    mov si, message1
    call show_messages

    mov si, message2
    call show_messages

    mov si, message3
    call show_messages

    jmp $

    message1 db 13,10,"Message 1",13,10,0
    message2 db 13,10,"Message 2",13,10,0
    message3 db 13,10,"Message 3",10,0

show_messages:
    mov ah, 0Eh
repeat:
    lodsb
    cmp al, 0
    je END
    int 10h
    jmp repeat

END:
    ret
    times 510-($-$$) db 0
    dw 0xAA55

我是从www.supernovah.com那里学到的。
重要的!对我来说,qemu 和 virtualbox 没有闪烁文本(我在 Windows 上尝试过),但是当我在我的 android 设备上尝试使用 bochs 时,它起作用了! (当我把它放在闪存盘引导扇区并从这里引导时,它当然也会闪烁)

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 2017-03-08
    • 2015-05-15
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多