我刚刚开始使用大会语言(感觉就像在学习新的东西),并已遇到一些问题(迄今为止),所有的教程,我一直在寻找通过不回答,或是太老了,不知道。

1)我已经尝试了一些搜索(也许我只是不知道正确的关键词)但是我不能找到更新的清单的图形模式变化的屏幕决议,等等。好的我发现是: 教程汇编, 我几乎不认为640x480是最好的大会决议的语言可以使用。 任何人都不会知道的更多,更新教程中,我可以使用?

编辑:中断10小时是旧的,并不相当的支持超过640x480

2)是否有可能"章"一个值从一个变量的另一个变量,而不将其移到一个登记册第一?例如:

jmp start
  n1     dw 0
  n2     dw 0
  res    dw 0
start:
  mov n1,5
  mov n2,6
  mov res,n1
  add res,n2
...etc...

编辑:这是不可能的。你不能去从存储器中存储器而不使用登记册。

3)将与问题1中,有没有方法检测到什么形式的用户目前正在使用,使得我可以改变它,并改变它的背后?(我以为有,但我不知道该如何做到这一点。)

编辑:需要查询的操作系统的图形设置。

有帮助吗?

解决方案

对于问题#1和#3,请查看 VESA BIOS Extensions 。这是用于处理“Super VGA”的标准。模式,在90年代流行。

至于#2,一般答案是否定的,你不能将MOV内存存储到内存中。但事实并非如此:有MOVS(移动字符串),它将字节,字或双字从DS:SI移动到ES:DI。通常,此指令与REP前缀一起使用以移动内存块。此外,假设您已经设置了堆栈,您可以通过推送和弹出来移动内存到内存而不会破坏寄存器:

PUSH [mem1]
POP  [mem2]

其他提示

关于你的第一个问题,中断10很老,可能不会超过640x480的分辨率。现在使用软件堆栈的不同部分;即,你必须询问Windows以获得当前的屏幕分辨率。

这篇相当冗长的帖子包含很多关于如何使用汇编程序在Windows中驱动DirectX的细节。 DirectX是目前图形处理的关键API系列,你不会使用DOS时代的中断并直接编程VGA帧缓冲区。

中断10小时基本上是一个操作系统功能的电话(实际上它运行BIOS码)。在内部,它读写的视频存储器以及各种登记薄的绘图卡片。一个什么样的事情发生"内的"中断10小时,检查 出。

当运行DOS程序,在Windows下,它是运行一个虚拟DOS机。Windows实际上不让它碰到的卡但可以让它发挥与一个虚拟的。通常这只伸展远远显屏幕模式(有时甚至是唯一的文本模式),即什么你有的只是一个虚拟显卡(不是现代形卡)。由于这个原因,在16位大会的语言,在Windows,你就不能使用的全部能力的现代图像卡。

是的,肯定的是,大会的语言可以让你做任何事情的卡可以做的。但是,只有当:

  • 你的程序有不受限制地进入图形硬件(例如你在写一个Windows和Linux装置驱动,或是执行在纯DOS,或者你自己的内核),或
  • 你的计划去通过适当的操作系统的接口。

如果你还感兴趣在大会的语言,我会建议你尝试写一个玩具的核心。这样做的时候,你会学习如山的事情。

发表评论,如果你想进一步信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top