【问题标题】:Writing ASCII symbols to video memory in assembly with TASM on 8086在 8086 上使用 TASM 将 ASCII 符号写入视频内存
【发布时间】:2013-04-07 09:14:59
【问题描述】:

我需要编写一个程序来将 ASCII 符号写入显存。

.model tiny
.stack
.data
.code
main: 

mov ax, 0b800h
mov ds, ax

mov aL, 'x'
mov es, bx
mov es:[1], aL

mov ah, 4ch
int 21h

end main

这段代码目前还没有反应;它编译、运行然后退出而不打印任何内容。 我想我漏掉了一行。

【问题讨论】:

  • 您将ds 设置为0b800h,并将es 设置为未定义的值,或者至少不是0b800h (bx)。然后你使用es 来寻址显存,这显然是失败的。
  • 太棒了,我太傻了。但是我仍然无法以这种方式打印字符,并且程序的行为与以前一样。
  • 您的 ASCII 码偏移量无效 (es:[1])(奇数偏移量用于颜色和属性)并且您没有定义颜色(好吧,您的颜色和属性字节是 @987654331 @,即x)。看我的回答stackoverflow.com/questions/15462807/…
  • @user - 屏幕上的每个位置由两个字节组成,一个保存字符代码,另一个保存颜色。如果您不同时设置两者,您最终可能会在黑色背景上显示一个黑色字符。很难阅读!

标签: memory video assembly x86-16 tasm


【解决方案1】:

为了能够写入显存,请将 ES 设置为 0b800h 在屏幕上指定要写入的位置(偏移)。将 DI 设置为 (row*(max. rows (80))+col)*2(ROW 和 COL 基于空值)。例如要写入第 10 行的第三个字符,请使用 "mov di, (2*80+9)*2" 在 AH 中指定颜色。将 AH 设置为 (backgroundcolor*16+foregroundcolor) 例如在黑色 (0) 背景上写浅灰色 (7) 字母使用 "mov ah, 7" 使用 STOSW 指令而不是“mov es:[adress]”等。这样您就可以动态地写入屏幕上的不同位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多