| Другое > Hard'n'Soft |
| Вспоминаем Turbo Pascal и решаем задачи на нём |
| << < (14/15) > >> |
| Deefrex:
--- Цитата: HardWareMan от 13 Ноябрь 2022, 04:47:33 ---А как это соотносится с языком программирования? --- Конец цитаты --- Напрямую. На чём тебя условный ВУЗ научит работать - такую работу тебе потом и искать. --- Цитата: HardWareMan от 13 Ноябрь 2022, 04:47:33 ---Вот в 80х-90 --- Конец цитаты --- Вы ещё 60-е с перфокартами вспомните. --- Цитата: HardWareMan от 13 Ноябрь 2022, 04:47:33 ---Я не говорю про полезность AIMP лично тебе. Я говорю об актуальном продукте, который развивается и имеет своё достаточно большое комьюнити. --- Конец цитаты --- Я рад за большое комьюнити этого продукта, но в 2011 году, при сравнении его с детищами других разработчиков, AIMP в качестве основного плеера я себе почему-то так и не выбрал. Хотя был за него всей душой, когда проходило бета-тестирование 3 версии. Добавлено позже: Короче, кто в лес, кто по дрова, а на основной вопрос никто так и не ответил. |
| HardWareMan:
--- Цитата: Deefrex от 13 Ноябрь 2022, 19:22:02 ---Напрямую. На чём тебя условный ВУЗ научит работать - такую работу тебе потом и искать. --- Конец цитаты --- Вуз даёт удочку, а не рыбу. Допустим, тебя учат на токаря, и делают они это на ТВШ-2 (ТВ-2). Это школьный токарный станок. И что теперь, ты будешь искать работу где используется именно этот станок? А он школьный, на производствах не ставится. Т.е., при виде 16К20 вчерашний студень впадёт в ступор, так что-ли? А ведь ещё есть импортные всякие, от них вообще все волосы выпадут, видимо... --- Цитата: Deefrex от 13 Ноябрь 2022, 19:22:02 ---Вы ещё 60-е с перфокартами вспомните. --- Конец цитаты --- Вспомню. Ада и прочие мёртвые экзотические языки. Ведь посыл был совершенно не тот, который ты озвучиваешь. --- Цитата: Deefrex от 13 Ноябрь 2022, 19:22:02 ---Я рад за большое комьюнити этого продукта, но в 2011 году, при сравнении его с детищами других разработчиков, AIMP в качестве основного плеера я себе почему-то так и не выбрал. Хотя был за него всей душой, когда проходило бета-тестирование 3 версии. --- Конец цитаты --- На кону мочало - начинай с начала. Ещё раз: продукт есть, компьюнити есть. Причём тут понравилось или нет лично тебе? Или именно ты решаешь, быть комьюнити или нет? --- Цитата: Deefrex от 13 Ноябрь 2022, 19:22:02 ---Короче, кто в лес, кто по дрова, а на основной вопрос никто так и не ответил. --- Конец цитаты --- Так, а в чём хоть заключался этот самый пресловутый основной вопрос? |
| Deefrex:
--- Цитата: HardWareMan от 13 Ноябрь 2022, 19:46:55 ---Вуз даёт удочку, а не рыбу. Допустим, тебя учат на токаря, и делают они это на ТВШ-2 (ТВ-2). Это школьный токарный станок. И что теперь, ты будешь искать работу где используется именно этот станок? А он школьный, на производствах не ставится. Т.е., при виде 16К20 вчерашний студень впадёт в ступор, так что-ли? А ведь ещё есть импортные всякие, от них вообще все волосы выпадут, видимо... --- Конец цитаты --- При чём тут токарный станок и язык программирования? Вы вообще куда-то не в ту степь пошли. Уместнее было бы в качестве объекта для сравнения обозначить институт русского языка, в котором тебя зачем-то учат старославянскому. А какая нахуй разница? ВУЗ же только удочку даёт. Ты всё равно потом сможешь юзать синтаксис старославянского в русском. И на самом деле никакую удочку ВУЗ никому не даёт, ВУЗ по его окончанию даёт лишь документ, который ты во время поиска работы при предъявлении в какой-нибудь серьёзной конторе как бы демонстрируешь то, что ты не совсем овощ, и какой-то опыт за плечами у тебя есть. Потому что не каждому может повезти так, как моему знакомому айтишнику с текущей работы. Взамен ВУЗ забирает кучу времени и нервов на изучение того, что тебе в жизни вообще не пригодится, а ещё деньги на распечатку-перепечатку отчётов, которые в электронном варианте преподы ни в какую не хотят принимать. В остальном всё зависит от тебя самого. Ради прикола ещё расскажу, что у меня есть удостоверение о повышении квалификации, выданное мне тем моим колледжем при выпуске, где указано, что я прошёл обучение по профессиональной программе "1С: Управление торговлей"... Хотя посетил я его только 1 раз в начале учебного года и больше туда ни разу не приходил, потому что уже тогда думал, что упаси боже мне столкнуться с 1С в реальной жизни. Это были дополнительные занятия после всех пар и я, как платник, был записан на них автоматически, а бюджетники, кто туда ходил, за них платили. Когда мне выдали это удостоверение - мне было очень смешно. Сам предмет 1С я сдавал зимой в конце семестра так - скачал из интернета файлик со всеми выполненными заданиями и показал его преподу, 5 минут поковырялся в программе по его запросам, получил оценку в зачётку и забыл его как страшный сон. В начале семестра я начинал делать задания на колледжевском компьютере, но потом у нас то был карантин, то я прогуливал, то вообще что-то шло туго, поэтому я в конечном счёте и забил на это безблагодатное дело. Мне эта бухгалтерская среда нафиг не нужна, и я никогда не полезу куда-то на ней работать ни за какие деньги, даже если вмажусь в микрухи и ко мне придут коллекторы с судебными приставами выбивать с меня долги. Ещё ради прикола расскажу, что когда я проходил вступительные экзамены в текущий ВУЗ, то мне женщина, которая принимала листы с решениями, прямо говорила: «Вы не волнуйтесь, конкретно у Вас всё точно будет хорошо с результатами, я в этом даже больше чем уверена». А потом мне сказали, что проходные баллы по математике я всё-таки набрал, - как раз тот самый минимум, что требовался. :D Русский, информатику - больше минимума, точно уже не помню сколько, но за них я и не переживал. Честно, готовился к вступительным, решал тестовые варианты, но математику мало успел повторить. --- Цитата: HardWareMan от 13 Ноябрь 2022, 19:46:55 ---Вспомню. Ада и прочие мёртвые экзотические языки. Ведь посыл был совершенно не тот, который ты озвучиваешь. --- Конец цитаты --- Я понял Ваш посыл, что когда Вы учились в школе - вам преподавали алгоритмы Алгола, о котором сейчас уже вообще редко кто сможет вспомнить. Я когда учился в школе - меня там вообще никакими языками программирования не мурыжили, и на том спасибо той школе. --- Цитата: HardWareMan от 13 Ноябрь 2022, 19:46:55 ---Причём тут понравилось или нет лично тебе? Или именно ты решаешь, быть комьюнити или нет? --- Конец цитаты --- При том, что лично мне этот плеер не нужен, я всем рекомендую foobar2000 и топлю за него больше 10 лет (десктопную версию). Но против комьюнити AIMP ничего не имею. В этом и был мой посыл. |
| HardWareMan:
--- Цитата: Deefrex от 13 Ноябрь 2022, 23:16:49 ---При том, что лично мне этот плеер не нужен, я всем рекомендую foobar2000 и топлю за него больше 10 лет (десктопную версию). Но против комьюнити AIMP ничего не имею. В этом и был мой посыл. --- Конец цитаты --- Давай вспомним как было: 1. Ты выдвигаешь тезис: учить надо на Ц а не Паскале, ведь студеню потом надо искать реальную работу. 2. Я говорю: что Ц не заточен под обучающий процесс, поэтому и Паскаль. Намекая на то, что ВУЗ учит азам программирования и алгоритмам, которые суть общее для всех языков программирования. И можно потом перейти на любой, подучив только синтаксис. 3. Ты говоришь: что сам "писал" диплом на Паскале, но он не нужен. А сестры брат сват знакомый вообще в 18 лет стал айтишником и утверждает, что Паскаль древность и зачем вообще нужны дипломы, если они не дают плюшек? 4. Я говорю: ну популярность Паскаля, безусловно, падает, потому как он уже не модный. Однако, он далеко не бесполезный, в отличии от чисто обучающих языков, вроде Алгола. И привожу пример с АИМПом. 5. Ты заявляешь: участвовал в бетатесте АИМПа и тебе не понравилось, Фубар2000 лучше. 6: Я не понимаю: причём тут твоя личная вкусовщина, если изначально была речь за актуальность языка программирования и что существуют вполне успешные продукты, сделанные на Делфи? *** Тут другие участники накидывают ещё названия других актуальных продуктов, написанных на Дельфи *** 7: Ты заявляешь: я рад за АИМП, но мне он не нравится. Фубар2000 лучше. И вообще, основной вопрос так и не раскрыт. 8: Я говорю: посыл про АИМП был в другом и твоя личная вкусовщина тут никаким боком. 9: Ты опять заявляешь: Я топлю за Фубар2000, вот мой посыл. Ну а дальше круг замкнулся на 6й пункт. Ты можешь осознать, что в этом диалоге пошло не так? Ну или хотя-бы попытаться. Ведь учитывая всю ту информацию о том как ты учился, которой ты сам любезно поделился, я делаю вывод, что подобное мышление для тебя нормально и ты вряд-ли осознаешь, где ошибка. |
| Deefrex:
HardWareMan Я ещё выше писал, что... --- Цитата: Deefrex от 12 Ноябрь 2022, 23:15:41 ---если человека прёт и он действительно того хочет (как сейчас в моём случае) - он с любым языком на начальном этапе подружится. Главное, чтобы он ему после получения диплома пригодился. --- Конец цитаты --- Который полностью ломает Ваш стереотип о том, что Ц не заточен под обучение. Как ломает этот стереотип и то, что на старших курсах Ц всё-таки преподают. :lol: А если российская система образования не хочет меняться с советских времён - это как бы уже не студента проблемы. |
| HardWareMan:
--- Цитата: Deefrex от 14 Ноябрь 2022, 17:14:52 ---HardWareMan Я ещё выше писал, что... Который полностью ломает Ваш стереотип о том, что Ц не заточен под обучение. Как ломает этот стереотип и то, что на старших курсах Ц всё-таки преподают. :lol: --- Конец цитаты --- И как же именно он ломает то? Какой из языков human-friendly: который использует понятные человеку слова или непонятные закорючки? Это ладно русскоговорящие могут тупить в обоих языках, а, например, англоговорящие и паскаль и тот же бейсик просто прочитают и поймут что там и как. Но с Ц так не получится. Что касается "прёт", ну дык изучи brainfuck и используй себе на здоровье! Но 95% студентов не будут испытывать никакой "прухи" даже с паскалем или бейсиком. PS А, ещё забыл. Паскаль и Бейсик защищают переменные. Там не просто выстрелить себе в ногу. А на Ц стреляют даже в Hello World больше половины студеней. И я это видел лично. |
| Deefrex:
--- Цитата: HardWareMan от 14 Ноябрь 2022, 20:29:54 ---Что касается "прёт", ну дык изучи brainfuck и используй себе на здоровье! --- Конец цитаты --- Зачем его учить, если он нигде в коммерческой деятельности не используется. Ради прикола? --- Цитата: HardWareMan от 14 Ноябрь 2022, 20:29:54 ---Но 95% студентов не будут испытывать никакой "прухи" даже с паскалем или бейсиком. --- Конец цитаты --- Значит это не их ремесло (или пока ещё не их). Всё просто. По статистике, в том ВУЗ'е, куда я сейчас поступил, новые очные группы кафедры "Информационные системы и программная инженерия" в последние годы в среднем после первого же семестра сокращаются с 24 человек до 6 (официальная инфа из приёмной комиссии). --- Цитата: HardWareMan от 14 Ноябрь 2022, 20:29:54 ---А на Ц стреляют даже в Hello World больше половины студеней. И я это видел лично. --- Конец цитаты --- После перехода на Ц с Паскаля? Возможно. В общем, мне уже, если честно, надоел этот безблагодатный спор, поэтому засим откланиваюсь. Добавлено позже: --- Цитата: Deefrex от 10 Ноябрь 2022, 17:19:30 ---на XP уже может подлагивать (например, отображать 2 курсора). --- Конец цитаты --- Я сегодня разобрался, почему у меня в Windows XP при запуске Borland Pascal дублировался курсор. Я это всё запускал в VirtualBox. Собственно, если такое происходит, то в виртуалке с большой долей вероятности окно с системой развёрнуто на весь экран и включена интеграция мыши. Проблема полностью решается перед запуском Borland Pascal сворачиванием окна системы до стандартного разрешения, изначально заданного виртуальной машиной, и отключением этой самой интеграции мыши (в нижней панели окна системы / через меню "Ввод" -> "Интеграция мыши"). Добавлено позже: Добавил инфу в пост со ссылками на среду: https://www.emu-land.net/forum/index.php/topic,33894.msg1541980.html#msg1541980 |
| MaxWooD:
--- Цитата: Deefrex от 13 Ноябрь 2022, 19:22:02 ---Напрямую. На чём тебя условный ВУЗ научит работать - такую работу тебе потом и искать. --- Конец цитаты --- Печально, что 90% студентов ожидают после вуза место работы, ничего не делая в процессе обучения. Эпоха СССР ушла, когда тебя после вуза устраивали с знаниями полученными в УЗ на место работы. Сейчас другие времена, знания, опыт и место работы нужно получать в процессе обучения в УЗ, и после выпуска проблем с трудоустройством не будет. HardWareMan, практически прав во всем ;) Обучение в ВУЗ дает тебе инструменты для возможности освоить будущую проффесию. Хочешь работать сразу после обучения, тогда просто нужно получить рабочую профессию - велкам то ПТУ и техникум. Паскаль - это базовый инструмент для обучения программированию. После его изучения, тебе будет доступен любой язык программирования. А дальше уже совершенствование навыков. |
| Rumata:
--- Цитата: MaxWooD от 15 Ноябрь 2022, 01:31:40 ---Эпоха СССР ушла --- Конец цитаты --- , а люди остались. ВУЗ был автоматическим продолжением школы. Если работать не хочешь и не умеешь, то куда? В институт. А там распределят куда-нибудь и будешь на 120 руб. штаны просиживать. Зато все счастливы: наша деточка на фортепьянах в институтах училась. Нет, были идейные, которые шли на конкретную специальность. Но в итоге по специальности работало процентов 20. --- Цитата: MaxWooD от 15 Ноябрь 2022, 01:31:40 ---Сейчас другие времена, знания, опыт и место работы нужно получать в процессе обучения в УЗ, и после выпуска проблем с трудоустройством не будет. --- Конец цитаты --- Да всё тоже самое. Знания получал тот, кто хотел. Остальные получали корочки. Это касается и школы, кстати. Я до сих пор офигиваю от количества людей, не знающих элементарных вещей из курса средней школы. Ах да, это же в жизни не пригодится. Что сейчас, что тогда диплом не является критерием чего-либо. Если у человека есть диплом, то это значит, что у человека есть диплом. Больше ничего. И кстати, очень наивно думать, что ВУЗ вот так даст тебе знания, которыми ты пользоваться всю оставшуюся жизнь. ВУЗ должен дать базис и методику. А дальше сам. Как говорится, специалист не тот, кто всё знает, а тот, кто знает, как это узнать. |
| HardWareMan:
--- Цитата: Deefrex от 14 Ноябрь 2022, 20:59:41 ---После перехода на Ц с Паскаля? Возможно. --- Конец цитаты --- Не только. И при первичном изучении тоже. А потом многие психуют и бросают его изучать. |
| supremacy:
Мне кажется нет ни одного программиста который научился программированию на занятиях в ВУЗе, чаще всего это самостоятельное изучение языка. Если ты осознано пошёл учится на ИТ специальность, то ты уже умеешь программировать, и всё обучение сводится к сдаче лабораторных. Те, кому это не интересно просто искали готовые лабы и сдавали их не разбираясь в этом. Так что язык обучения не важен. У нас в универе давали фортран, потом си. При том что я со школы знал бейсик и паскаль, вообще никаких проблем не испытывал, пролистал учебник, нашёл все аналогичные конструкции и написал все лабы сразу. Это ещё тогда когда интернет был далеко не у всех и найти ответ по программированию на yahoo, astalavista и rambler было тяжело. Это сейчас по любому вопросу есть ответ на stack overflow, было бы желание его поискать... |
| HardWareMan:
--- Цитата: supremacy от 15 Ноябрь 2022, 17:12:02 ---astalavista --- Конец цитаты --- altavista. Домен всё ещё существует, но ведёт на yahoo. |
| MaxWooD:
--- Цитата: Rumata от 15 Ноябрь 2022, 02:18:11 ---ВУЗ должен дать базис и методику. А дальше сам --- Конец цитаты --- :thumbup: |
| Werton:
--- Цитата: HardWareMan от 15 Ноябрь 2022, 17:53:47 ---altavista. Домен всё ещё существует, но ведёт на yahoo. --- Конец цитаты --- Тоже взглядом зацепился и завис, думаю astalavista это же искалка кряков и серийников была, как он там ответы по программированию искал :lol: |
| supremacy:
Я уже и забыл, что был поисковик кряков, но название где-то в памяти засело. Действительно altavista. Хотя раньше и мысли не было искать что-то по программированию, форумов было меньше и находились, в основном, домашние странички и текстовые мануалы, может ещё faq с bbs. |
| HardWareMan:
--- Цитата: Werton от 16 Ноябрь 2022, 01:41:14 ---Тоже взглядом зацепился и завис, думаю astalavista это же искалка кряков и серийников была, как он там ответы по программированию искал :lol: --- Конец цитаты --- Мы сидели на serials.ws, там было всё! Даже тектосвые ключики. Но сам сайт, по понятным причинам, был весь завирусован. И мы как спецназ-ниндзи, обвешавшись всякими блокировщиками и вырезателями скриптов, шастали и вытаскивали самое вкусное, в том числе и на заказ... Эх, было время, в 2023 году уже 20 лет будет... |
| Deefrex:
Господа паскальщики, есть проблемка. Имеется файл pas (который должен создать unit), в котором прописан ассемблерный код. Оригинальный 16-битный Borland Pascal его нормально обрабатывает, а вот 32-битный нет - обработка останавливается как раз на том месте, где этот ассемблерный код начинается. Выделил его красным в коде. unit TpInline; {-Assorted inline macros} interface type JumpRecord = record SpReg, BpReg : Word; JmpPt : Pointer; end; procedure SetJump(var JumpDest : JumpRecord); {-Save current SP, BP, and a jump destination} inline( $5F/ {pop di ;di = Ofs(JmpDest)} $07/ {pop es ;es = Seg(JmpDest)} $26/$89/$25/ {mov es:[di],sp ;save sp} $26/$89/$6D/$02/ {mov es:[di+2],bp ;save bp} $E8/$00/$00/ {call null ;push IP onto stack} {null:} $58/ {pop ax ;pop into ax} $05/$0C/$00/ {add ax,12 ;point to "next:"} $26/$89/$45/$04/ {mov es:[di+4],ax ;save jump offset} $26/$8C/$4D/$06); {mov es:[di+6],cs ;save jump segment} {next:} procedure LongJump(var JumpDest : JumpRecord); {-Restore SP, BP, and jump to JumpDest.JmpPt} inline( $5F/ {pop di ;di = Ofs(JumpDest)} $07/ {pop es ;es = Seg(JumpDest)} $26/$8B/$25/ {mov sp,es:[di] ;restore sp} $26/$8B/$6D/$02/ {mov bp,es:[di+2] ;restore bp} $26/$FF/$6D/$04); {jmp far es:[di+4] ;jump far to JumpDest.JmpPt} procedure FarCall(ProcAddr : Pointer); {-ProcAddr is the address of a routine to be called far. Can be used to implement jump tables if procedures take no parameters.} inline( $89/$E3/ {mov bx,sp} $36/$FF/$1F/ {call far dword ptr ss:[bx]} $81/$C4/$04/$00); {add sp,4} procedure NearCall(ProcOfs : Word); {-ProcOfs is the offset of a routine to be called near.} inline( $5B/ {pop bx} $FF/$D3); {call bx} procedure JumpToOldIsr(OldIsr : Pointer); {-Jump to previous ISR from an interrupt procedure.} inline( $5B/ {pop bx ;BX = Ofs(OldIsr)} $58/ {pop ax ;AX = Seg(OldIsr)} $87/$5E/$0E/ {xchg bx,[bp+14] ;Switch old BX and Ofs(OldIsr)} $87/$46/$10/ {xchg ax,[bp+16] ;Switch old AX and Seg(OldIsr)} $89/$EC/ {mov sp,bp ;Restore SP} $5D/ {pop bp ;Restore BP} $07/ {pop es ;Restore ES} $1F/ {pop ds ;Restore DS} $5F/ {pop di ;Restore DI} $5E/ {pop si ;Restore SI} $5A/ {pop dx ;Restore DX} $59/ {pop cx ;Restore CX} {;BX and AX restored earlier; their places on stack} {;now have OldIsr, which is where return will go} $CB); {retf ;Chain to OldIsr} procedure CallOldIsr(OldIsr : Pointer); {-Call previous ISR from an interrupt procedure. Destroys BX.} inline( $89/$E3/ {mov bx,sp ;set up stack frame} $9C/ {pushf ;push flags to simulate int} $36/$FF/$1F/ {call far ss:[bx] ;call OldIsr} $81/$C4/$04/$00); {add sp,4 ;get rid of OldIsr} {$IFDEF StonyBrook} {!!.02} function HiWord(L : LongInt) : Word [ALTERS(AX)]; {!!.02} {$ELSE} {!!.02} function HiWord(L : LongInt) : Word; {$ENDIF} {!!.02} {-Return high-order word of L} inline( $58/ {pop ax ;ignore low word} $58); {pop ax ;pop high word into AX} {$IFDEF StonyBrook} {!!.02} function LoWord(L : LongInt) : Word [ALTERS(AX, DX)]; {!!.02} {$ELSE} {!!.02} function LoWord(L : LongInt) : Word; {$ENDIF} {!!.02} {-Return low-order word of L} inline( $58/ {pop ax ;pop low word into AX} $5A); {pop dx ;ignore high word} {$IFDEF StonyBrook} {!!.12} function SwapNibble(B : Byte) : Byte [ALTERS(AX, CX)]; {!!.12} {$ELSE} {!!.12} function SwapNibble(B : Byte) : Byte; {$ENDIF} {!!.12} {-Swap the high and low nibbles of B: SwapNibble($F0) returns $0F.} inline( $58/ {pop ax} $B1/$04/ {mov cl,4} $D2/$C8); {ror al,cl} {$IFDEF StonyBrook} {!!.12} function SwapWord(L : LongInt) : LongInt [ALTERS(AX, DX)]; {!!.12} {$ELSE} {!!.12} function SwapWord(L : LongInt) : LongInt; {$ENDIF} {!!.12} {-Swap low- and high-order words of L} inline( $5A/ {pop dx ;pop low word into DX} $58); {pop ax ;pop high word into AX} {$IFDEF StonyBrook} {!!.12} function Normalized(P : Pointer) : Pointer [ALTERS(AX,BX,CX,DX)]; {!!.12} {$ELSE} {!!.12} function Normalized(P : Pointer) : Pointer; {$ENDIF} {!!.12} {-Return P as a normalized pointer} inline( $58/ {pop ax ;pop offset into AX} $5A/ {pop dx ;pop segment into DX} $89/$C3/ {mov bx,ax ;BX = Ofs(P^)} $B1/$04/ {mov cl,4 ;CL = 4} $D3/$EB/ {shr bx,cl ;BX = Ofs(P^) div 16} $01/$DA/ {add dx,bx ;add BX to segment} $25/$0F/$00); {and ax,$F ;mask out unwanted bits in offset} {$IFDEF StonyBrook} {!!.12} procedure SetFlag(var Flags : Word; FlagMask : Word) [INLINE]; {!!.12} begin {!!.12} Flags := Flags OR FlagMask; {!!.12} end; {!!.12} {$ELSE} {!!.12} procedure SetFlag(var Flags : Word; FlagMask : Word); {-Set the bit(s) specified by FlagMask in Flags} inline( $58/ {pop ax ;FlagMask into AX} $5F/ {pop di} $07/ {pop es ;ES:DI => Flags} $26/$09/$05); {or es:[di],ax ;Flags := Flags or FlagMask} {$ENDIF} {!!.12} {$IFDEF StonyBrook} {!!.12} procedure ClearFlag(var Flags : Word; FlagMask : Word)[INLINE]; {!!.12} begin {!!.12} Flags := Flags and (not FlagMask); {!!.12} end; {!!.12} {$ELSE} {!!.12} procedure ClearFlag(var Flags : Word; FlagMask : Word); {-Clear the bit(s) specified by FlagMask in Flags} inline( $58/ {pop ax ;FlagMask into AX} $5F/ {pop di} $07/ {pop es ;ES:DI => Flags} $F7/$D0/ {not ax ;AX := not AX} $26/$21/$05); {and es:[di],ax ;Flags := Flags and not FlagMask} {$ENDIF} {!!.12} {$IFDEF StonyBrook} {!!.12} function FlagIsSet(Flags, FlagMask : Word) : Boolean [INLINE]; {!!.12} begin {!!.12} FlagIsSet := (FlagMask and Flags) <> 0; {!!.12} end; {!!.12} {$ELSE} {!!.12} function FlagIsSet(Flags, FlagMask : Word) : Boolean; {-Returns True if the bit specified by FlagMask is set in Flags} inline( $5A/ {pop dx ;FlagMask into DX} $58/ {pop ax ;Flags into AX} $21/$D0/ {and ax,dx ;Mask out everything not in FlagMask} $74/$03/ {jz Exit} $B8/$01/$00); {mov ax,1 ;AX = Ord(True)} {Exit:} {$ENDIF} {!!.12} procedure ExchangeBytes(var I, J : Byte); {-Exchange bytes I and J. Useful in sorts} inline( $8C/$DB/ {mov bx,ds ;save DS} $5E/ {pop si} $1F/ {pop ds ;DS:SI => J} $5F/ {pop di} $07/ {pop es ;ES:DI => I} $8A/$04/ {mov al,[si] ;AL = J} $26/$86/$05/ {xchg al,es:[di] ;I = J, AL = I} $88/$04/ {mov [si],al ;J = I} $8E/$DB); {mov ds,bx ;restore DS} procedure ExchangeWords(var I, J : Word); {-Exchange words I and J. Useful in sorts} inline( $8C/$DB/ {mov bx,ds ;save DS} $5E/ {pop si} $1F/ {pop ds ;DS:SI => J} $5F/ {pop di} $07/ {pop es ;ES:DI => I} $8B/$04/ {mov ax,[si] ;AX = J} $26/$87/$05/ {xchg ax,es:[di] ;I = J, AX = I} $89/$04/ {mov [si],ax ;J = I} $8E/$DB); {mov ds,bx ;restore DS} procedure ExchangeStructs(var I, J; Size : Word); {-Exchange structures I and J. Useful in sorts} inline( $FC/ {cld ;go forward} {!!.08} $8C/$DA/ {mov dx,ds ;save DS} $59/ {pop cx ;CX = Size} $5E/ {pop si} $1F/ {pop ds ;DS:SI => J} $5F/ {pop di} $07/ {pop es ;ES:DI => I} $D1/$E9/ {shr cx,1 ;move by words} $E3/$0C/ {jcxz odd} $9C/ {pushf} {start:} $89/$F3/ {mov bx,si} $26/$8B/$05/ {mov ax,es:[di] ;exchange words} $A5/ {movsw} $89/$07/ {mov [bx],ax} $E2/$F6/ {loop start ;again?} $9D/ {popf} {odd:} $73/$07/ {jnc exit} $8A/$04/ {mov al,[si] ;exchange the odd bytes} $26/$86/$05/ {xchg al,es:[di]} $88/$04/ {mov [si],al} {exit:} $8E/$DA); {mov ds,dx ;restore DS} {$IFDEF StonyBrook} {!!.12} function MinWord(A, B : Word) : Word [ALTERS(AX, BX)]; {!!.12} {$ELSE} {!!.12} function MinWord(A, B : Word) : Word; {$ENDIF} {!!.12} {-Returns the smaller of A and B} inline( $58/ {pop ax} $5B/ {pop bx} $39/$C3/ {cmp bx,ax} $73/$02/ {jae done} $89/$D8); {mov ax,bx} {done:} {$IFDEF StonyBrook} {!!.12} function MaxWord(A, B : Word) : Word [ALTERS(AX, BX)]; {!!.12} {$ELSE} {!!.12} function MaxWord(A, B : Word) : Word; {$ENDIF} {!!.12} {-Returns the greater of A and B} inline( $58/ {pop ax} $5B/ {pop bx} $39/$C3/ {cmp bx,ax} $76/$02/ {jbe done} $89/$D8); {mov ax,bx} {done:} procedure FillWord(var Dest; Count, Filler : Word); {-Fill memory starting at Dest with Count instances of Filler} inline( $58/ {pop ax ;AX = Filler} $59/ {pop cx ;CX = Count} $5F/ {pop di ;ES:DI => Dest} $07/ {pop es} $FC/ {cld ;go forward} $F2/$AB); {rep stosw ;fill memory} procedure FillStruct(var Dest; Count : Word; var Filler; FillerSize : Word); {-Fill memory starting at Dest with Count instances of Filler} inline( $58/ {pop ax ;AX = FillerSize} $5B/ {pop bx ;DX:BX => Filler} $5A/ {pop dx} $59/ {pop cx ;CX = Count} $5F/ {pop di ;ES:DI => Dest} $07/ {pop es} $E3/$11/ {jcxz done ;done if Count = 0} $FC/ {cld ;go forward} $1E/ {push ds ;save DS} $8E/$DA/ {mov ds,dx ;DS:BX => Filler} {again:} $89/$CA/ {mov dx,cx ;save loop count} $89/$DE/ {mov si,bx ;DS:SI => Filler} $89/$C1/ {mov cx,ax ;CX = FillerSize} $F2/$A4/ {rep movsb ;fill} $89/$D1/ {mov cx,dx ;restore loop count} $E2/$F4/ {loop again ;repeat} $1F); {pop ds ;restore DS} {done:} {==========================================================================} implementation end. Пару лет назад спрашивал здесь, как его в итоге обработать: https://forum.lazarus.freepascal.org/index.php/topic,51989.0.html Там мне дали ответ: FPC does not support TP's Inline intrinsic. You need to convert it to full blown inline assembly. Essentially you should be able to simply take the comments at the right and copy that into asm … end blocks in the implementation section for each function and add the directives assembler; nostackframe; to the declarations in the interface section. Please note however that these routines are only useful if you use FPC's i8086-msdos or i8086-win16 targets. For other targets you need to replace them (and even for the mentioned targets it's more portable if you do so), for example with Pascal code (e.g. for FlagIsSet) or by calls to existing functions (e.g. SetJump and LongJump are provided by FPC as are replacements for HiWord, LoWord or SwapWord). Нашёл похожий пример здесь: http://www.freepascal.ru/forum/viewtopic.php?f=1&t=11774#p103463 Сделал по аналогии - всё равно ругается. Если прописываю: assembler; nostackframe; - компилятор в итоге ругается на nostackframe и дальше не идёт. P.S. TPINLINE - модуль (unit) из библиотеки Turbo Professional от TurboPower Software, который необходим для компиляции одной программки. https://forum.sources.ru/index.php?showtopic=14916 Я 2 года назад как-то делал, что 32-битный компилятор этот ассемблерный код в итоге обработал. Но как - уже выветрилось из головы. Тогда очень долго с этим сидел. Даже пробовал другие 32-битные компиляторы (Virtual Pascal, GNU Pascal - все стопарились при обработке на этом месте). Сегодня ночью опять на этом моменте застрял. Сейчас на ближайшие 12 часов выдвигаюсь на работу. Вечером приеду - ещё посижу. Такому меня в моём бывшем колледже не учили. :D И да, работаю на ВМ с 32-битной Windows XP. Компилятор вот этой версии: https://www.freepascal.org/down/i386/win32.html |
| HardWareMan:
--- Цитата ---TPLINE.PAS(28,1) Fatal: Syntax error, "IMPLENETATION" expected but "ASM" found. --- Конец цитаты --- Т.е., оформить юнит согласно правилу синтаксиса религия не позволяет? Ну тогда ищи версию, которая поддерживает описание тела функций до IMPLEMENTATION. |
| Deefrex:
HardWareMan, спасибо. Не разбирался пока. Дошёл до этого шага и начал собираться на работу. В Паскале до этого 2 года не работал. |
| Deefrex:
HardWareMan, вроде разобрался. Но всё равно на том форуме мне как-то не совсем корректно объяснил человек. В итоге я сейчас в области interface должен перечислить все не только функции, но и процедуры, участвующие в юните (местами с assembler и nostackframe, где они нужны), а область implementation поднять наверх и в ней все эти процедуры и функции с их телами грамотно оформить. |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |