Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ассемблер _ напрямую с памятью в тескст режиме

Автор: Shadow 27.05.2004 2:51

ПРИВЕТ!!! ALL!!
================
ВОт реализовано позиционирование сама строка
и атрибуты
==================

Procedure InitTV; assembler;
 asm
   mov ax,0003h
   int 10h
 end;


Procedure WK;Assembler;
 asm
   mov ax,0
   int 16h
   xor ax,ax
 end;

Procedure OS(x,y : Byte; S : String; c : Byte);
 Begin
  asm
   push ds
   mov ax,ss
   mov ds,ax
   lea si,y
   mov ax,80
   mov cx,[si]
   mul cx
   lea si,x
   mov cx,[si]
   add ax,cx
   mov cx,0002h
   mul cx
   mov di,ax
   mov ax,0b800h
   mov es,ax
   lea si,S
   mov ah,0
   mov al,[si]
   mov cx,ax
   inc si
@out:
   mov al,[si] {Symbol}
   mov ah,c    {attribut}
   inc si      {nex symbol}
   mov es:[di],ax  {to video memory}
   inc di      {movenau to video memory}
   inc di      {increment 2 se also for 1 symbol 2 byte memory}
   loop @out
   pop ds
  end;
 end;

BEGIN
 InitTV;
 OS(36,10,'Hello',254);
 WK;
END.

Автор: BlackShadow 27.05.2004 15:38

А зачем так сложно?

Procedure OS(x,y : Byte; S : String; c : Byte);Assembler;
Asm
 PUSH DS
 MOV AX,SS
 MOV DS,AX
 MOV AX,$B800
 MOV AL,[y]
 MOV BL,80
 MUL BL
 ADD AL,[x]
 CBW
 MOV DI,AX
 LEA SI,[s]
 MOV CL,[SI]
 XOR CH,CH
 INC SI
 MOV AH,[c]
 CLD
@@1:
 LODSB
 STOSW
 LOOP @@1
 POP DS
End;
Должно работать...

Автор: FreeMan 27.05.2004 20:23

А шо такое CBW? Какая-то фишка с флагами?

Автор: Shadow 27.05.2004 22:35

Цитата(BlackShadow @ 27.05.04 8:38)
А зачем так сложно?
Procedure OS(x,y : Byte; S : String; c : Byte);Assembler;
Asm
 PUSH DS
 MOV AX,SS
 MOV DS,AX
 MOV AX,$B800

а кто будет на видео настраивать
типа

MOV es,ax

 MOV AL,[y]
 MOV BL,80
 MUL BL
 ADD AL,[x]
 CBW
 MOV DI,AX
 LEA SI,[s]
 MOV CL,[SI]
 XOR CH,CH
 INC SI
 MOV AH,[c]
 CLD
@@1:
 LODSB
 STOSW
 LOOP @@1
 POP DS
End;

Должно работать...
BlackShadow не работает
даже если и настроить то тоже не работает
аттрибуты вроде совпадают а вот коды символов и их расположение нет

Автор: Shadow 27.05.2004 22:44

BlackShadow
кроме того
CBW
рушит адресс в регистре AX
===========
запусти через отладчик и все увидишь
smile.gif

Автор: Shadow 27.05.2004 23:22

to BlackShadow
еще забыл адресс умножить на 2 т.к. два байта под символ
насчет флага DF сним и так все нормально
короче вот

Procedure OS(x,y : Byte; S : String; c : Byte);
begin
Asm
 PUSH DS
 MOV AX,SS
 MOV DS,AX
 MOV AX,$B800
 mov es,ax
 MOV AL,[y]
 MOV BL,80
 MUL BL
 ADD AL,[x]
 mov cx,2
 mul cx
 xor cx,cx
 MOV dI,AX
 LEA si,s
 MOV cl,[si]
 INC si
 MOV Ah,[c]
@@1:
 LODSB
 STOSW
 LOOP @@1
 POP DS
End;
end;
begin
   asm
     mov ax,0003h
     int 10h
   end;
OS(10,15,'Hello User',4);
 asm
   mov ax,0
   int 16h
 end;
end.

Автор: Shadow 28.05.2004 21:23

FreeMan
CBW
преобразование байта в слово

Автор: FreeMan 29.05.2004 15:11

Я уже почитал в TechHelp'e, но всё-равно спасибо!

Автор: GLuk 30.05.2004 0:47

Товарисчи!!
Кто же юзает MUL, если все изначально преполагалось для оптимизации и скорости?? (или не так).

Вот мой вариант:

Uses
   CRt;
Const
    S:String = 'Assembler - forever!';
    X:Word = 60;
    Y:Word = 24;
    C:Byte = $07;

Procedure WriteXY(X,Y:Word; C:Byte; StrOffset:Word);Assembler;
asm
  mov ax,$B800
  mov es,ax
  mov ax,Y
  mov bx,ax
  shl ax,5
  shl bx,3
  add ax,bx
  shl ax,1
  add ax,X
  shl ax,1
  mov di,ax
  mov si,StrOffset
  mov ah,C
  xor ch,ch
  mov cl,[si]
  inc si
@Next:
  lodsb
  stosw
  loop @Next
end;
Begin
    CLrScr;
    WriteXY(X,Y,C,Ofs(S));
    GotoXY(X+1,Y+1);
    Write('є');
End.


CRT подключаю для проверки корректности работы...
Нумерация осей с нуля.
Регистр DS - содержит сегмент данных основной проги, юзая в модулях придется и его сохранять. blink.gif

Автор: Shadow 30.05.2004 3:40

:D
===========
Я на это и расчитывал что кто нибудь наконец применит SHL
или SHR
самая быстрая операция процессора точнее его самая любимая
:D
============
Я ленивый

Автор: GLuk 30.05.2004 14:15

Ну SHR конечно не прокатит...
Может как-нибудь переписать модуль CRT??

Автор: Shadow 30.05.2004 17:51

Цитата(GLuk @ 30.05.04 7:15)
Ну SHR конечно не прокатит...
Может как-нибудь переписать модуль CRT??

а вот тут по подробнее почему не прокатит делить им не удасться что ли
на степени двойки

Автор: BlackShadow 31.05.2004 14:40

Shadow, про ES согласен - забыл.
Про "сбивается адрес в AX" - так он там уже за даром не нужен.
И вообще, уболтал. Дома продебугю.
GLuk

Цитата
Может как-нибудь переписать модуль CRT

Этим я и занимался, пока не впал в .ASP на выходных в "АЗАХ" я дал довольно достаточное описание для того, чтобы можно было это сделать.

Автор: GLuk 1.06.2004 0:49

Там много переписывать не надо, исходник у меня есть, посижу как-нибудь

А насчет SHR, дык там просто незачем делить.. ;)

Автор: Shadow 1.06.2004 15:25

GLuk
нееет Я так понял что SHR там в CRT модуле не работает или работает но нетак
или имеет какието особенности так в чем прикол то

Автор: GLuk 1.06.2004 16:17

Shadow - Это вопрос или предложение?? smile.gif

Чой-то не догнал краями? blink.gif blink.gif
SHR вроде бы везде работает, или может имеешь в виду, что при написании модуля CRT не использовалась инструкция SHR?? blink.gif

Автор: Shadow 1.06.2004 21:20

Значит мы оба не понимаем

Цитата
Ну SHR конечно не прокатит...
Может как-нибудь переписать модуль CRT??

пост был вот таким
Цитата
Там много переписывать не надо, исходник у меня есть, посижу как-нибудь
А насчет SHR, дык там просто незачем делить.. 

а ответ был вот таким
начет деления это понятно делить там незачем
а насчет остального нет как SHR не прокатит blink.gif
так почему не прокатит я непонял

Автор: GLuk 1.06.2004 22:24

Все догнано и понято smile.gif , дык что там насчет CRT??

Автор: Shadow 1.06.2004 23:18

Цитата(GLuk @ 1.06.04 15:24)
Все догнано и понято smile.gif , дык что там насчет CRT??

нет мы опять не поняли
-----------
Я все-таки хочу узнать как не прокатит SHR
и почему придеться переписывать модуль CRT и вообще причем он тут
SHR это же ASM
если это уже не стало секретом и админы нас не забанят
---------------
:D :D блин чувствую придется это до отпуска отложить когда я приеду
да чтож такое то
-----------
Да простят меня админы и модератор
==================
GLuk
или ты имел ввиду что SHR непрокатит потомучто он делит
и деление там просто не нужно

Автор: GLuk 1.06.2004 23:24

SHR не прокатит только потому, что делить дам просто незачем, при реализации просчета смещения к нужному знакоместу. Как ты правильно понял деление там просто не нужно... smile.gif blink.gif

А CRT переписать под новые процы (386+), так для интересу.

Автор: Shadow 2.06.2004 0:34

Цитата(GLuk @ 1.06.04 16:24)
SHR не прокатит только потому, что делить дам просто незачем, при реализации просчета смещения к нужному знакоместу. Как ты правильно понял деление там просто не нужно... smile.gif  blink.gif

А CRT переписать под новые процы (386+), так для интересу.

наконец разбрались а то я уж чуть не умер smile.gif
--------
насчет CRT то я незнаю его структуру что именно у него не реализованно под 386 процы
--------

Автор: GLuk 2.06.2004 1:04

Исходники CRT у меня где-то были, а под 386 там ничего не реализовано, лишь базовые возможности 8086...

Автор: Shadow 2.06.2004 2:38

Цитата(GLuk @ 1.06.04 18:04)
Исходники CRT у меня где-то были, а под 386 там ничего не реализовано, лишь базовые возможности 8086...

а 32 регистры смошешь сделать или это скорей всего в модуле SYSTEM
спрятано гм, но было бы замечательно smile.gif