c++ - 在c++中使用21h中断的9个函数

标签 c++ dos interrupt

函数 09h 中断 21h dx = 文本偏移量,ds = 文本段

如何在 C++ 中获取段和偏移量?

最佳答案

这个答案有几个先决条件:

  1. 您正在使用生成 16 位代码的编译器,因为 DOS 调用只能在 16 位模式下工作,并且
  2. 您的编译器获得了段的概念。

在这种情况下:

char string [] = "Hello World$";
call_int21h_9 (&string);

其中 call_int21h_9 类似于:

call_int21h_9 (FAR char *string)
// the FAR above is important and very compiler dependent, it tells the compiler
// that the pointer is a 32bit pointer (16 bit segment and 16 bit offset)
{
  mov ah,9
  lds dx,string ; this loads the DS:DX segment:offset from the value on the stack
  int 21h
}

此外,根据段的设置和使用方式,有多种编译 16 位应用程序的方法。最常见的两个是 smalllarge(编译器可能会称它们为其他名称):

  • 小:所有段都是相同的值,数据+代码的总和<64k
  • 大:所有代码和数据存在于多个段中,代码+数据<1Meg

还有其他段布局(一种数据,多种代码;一种代码和多种数据等),您需要查阅编译器文档以了解可用的内容。

当然,您最大的问题是获得一个支持 16 位的编译器。

为什么不直接使用 coutprintf

关于c++ - 在c++中使用21h中断的9个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2617907/

相关文章:

c++ - OpenMP 并行化停止工作

c - 在 C 中提取 dos 命令输出

string - dos下如何删除某个字符之前的字符串?

batch-file - 检查dos批处理文件中的输入命令?

linux - OS如何让被中断的进程一直运行在指定的CPU上?

c++ - variadic template template中的Variadic template推导

c++ - 按长度(单词)对字符串数组进行排序 C++

linux - 中断 ID 到名称映射

c++ - 文件关闭通知

linux - 如何在 Linux 内核模块中设置周期性定时器回调