【问题标题】:8086 address b800h: writing a symbol directly to video memory with TASM8086 地址 b800h:使用 TASM 将符号直接写入显存
【发布时间】:2013-04-07 08:50:15
【问题描述】:

我想写一个程序,通过直接写入显存来显示ascii符号。

.model tiny
.stack
.data
.code
main: 

mov ax, b800h
mov ds, ax

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

end main

当我尝试使用 TASM 编译时出现此错误

"Undefined symbol: B800H"

【问题讨论】:

  • 这是什么操作系统?如果是 DOS,你应该在最后使用中断退出到 DOS:MOV AH, 4CH / INT 21H

标签: memory video assembly x86-16 tasm


【解决方案1】:

在它前面放一个0,这样 TASM 就可以知道它是一个数值而不是一个符号:

mov ax, 0b800h

您似乎还缺少任何可以从您的程序中返回的内容。没有它,很难说 什么 代码会在 mov es:[20], al 之后运行,但我怀疑它不会很漂亮。

你需要像int 21, function 4c 这样的东西。我一直认为 Ralf Brown's interrupt list 对这类东西非常宝贵。


可能还想考虑迁移到过去十年某个时候一直在积极维护的工具的可能性 :-)

TASM 5 于 90 年代发布并在 2002 年左右进行了修补,并且不支持从那时起完成的许多新内容(MMX、SSE 等)。我个人最喜欢的是 NASM,但还有许多其他选择。

【讨论】:

  • 太棒了,但是现在.exe在我运行时无限期挂起,你能看到任何其他问题吗?
  • @user2241226:它正在进入仙境,因为您没有从您的程序中返回 - 请参阅更新。
  • @user2241226,这些都是b800不同问题。如果您将它们作为不同的问题提出,您将更好地利用 SO。评论并不是提出更多与原文无关的问题的地方。
  • 明白,感激不尽
  • @user2241226,出于同样的原因,您无法找到有关 heredocs 或 perlops 的内容 - 您必须知道要查找的内容。每个经历过 8086/MSDOS 早期的人都知道 Ralf Brown 这个名字 - 哎呀,我们几乎把他当作神来崇拜 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多