Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

прерывания BIOS и DOS а Паскале

1.8K
26 июня 2009 года
Death Knight
139 / / 19.02.2006
В задаче стоит условие Вывод сообщений пользователю необходимо реализовать при помощи прерываний BIOS и DOS.
Значит для этого я нашел что необходимо определить переменную типа
 
Код:
type
Registers = record case integer of
0 : (AX, BX, CX, BP, SI, DI, DS, ES, Flags : word);  
1 : (AL, AH, BL, BH, CL, CH, DL, DH : byte)  
end ;


а сами прерывание вызываються с помощью функций
 
Код:
var r : registers;

Intr ($12, r);
r.АН := $30;
MsDos(r);


Вывод строки на ассемблере с использованием прерывания

 
Код:
mov ah,09h
lea dx,str1 //строка дял вывода
int 21h


есть и другие мб лучше каким другим?

т е реализация на Паскале должна быть примерно такая(не работает поджскажите плиз как правильно или свой вариант).
 
Код:
var str:string[50];

str := 'qwert';
r.АН := $09;
//r.dx := незнаю как сюда занести значение str поэтому исп следующее
asm
lea dx,str
end;
MsDos(r);


строку то оно выводит но непонятно какую)

Хелп плиз
1.8K
26 июня 2009 года
Death Knight
139 / / 19.02.2006
нашел тока символ

Код:
Program ss;
uses crt, dos;

var str:string[1]; r:registers;x:integer;

begin
Clrscr;
x:=5;
r.ah := $09; //вывод строки
r.bh := $00; //нулевая страница
r.al := x+$30; //символ
r.bl := 75; //цвет экрана и символа
r.cx := 2; //количество повтор символа
intr($10, r); //вызов биос прерывания
{MsDos(r);}
end.
41K
03 июля 2009 года
grrrr
23 / / 23.05.2009
Почему бы не написать с помощью интерфейса встроенного ассемблера?
Для вывода одного символа:
Код:
it:=ord('A');
     asm
       xor ah,ah
       mov al,03h
       int 10h

       mov ah,09h
       mov al,it
       xor bh,bh
       mov bl,80h
       mov cx,50d
       int 10h
     end;


Цитата:

Вывод строки на ассемблере с использованием прерывания
 
Код:
mov ah,09h
lea dx,str1 //строка дял вывода
int 21h


Это не правильно как и то что написано ниже. Сегмент строки должен быть в DS.

Пример вывода строки:

Код:
var
    str:string[50];
    p:pointer;
begin
     str:='HELLLLOOO $';
     p:=@str[0];
     asm
       xor ah,ah
       mov al,03h
       int 10h
       mov ah,09h
       lds dx,p
       int 21h
     end;
1.8K
04 июля 2009 года
Death Knight
139 / / 19.02.2006
Нет все фишка в том что надо не встроенным интерфейсом)

а насчет того кода:
 
Код:
Функция DOS 09h — Записать строку в STDOUT с проверкой на Ctrl-Break

Ввод:  
АН = 09h
DS:DX = адрес строки, заканчивающейся символом $ (24h)

Вывод:
Никакого, согласно документации, но на самом деле: AL = 24h (код последнего символа)

Действие этой функции полностью аналогично действию функции 02h, но выводится не один символ, а целая строка


т е тот код будет работать можешь проверить или я сам могу программку кинуть если что... а так мне надо вот так как я описывал через переменную регистра и тех функцый)

т е получаетсья как в r.dx занести адрес строки str?
41K
07 июля 2009 года
grrrr
23 / / 23.05.2009
вот код:
 
Код:
r.ah:=0;
      r.al:=$3;
      intr($10,r);

      r.ah:=$09;
      r.ds:=seg(it);
      r.dx:=ofs(it)+1; {[0] - длинна строки}
      intr($21,r);

А на счет "DOS 09h" ты сам и написал, что сегмент должен быть в DS. :):)
LEA загружает только смещение.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог