Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 08.01.2012, 12:06   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
компилировать можно только на турбо паскале.
Какая версия?!
Serge_Bliznykov вне форума
Старый 08.01.2012, 12:20   #12
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Код:
procedure writeS(s:string);assembler;
asm
  push ds {сохраняем сегмент данных}
  mov ah,40h {номер функции прерывания}
  mov bx,1{стандартный вывод это 1}
  lds dx,s {адрес строки в ds:dx}
  mov si,dx {адрес строки в ds:si для lodsb}
  lodsb {длинну строки в al (первый байт в строке это ее длина!)}
  inc dx{чтобы не напечатать первый байт}
  xor cx,cx;mov cl,al{чтобы в сх была длинна строки}
  int 21h {DOS}
  pop ds {восстанавливаем ds}
  {как видишь всё просто :) }
end;

Код:
    program wrBIOS;
    uses DOS;
    procedure writeXYS(x,y:byte;s:string);
    var
      R:registers;
    begin
      with R do
      begin
        DH:=Y;{mov dh,y понятно}
        DL:=X;{mov dl,x понятно}
        AX:=$1301;{mov ax,1301h 13h функция 1 подфункция }
        BP:=ofs(s);ES:=seg(s);{les bp,s  адрес s в es:bp}
        BH:=0;{mov bh,0  номер страницы}
        BL:=16*2+15;{mov bl,16*2+15 атрибут символа}
        CH:=CX xor CX;{xor ch,ch }
        CL:=mem[ES:BP];{mov cl,byte ptr es:[bp] в сх положим длину строки}
        INC(BP);{inc bp Чтобы не напечатать нулевой символ в s}
      end;
      intr($10,R);
    end;
    {------------}
    begin
      writeXYS(40,10,'123456');
      readln;
    end.

(1*744 байт) exe file
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype

Последний раз редактировалось denisbrain; 08.01.2012 в 12:27.
denisbrain вне форума
Старый 08.01.2012, 13:05   #13
Jenn
 
Регистрация: 07.01.2012
Сообщений: 9
По умолчанию

версия - любая.


к сожалению, ассемблерные вставки использовать нельзя
Jenn вне форума
Старый 08.01.2012, 13:09   #14
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
можно было бы упаковщик UPX использовать
UPX не жмет Turbo Pascal вроде
у меня спиралька на 2.75 Кб вышла
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума
Старый 08.01.2012, 13:15   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Jenn
к сожалению, ассемблерные вставки использовать нельзя
Вы знаете, я сперва тоже самое хотел написать denisbrain...

а потом обратил внимание. второй пример кода:
Цитата:
Код:
uses DOS;
 R:registers;
НЕ ЯВЛЯЕТСЯ ассемблерной вставкой. Используются методы модуля DOS (ну да, там они реализованы через встроенный ассемблер). Но этот модуль СТАНДАРТНЫЙ. Т.е. входит в состав TurboPascal - и никакого запрета на его использование в условиях задачи я НЕ ВИЖУ!
Serge_Bliznykov вне форума
Старый 08.01.2012, 13:23   #16
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
Радость

Цитата:
Сообщение от Mad_Cat Посмотреть сообщение
UPX не жмет Turbo Pascal вроде
у меня спиралька на 2.75 Кб вышла
пришлю сюда код, посмотрим

Turbo Pascal в конечном счете все к ASM сводит
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума
Старый 08.01.2012, 13:26   #17
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
Радость

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы знаете, я сперва тоже самое хотел написать denisbrain...

а потом обратил внимание. второй пример кода:

НЕ ЯВЛЯЕТСЯ ассемблерной вставкой. Используются методы модуля DOS (ну да, там они реализованы через встроенный ассемблер). Но этот модуль СТАНДАРТНЫЙ. Т.е. входит в состав TurboPascal - и никакого запрета на его использование в условиях задачи я НЕ ВИЖУ!

т.е. в данном примере вывод происходит через прерывания и функциями MS DOS. своего рода aPI функции того времени
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума
Старый 08.01.2012, 13:31   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию


у меня ваш второй код (через использование модуля DOS)

паскалем 7.0
Цитата:
Код:
Turbo Pascal  Version 7.0  Copyright (c) 1983,92 Borland International
компилируется в EXE файл размером 2208 байт.
Что я делаю не так?!

p.s. кстати, можно попытаться воспользоваться более старой версией Паскаля. Например, 5.0. IMHO, они генерировали более компактный код.
Serge_Bliznykov вне форума
Старый 08.01.2012, 14:37   #19
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
Радость

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
у меня ваш второй код (через использование модуля DOS)

паскалем 7.0

компилируется в EXE файл размером 2208 байт.
Что я делаю не так?!

p.s. кстати, можно попытаться воспользоваться более старой версией Паскаля. Например, 5.0. IMHO, они генерировали более компактный код.
хм
видимо выше изложенные директивы помогают компилятору

директивы
Код:
{$A-,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V+,X+}
{$M 16384,0,655360}
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype

Последний раз редактировалось denisbrain; 08.01.2012 в 14:39.
denisbrain вне форума
Старый 08.01.2012, 16:33   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от denisbrain
хм
видимо выше изложенные директивы помогают компилятору

директивы

Код:
{$A-,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V+,X+}
{$M 16384,0,655360}
ну да. помогают.
без них (ну, точнее с теми настройками компилятора, которые идут по умолчанию) получается ровно 2352 байта...
Serge_Bliznykov вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
заполнение матрицы по спирали!!!!! Jenn Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 08.01.2012 10:52
Заполнение квадратной матрицы по спирали [Delphi] willams Помощь студентам 2 13.12.2010 09:05
Заполнение матрицы по спирали (от центра влево-вниз-вправо-вверх) Баур Помощь студентам 4 03.12.2009 17:39
hello world менее 42 байт romark Паскаль, Turbo Pascal, PascalABC.NET 9 28.12.2008 16:52
Hello world менее 42 байт romark Общие вопросы C/C++ 7 26.12.2008 17:09