背景:我的任务是为Unitech HT630编写一个数据收集程序,它运行一个专有的 DOS 操作系统,可以运行为 16 位 MS DOS 编译的可执行文件,尽管有一些限制。我正在使用 Digital Mars C/C++ 编译器,它似乎工作得很好。
对于某些事情,我可以使用标准 C 库,但在单元屏幕上绘图等其他事情需要汇编代码。设备文档中给出的汇编示例与我被教导在 C/C++ 中使用内联汇编代码的方式不同。作为参考,BYTE
在下面的示例中是类型unsigned char
.
我得到的示例代码示例:
#include <dos.h>
/* Set the state of a pixel */
void LCD_setpixel(BYTE x, BYTE y, BYTE status) {
if(status > 1 || x > 63 || y > 127) {
/* out of range, return */
return;
}
/* good data, set the pixel */
union REGS regs;
regs.h.ah = 0x41;
regs.h.al = status;
regs.h.dh = x;
regs.h.dl = y;
int86(0x10, ®s, ®s);
}
我总是被教导如何使用内联汇编:
/* Set the state of a pixel */
void LCD_setpixel(BYTE x, BYTE y, BYTE status) {
if(status > 1 || x > 63 || y > 127) {
/* out of range, return */
return;
}
/* good data, set the pixel */
asm {
mov AH, 41H
mov AL, status
mov DH, x
mov DL, y
int 10H
}
}
两种形式似乎都有效,到目前为止我还没有遇到任何一种方法的问题。对于 DOS 编程,一种形式是否比另一种形式更好?在第二个示例中,该函数是否int86
为我处理了一些我没有在自己的汇编代码中处理的东西?
预先感谢您的任何帮助。