【问题标题】:Write character to video buffer MASM将字符写入视频缓冲区 MASM
【发布时间】:2011-12-01 00:59:21
【问题描述】:

我正在尝试通过将字母“D”移动到视频缓冲区,在白色背景上以蓝色书写。这段代码有什么问题?

包括 Irvine16.inc 。代码 主进程 移动斧头,@数据 mov ds,ax mov si, 0b800h mov word ptr [si], 44h mov word ptr [si+2] 0701h mov 啊, 08h 整数 21 小时 出口 主要ENDP

对上述进行了更改。它现在组装起来了,但什么也没显示。

【问题讨论】:

  • 你应该发布你的代码实际做了什么,而不仅仅是你期望的。
  • 它什么都不做。它不会组装。
  • @Daniel:自从我做 masm 以来已经很久了,但是您是否尝试过将 ASCII 等效为整数,即十进制 69?
  • 说“它不会组装”特别没有帮助。发布您得到的确切错误输出怎么样?
  • @Gian 现在可以组装,但什么也不打印。

标签: assembly x86 dos masm irvine16


【解决方案1】:

示例:

名称“你好世界” 组织 100 小时 ;设置视频模式 移动斧头,3;文本模式 80x25,16 色,8 页(ah=0,al=3) 诠释 10h ;去做吧! ;取消闪烁并启用所有 16 种颜色: 移动斧头,1003h 移动 bx, 0 整数 10 小时 ;设置段寄存器: 移动斧头,0b800h mov ds, ax ;打印“你好世界” ;第一个字节是ASCII码,第二个字节是颜色码。 mov [02h], 'h' mov [04h], 'e' mov [06h], 'l' mov [08h], 'l' mov [0ah], 'o' mov [0ch], ',' mov [0eh], 'w' mov [10h], 'o' mov [12h], 'r' mov [14h], 'l' mov [16h], 'd' mov [18h], '!' ;为所有字符着色: mov cx, 12 ;字符数。 mov di, 03h ;从 'h' 之后的字节开始 c: mov [di], 11101100b ;浅红色(1100)黄色(1110) 添加 di, 2 ;跳过 vga 内存中的下一个 ascii 代码。 循环 c ;等待任何按键: 动啊,0 整数 16 小时 ret

希望此示例对您有所帮助

【讨论】:

  • 是的!谢谢你。我是组装新手,所以我犯了愚蠢的错误。
  • @Sudhir Bastakoti 我的数据段为msg db 10,13,'Enter Sting: $' buffer db 20,我尝试显示缓冲区内容,但它显示的内容为msg,即Enter String:
【解决方案2】:
  1. 0b800h 是视频缓冲区的地址。 mov word ptr [si], 44h 仅寻址DS 中段地址的偏移量(此处为:0b800h),而DS 不指向视频缓冲区。我建议将视频片段加载到 ES 并使用片段覆盖 (ES:)。

  2. 字母加颜色组成一个词。在视频缓冲区中首先是字母,然后是颜色。背景色和前景色各使用一个半字节(4 位)。由于“little endianness”(谷歌为它)一个词应该有格式颜色/字母,例如白色/蓝色/'D' = 7144h

这是一个兼容 Irvine16 的示例:

INCLUDE Irvine16.inc
INCLUDELIB Irvine16.lib

.CODE
main PROC
;   mov ax,@data                ; No .DATA in this example
;   mov ds,ax

    mov si, 0b800h              ; Initialize ES with video buffer
    mov es, si

    xor si, si                  ; Position 0 is top left
    mov word ptr es:[si], 7144h ; White background ('7'), blue foreground (1), letter 'D' (44)

    mov ah, 08h                 ; Wait for key - http://www.ctyme.com/intr/rb-2561.htm
    int 21h

    exit                        ; Irvine16: end of program
main ENDP

END main

【讨论】:

    【解决方案3】:

    在此处查看清单 15:

    http://stuff.pypt.lt/ggt80x86a/asm8.htm

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多