Справочная информация: передо мной была поставлена задача написать программу сбора данных для 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
что-то, что я не обрабатываю в своем собственном коде сборки во втором примере?
Заранее благодарю за любую помощь.