问题标签 [djgpp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - djgpp gpp 传递变量内联汇编
使用带有编译器 gpp 和 intel 语法的 DJGPP
如何将变量传递到内联汇编中?
错误如下:
undefined reference to `n'
代码:
c - 使用 GNU C 内联汇编在 VGA 内存中绘制一个字符
我正在学习使用 C 和内联汇编在 DOS 中进行一些低级 VGA 编程。现在我正在尝试创建一个在屏幕上打印出一个字符的函数。
这是我的代码:
我正在指导自己使用 PASCAL 编写的这一系列教程:http: //www.joco.homeserver.hu/vgalessons/lesson8.html。
我根据 gcc 编译器更改了汇编语法,但我仍然收到此错误:
编辑:
我一直在努力改进我的代码,至少现在我在屏幕上看到了一些东西。这是我更新的代码:
如果你看到上面的图片,我正在尝试写字母“S”。结果是您在屏幕左上方看到的绿色像素。无论 x 和 y 我给出什么函数,它总是在同一个点上绘制像素。
谁能帮我更正我的代码?
x86 - 真的有必要锁定中断处理程序中可能触及的所有内存吗?
我读到的关于 DPMI 和中断的每一个资源都说,可能在中断处理程序中使用的所有内存(代码/数据/堆栈)都应该被锁定(又名固定),以确保它不会被分页。这背后的想法是,当中断处理程序中发生页面错误时,您将得到双重错误,您的程序将崩溃。
但真的是这样吗?我想在中断发生的那一刻可能会发生双重故障,并且 CPU 尝试跳转到您的中断处理程序,但代码恰好被调出。一旦您的 ISR 代码已经在运行,我看不出页面错误会如何导致灾难。中断上下文和正常程序上下文有什么不同?
作为一个快速测试,我编写了一个简单的计时器 ISR,它用 分配一些内存char* ptr = new char[1024*1024]
,然后立即丢弃指针。在启用分页的 CWSDPMI 下运行,这确实会在一段时间后崩溃,但这只是因为new
引发了std::bad_alloc
异常。据我所知,没有双重错误。
也许如果在执行磁盘 I/O 时发生中断(在 int 21 的中间),并且页面错误处理程序再次调用 int 21,这可能会导致麻烦。但这与双重错误无关。然后我认为无论如何都不能在 int 21 期间调用保护模式中断处理程序。
锁定内存真的那么重要吗?
c++ - 从硬件异常处理程序中抛出 C++ 异常。为什么 -fnon-call-exceptions 的行为不符合预期?
昨晚我有一个有趣的想法,捕获硬件异常并抛出一个C++ exception
代替。认为这可能对像这样的事情有用,FPU exceptions
这些事情通常要么崩溃,要么默默地返回NaN
,然后导致意外行为。AC++ exception
在这里会更可取。
所以我整个早上都在破解,终于让它工作了。嗯,差不多。编译器仍然没有意识到算术运算现在可以 throw C++ exceptions
,并且会默默地丢弃try/catch
它周围的块。当函数中发生异常时,它确实有效。
我意识到这是一个不寻常的问题......但有什么办法可以让我完成这项工作吗?有什么方法可以告诉gcc
任何地方都可能发生异常?
我正在编译djgpp
(我相信)使用DWARF
异常处理。
编辑:我刚刚找到gcc
标志 -fnon-call-exceptions
和-fasynchronous-unwind-tables
,这似乎是我正在寻找的。但它仍然不起作用......
编辑:现在使用前面提到的gcc
标志,它确实会在两个函数调用之间发生异常时捕获:
编辑:嵌套try/catch
块具有相同的效果,除非捕获的指令前面有函数调用,否则不会捕获异常。
c - 使用 djgpp 编译时是否仍定义 __MSDOS__?
与 djgpp 一起使用是否__MSDOS__
足够或应该__DJGPP__
改为使用?
相比之下,我知道_WIN32
在 cygwin 上默认没有定义(基于假设 djgpp 和 cygwin 的目的是构建一个 Unix 层来隐藏真实的操作系统细节)。
我不再有一台 DOS 机器来测试它。
c - 键盘处理程序导致段错误(djgpp)
最近我决定编写一些简单的 MSDOS 游戏会很有趣。不用说,我需要处理键盘事件的代码。
这是我想出的测试:
该代码应该等待按键,然后打印出字符的 ASCII 值。并且一切都按预期工作,除非我按喜欢backspace或esc- 然后发生分段错误。
我对装配不熟悉,但我真的不知道是什么原因导致了这个错误。
我用 编译djgpp
并运行可执行文件DosBox
一切都基于此处提供的信息:
- https://courses.engr.illinois.edu/ece390/books/artofasm/CH20/CH20-3.html
- https://en.wikipedia.org/wiki/BIOS_interrupt_call
先感谢您!:)
c++ - 在 DJGPP 上编译 C++ 时出现奇怪的编译错误
使用 GCC 6.1.0 在 DJGPP 上编译以下代码
导致以下错误:
周围的一切cpp_type_traits.h:162
看起来都很正常:
怎么了?
c - 受保护的硬件中断处理程序卡住了?(DJGPP)
我正在尝试在保护模式下设置硬件中断处理程序,使用djgpp-2在dosbox-0.74中进行编译。我猜这是可能的最小代码(定时器中断):
请注意,我没有链接我的处理程序,而是替换它。计数器不会增加超过1
(因此永远不会停止主循环)让我猜测处理程序没有正确返回或只被调用一次。另一方面,链接工作正常(删除包装行并替换set_protected_mode
为chain_protected_mode
)。我错过了一条线吗?
c - DJGPP 如何使用批处理文件设置 exe 的快捷方式
新手在这里使用带有 sp3 的 XP 笔记本电脑,尝试设置 DJGPP 4.3.2 来学习 C。我正在关注“嵌入式微控制器的 C 编程”一书。
如书中所示,我的home文件夹中有“myprog.c”和.exe以及按章节排列的文件:“c:\djgpp\home\Ch1\myprog1.c”等。
我能够使用程序员记事本中的 F9 键设置一个快捷方式来编译“myprog.c”,但无法获得运行该程序的快捷方式,如使用“编辑工具属性”的书中所示:
djgpp 文件夹中有两个 .bat 文件和一个 .env 文件:
我注意到两个批处理文件中的更改目录命令不同。我两种方式都试过了,没有区别。
感谢您的帮助
gcc - 用于 DOS 的 GCC 交叉编译器会为简单的“Hello world!”生成链接器错误。在 C 中
我尝试将 GCC 9.3.0 配置为为 DOS 生成可执行文件。然而,对于一个简单的“Hello world!” C语言程序,它输出:
djgpp-gcc -v
输出:
我还编译了最新版本的 GNU 链接器和 GNU 汇编器,它们输出为它们的版本:
和
知道我做错了什么吗?GCC 或 GAS 或 GLD 是否在过去一段时间停止支持 DOS?我想不是,因为它们在没有警告的情况下将 DOS 编译为目标。