![]() |
1
4
对于问题1和3,请查看 VESA BIOS Extensions . 这是处理“超级VGA”模式的标准,在90年代很流行。 至于2,一般来说答案是否定的,你不能将内存移动到内存中。但这并不是严格正确的:有movs(move string),它将字节、单词或双字从ds:si移动到es:di。通常,该指令与rep前缀结合使用,以移动内存块。另外,假设您设置了一个堆栈,您可以通过按下和弹出将内存移动到内存,而不必删除寄存器:
|
![]() |
2
2
关于您的第一个问题,中断10是非常老的,可能不会使用超过640x480的分辨率。现在使用的是软件栈的另一部分;即,您必须询问Windows才能获得当前的屏幕分辨率。 |
![]() |
3
2
This rather verbose post 包含了许多关于如何使用汇编程序在Windows中驱动DirectX的详细信息。DirectX是目前图形的关键API系列,使用DOS时代的中断和直接对VGA帧缓冲区进行编程不会有太大进展。 |
![]() |
4
1
中断10h基本上是一个操作系统函数调用(实际上它运行的是BIOS代码)。在内部,它读取/写入视频内存以及图形卡上的各种寄存器。要了解“在”中断10h内发生的事情,请检查 this 出来。 在Windows下运行DOS程序时,它在虚拟DOS计算机中运行。Windows实际上不允许它触摸图形卡,而是允许它与虚拟卡一起播放。通常,这只扩展到VGA屏幕模式(有时仅限于文本模式),即您拥有的是虚拟VGA卡(而不是现代图形卡)。因此,在Windows下的16位汇编语言中,您不能使用现代图形卡的全部功能。 是的,当然,汇编语言可以让您做图形卡可以做的任何事情。但前提是:
如果您仍然对汇编语言感兴趣,我建议您尝试编写一个玩具内核。这样做,你就会学到很多东西。 如果需要进一步的信息,请留言。 |
|
Anon. · 用汇编语言解释这一行? 7 年前 |
![]() |
wangt13 · 如何使用VMX暂停和恢复VM 7 年前 |
![]() |
Kay · Skylake和更新的环形巴士 7 年前 |
![]() |
Kadir · Intel芯片上的半精度浮点算法 7 年前 |
![]() |
Some_Dude · x86汇编牛顿平方根算法寄存器为1#IND 7 年前 |