问题标签 [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.

0 投票
1 回答
163 浏览

gcc - djgpp gpp 传递变量内联汇编

使用带有编译器 gpp 和 intel 语法的 DJGPP
如何将变量传递到内联汇编中?
错误如下:
undefined reference to `n'

代码:

0 投票
1 回答
2972 浏览

c - 使用 GNU C 内联汇编在 VGA 内存中绘制一个字符

我正在学习使用 C 和内联汇编在 DOS 中进行一些低级 VGA 编程。现在我正在尝试创建一个在屏幕上打印出一个字符的函数。

这是我的代码:

我正在指导自己使用 PASCAL 编写的这一系列教程:http: //www.joco.homeserver.hu/vgalessons/lesson8.html

我根据 gcc 编译器更改了汇编语法,但我仍然收到此错误:


编辑:

我一直在努力改进我的代码,至少现在我在屏幕上看到了一些东西。这是我更新的代码:

如果你看到上面的图片,我正在尝试写字母“S”。结果是您在屏幕左上方看到的绿色像素。无论 x 和 y 我给出什么函数,它总是在同一个点上绘制像素。

在此处输入图像描述

谁能帮我更正我的代码?

0 投票
0 回答
112 浏览

x86 - 真的有必要锁定中断处理程序中可能触及的所有内存吗?

我读到的关于 DPMI 和中断的每一个资源都说,可能在中断处理程序中使用的所有内存(代码/数据/堆栈)都应该被锁定(又名固定),以确保它不会被分页。这背后的想法是,当中断处理程序中发生页面错误时,您将得到双重错误,您的程序将崩溃。

但真的是这样吗?我想在中断发生的那一刻可能会发生双重故障,并且 CPU 尝试跳转到您的中断处理程序,但代码恰好被调出。一旦您的 ISR 代码已经在运行,我看不出页面错误会如何导致灾难。中断上下文和正常程序上下文有什么不同?

作为一个快速测试,我编写了一个简单的计时器 ISR,它用 分配一些内存char* ptr = new char[1024*1024],然后立即丢弃指针。在启用分页的 CWSDPMI 下运行,这确实会在一段时间后崩溃,但这只是因为new引发了std::bad_alloc异常。据我所知,没有双重错误。

也许如果在执行磁盘 I/O 时发生中断(在 int 21 的中间),并且页面错误处理程序再次调用 int 21,这可能会导致麻烦。但这与双重错误无关。然后我认为无论如何都不能在 int 21 期间调用保护模式中断处理程序。

锁定内存真的那么重要吗?

0 投票
1 回答
1527 浏览

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块具有相同的效果,除非捕获的指令前面有函数调用,否则不会捕获异常。


编辑:我已将此作为gcc中的一个可能错误提交,并将我的代码简化为一个简单的测试用例

0 投票
1 回答
221 浏览

c - 使用 djgpp 编译时是否仍定义 __MSDOS__?

与 djgpp 一起使用是否__MSDOS__足够或应该__DJGPP__改为使用?

相比之下,我知道_WIN32在 cygwin 上默认没有定义(基于假设 djgpp 和 cygwin 的目的是构建一个 Unix 层来隐藏真实的操作系统细节)

我不再有一台 DOS 机器来测试它。

0 投票
1 回答
202 浏览

c - 键盘处理程序导致段错误(djgpp)

最近我决定编写一些简单的 MSDOS 游戏会很有趣。不用说,我需要处理键盘事件的代码。

这是我想出的测试:

该代码应该等待按键,然后打印出字符的 ASCII 值。并且一切都按预期工作,除非我按喜欢backspaceesc- 然后发生分段错误。

在此处输入图像描述

我对装配不熟悉,但我真的不知道是什么原因导致了这个错误。

我用 编译djgpp并运行可执行文件DosBox

一切都基于此处提供的信息:

先感谢您!:)

0 投票
0 回答
259 浏览

c++ - 在 DJGPP 上编译 C++ 时出现奇怪的编译错误

使用 GCC 6.1.0 在 DJGPP 上编译以下代码

导致以下错误:

周围的一切cpp_type_traits.h:162看起来都很正常:

怎么了?

0 投票
1 回答
247 浏览

c - 受保护的硬件中断处理程序卡住了?(DJGPP)

我正在尝试在保护模式下设置硬件中断处理程序,使用中进行编译。我猜这是可能的最小代码(定时器中断):

请注意,我没有链接我的处理程序,而是替换它。计数器不会增加超过1(因此永远不会停止主循环)让我猜测处理程序没有正确返回或只被调用一次。另一方面,链接工作正常(删除包装行并替换set_protected_modechain_protected_mode)。我错过了一条线吗?

0 投票
0 回答
51 浏览

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 文件:

我注意到两个批处理文件中的更改目录命令不同。我两种方式都试过了,没有区别。

感谢您的帮助

0 投票
1 回答
416 浏览

gcc - 用于 DOS 的 GCC 交叉编译器会为简单的“Hello world!”生成链接器错误。在 C 中

我尝试将 GCC 9.3.0 配置为为 DOS 生成可执行文件。然而,对于一个简单的“Hello world!” C语言程序,它输出:

djgpp-gcc -v输出:

我还编译了最新版本的 GNU 链接器和 GNU 汇编器,它们输出为它们的版本:

知道我做错了什么吗?GCC 或 GAS 或 GLD 是否在过去一段时间停止支持 DOS?我想不是,因为它们在没有警告的情况下将 DOS 编译为目标。