-=RUS=- | Дата: Пятница, 24.10.2014, 00:49 | Сообщение # 1 |
 Генералиссимус
Группа: Администраторы
Сообщений: 352
Статус: Offline
| (Help Info-2)
SortSoft corp. presents
││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││ ║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║
███ ███ ███ ██ ███ █▓▓ █▓▓ █▓▓ █ ▓█ █ ▓▓█ █▓ █▓ ██████ ███ █████ █▓ █████ ███ ▓███ ▓ █▓ █████▓ █▓▓▓█▓ █▓▓ █▓▓▓█ █▓ █▓▓▓█ █▓▓ █ ▓▓█ ██ ▓ █▓▓▓█▓ ███ ▓ █▓ █▓ █▓ █▓ █▓ █▓ █▓ █▓ █▓███ █ ▓▓ █▓ █▓ █▓▓▓█ █▓ █ █▓ █▓ █▓ █▓ █▓ █▓ █▓ █▓ ▓▓▓█ ▓ ███ ███ ██████▓██████▓████ ▓ ███ ███ ███ ███ ███ ▓ █████ ▓▓▓ ▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓█▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓▓▓ ███ Helping Information ▓▓▓ номер 2 14 декабря 1993
║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║║ ││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││
┌───────────────────────────────────────────────────────────┐ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓> В номере <▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│ │▓┌─────────────────────── Новости ───────────────────────┐▓│ │▓│■ Маленькие новости. │▓│ │▓│■ Немного о графике. │▓│ │▓┌────────────────────── Ассемблер ──────────────────────┐▓│ │▓│■ Немного об арифметике. │▓│ │▓│■ Подпрограммы с параметрами. │▓│ │▓│■ TRAP-подпрограммы. │▓│ │▓│■ Сохранение регистров. │▓│ │▓┌───────────────── Полезная информация ─────────────────┐▓│ │▓│■ TURBO6M : что нового? │▓│ │▓┌─────────────────────── Реклама ───────────────────────┐▓│ │▓└───────────────────────────────────────────────────────┘▓│ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│ └───────────────────────────────────────────────────────────┘
Вступление. ═══════════
К величайшему сожалению первый номер HelpInfo, явился неким "первым блином комом". Причем комочек получился более чем боль- шим и с шумом рухнул мне на голову... Ну ладно - "Кто старое помянет ..."
═══════════════════════════ Новости ════════════════════════════ └───────┘
┌────── │ Подготавливается к выпуску новая версия издательской системы VorteX! v2.0 . Хотя стоит оговориться, что у некоторых людей давно уже есть версия VorteX!-а с исправленными ошибками, но вторая версия обещает быть более мощной чем предыдущая. Однако мечта о возможности работы со спрайтами в издательской системе пока не осуществлена. ┌────── │ Уже закончена система печати текстов SSS corp. (Камнев) - COMFORT, говорят, что это более чем круто. ┌────── │ Один хороший человек (естественно не без помощи авторов) по- мышляет сделать систему проверки лексики русского языка под VorteX!. Идея конечно более чем грандиозная, помотрим ...
Немного о графике. ══════════════════
Да, с графическими редакторами на БКшке проблема, такая же как с операционками - ИХ МНОГО, И У КАЖДОЙ СВОИ НЕДОСТАТКИ ! На БКшке существует около десятка операционок и каждая имеет свои минусы и плюсы. Так и с графическими редакторами. В одном хорошо работает линза, но плохо графпримитивы (окружности, пря- моугольники, резиновые линии), в другом удобный интерфейс но не цветная графика, и т.д. Вот сравнительно недавно в Москве появился новый граф. редак- тор ASE10D, и действительно он имеет некоторые совершенно новые функции, и действительно у него развитая система меню, но госпо- да отрисовывать окружности по одной точке это просто пошло. Да, кстати об окружностях, должен сказать, что лично я пользуюсь в основном граф. редактором SCREDIT, и он например отрисовывает окружности очень быстро. Да у него мало функций, но это тот са- мый необходимый минимум: линза - есть, линии, окружности - есть, чтение, запись - есть, окраска области 4-я цветами - есть. Но мне правда не хватает окраски ди-цветом (разноцветные точки в шахматном порядке), и кое чего ещё. Под такой шаблон подходят все существующие редакторы: одно есть, другого нет. Я начал заниматься проблемой графики и если у кого-то есть интересные идеи, то будьте так добры, позвоните мне!
391-86-98 позвать Тимофея
Звонить с 19-30 до 22-00 !!!
══════════════════════════ Ассемблер ═══════════════════════════ └─────────┘
Немного об арифметике. ══════════════════════
Довольно часто в программах требуется выполнить операцию ум- ножения или деления, это можно делать с помощью арифметики дос- тупной в TURBO5, TURBO6М, но если вам надо сделать эту операцию всего один раз, тогда лучше писать не универсальную подпрограмму (П/П) умножения или деления, а сделать её для данной ситуации... Всем известно, что умножить на два можно командой ASL xx, а разделить на два - ASR xx. Используя эти команды, а так же ко- манды сложения и вычитания можно производить действия и с други- ми числами. Для примера приведу подпрограмму умножения числа в R0 на 13:
MUL13: MOV R0,-(SP) ; R0=X, в стеке - X ASL R0 ; R0=2*X ADD (SP),R0 ; R0=3*X ASL R0 ; R0=6*X ASL R0 ; R0=12*X ADD (SP)+,R0 ; R0=13*X
Конечно этот способ применим только когда надо умножить на постоянное число (13).
Подпрограммы с параметрами. ═══════════════════════════
Существует множество возможностей передачи параметров в под- программу. Самый простой - через регистры, этот способ хорош тем, что можно легко изменять эти параметры и передавать управ- ление на П/П. Есть так же и другие варианты передачи параметров (через заранее условленные ячейки, через стек и т.д.), я же рас- скажу о способах получивших на БК в последнее время широкое рас- пространение... После команды передающей управление на П/П следуют данные ко- торые требуется передать в неё. Примером может служить П/П пере- мещаемого вывода текста.
Форма обращения к П/П:
............. JSR R1,TXT .ASCIZ /Перемещаемый вывод текста.../ .EVEN .............
TXT: MOVB (R1)+,R0 ;Взять очередной код BEQ 1$ ;Если ноль то конец строки EMT 16 ;Вывод символа BR TXT ;Продолжить вывод строки 1$: INC R1 ;Округление R1 до чётного числа ASL R1 ASR R1 RTS R1 ;Возврат на следующую после ;текста команду
При исполнении выше указанной команды (JSR R1,TXT) происходит запоминание в R1 адреса следующей команды (т.е. начало текста), далее происходит исполнение соответствующей П/П, по окончании вывода текста (нахождение кода 0) R1 уже содержит адрес, следу- ющего за кодом 0, байта и после приведения его к чётному проис- ходит исполнение команды RTS R1, которая заносит содержимое R1 в PC, таким образом происходит переход на команду следующую за текстом. Таким же образом можно передавать не только текст, но и дан- ные. Например если перед меткой TXT вставить следующие строки:
ATXT: MOV (R1)+,@#160 CLR @#156
то при форме обращения
JSR R1,ATXT .WORD 40000 .ASCIZ /Адресованный вывод строки./ .EVEN
будет вначале устанавливаться курсор на указанный адрес (.WORD 40000), а уже потом выводиться текст. Ещё более удобно работать таким же образом с TRAP-командами. Именно так обращается к примеру Disk XEROX к интерфейсным П/П. Так можно передавать данные не только по 34 вектору (вектор TRAP-прерываний) но и по всем остальным. На пример в сервисной оболочке Disk MASTER очень активно используется прерывание по 10 вектору (неправильная команда). Должен правда напомнить, что для этого надо писать соответствующий диспетчер (об этом рассказано ниже).
TRAP-подпрограммы. ══════════════════
При выполнении машинной инструкции TRAP происходит програм- мное прерывание по вектору с адресом 34: текущее слово состояния процессора PS и счетчик инструкций PC запоминаются в стеке; но- вое PS берётся из слова с адресом 36, а новое PC - из слова- 34. Таким образом, управление передаётся на программу обработки пре- рываний (диспетчер). Возврат управления в вызывающую программу производится по команде RTI, восстанавливаются прежние PC и PS из стека. Параметры в подпрограмму, вызванную TRAP-ом, могут переда- ваться любым из уже упомянутых способов. Младший байт TRAP-команды используется для указания к какой П/П следует обращаться. Для обслуживания такого прерывания нужен TRAP-диспетчер:
TRAPS: MOV R4,-(SP) ; MOV R5,-(SP) ;Сохранение регистров JSR R4,@#110346 ; MOV 14(SP),R0 ;Адрес следующего за TRAP-ом ;слова MOV -(R0),R0 ;Код TRAP-команды в R0 BIC #177400,R0 ;Выделить мл. байт ASL R0 ;Получить смещение по таблице CALL @DATA(R0) ;Вызов нужной П/П JSR R4,@#110362 ; MOV (SP)+,R5 ;Восстановление регистров MOV (SP)+,R4 ; RTI ;Возврат из прерывания DATA: .WORD SUBR0 ;Адрес первой П/П .WORD SUBR1 ;Адрес второй П/П .WORD SUBR2 ;Адрес третьей П/П ....... SUBR0: ... ; RETURN ;Собственно SUBR1: ... ;сами RETURN ;подпрограммы SUBR2: ... ; RETURN ;
Обращение к этим П/П производится командой
TRAP n
где n - номер нужной подпрограммы.
Следует заметить, что в приведённом мной диспетчере для сох- ранения и восстановления регистров используются подпрограммы Мо- нитора, а т.к. к ним идёт обращение через R4 то в ходе исполне- ния П/П вызываемых через TRAP не следует в них использовать R4 (если хотите можете его в начале подпрограмм сохранять, а в кон- це восстанавливать). Для тех кто работает с нормальным Ассемблером (ряда TURBO или MACRO) можете номерам этих самых подпрограмм "дать имена". Для этого в начале вашей программы присвойте переменной номер соот- ветствующей П/П:
PRINT=1
После этого можно обращаться к TRAP-подпрограммам (разумеется только к тем которые были определены) более удобочитаемым спосо- бом:
TRAP PRINT
При трансляции эта строка будет приниматься как TRAP 1.
О сохранении регистров. ═══════════════════════
При использовании подпрограмм как правило приходится в начале П/П сохранять, а в конце восстанавливать регистры. Если это час- то приходится делать то лучше обращаться к П/П сохранения регис- тров. Они могут сохранять и не все регистры. К примеру в Монито- ре такие П/П (JSR R4,@#110346 - сохранение R0-R4, JSR R4,@#110362 - восстановление R0-R4) имеют некоторые недостатки: не сохранение/восстановление R5, в ходе исполнения П/П после сохранения и до восстановления нельзя использовать R4.
Кстати следует показать как работает команда JSR:
1. Содержимое используемого в команде регистра (регистр воз- врата) сохраняется в стеке Rx → -(SP);
2. Адрес слова, следующего за командой, заносится в регистр возврата PC → Rx;
3. Адрес подпрограммы заносится в PC.
Окончание выполнения П/П вызванной таким образом следует осуществить командой RTS Rx которая занесёт содержимое регистра возврата в PC и восстановит Rx из стека.
Ну ладно, я что-то отвлёкся...
Существует ещё один экзотический способ сохранения регистров:
SAVE05: MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) CALL (R0) L4: MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 L5: RETURN
Формат вызова этой подпрограммы такой:
JSR R0,SAVE05
Примером использования этой П/П может служить последователь- ность:
....... CALL SUBR2 ;Вызов подпрограммы L1: ....... SUBR2: JSR R0,SAVE05 ;Сохранение регистров L2: ....... RETURN ;Выход из П/П с восстановлением ;регистров
При вызове П/П SUBR2 в вершине стека записан адрес возврата. Первая команда подпрограммы производит обращение к SAVE05. При этом в стек заносится содержимое регистра R0, а в регистр запи- сывается адрес возврата. Далее в стек заносится содержимое ре- гистров от 1-5 и производится обращение к П/П (метка L3) по ад- ресу, находящемуся в R0, т.е. передаётся управление на метку L2, а в стек заносится адрес возврата. При выполнении в программе SUBR2 инструкции RETurn управление передаётся на метку L4 и про- исходит восстановление регистров R0-R5. После этого в вершине стека находится адрес L1 и по команде RETurn из подпрограммы SAVE05 управление возвращается в вызвавшую программу. Следует отметить, что если вам нужно передать в П/П, исполь- зующую такой способ сохранения регистров, какое либо число в R0 то подпрограмма должна брать его из 14(SP), т.к. R0 будет из- менён при обращении к SAVE05.
Ну вот пожалуй, и всё про ассемблер. Ждите следующего номера.
═════════════════════ Полезная информация ══════════════════════ └───────────────────┘
TURBO6M: что нового? ════════════════════
Предназначается тем у кого таковой имеется и кто им пользует- ся, а не тем извращенцам которые пишут свои программы в отладчи- ках (есть и такие). В очередной доработке ассемблера - TURBO6M, сделанной Миха- илом Королёвым, существуют следующие отличия от TURBO5.
Новые команды
CE - ввод ключевой последовательности, запускается по АР2/1 (где символ "_" заменяет ◄─┘); OT - оптимизатор ассемблерного текста; TT - вывод таблицы меток; PT - вывод таблицы меток на принтер; LL - подгрузка библиотеки (прилинковать метку); LM - подгрузка массива (данные, графика, музыка); CL - сокращённая трансляция, метки не выдаются.
Макрокоманда .PRINT
Вывод текста (фактическая замена на последовательность команд MOV #xx,R1 ... CLR R2 ... EMT 20 ).
Формат команды:
.PRINT xx
Где вместо хх стоит имя метки с которой начинается текст для вывода, в формате .ASCIZ .
Макрокоманда .OCTOUT
Вывод последнего занесённого в стек восьмеричного числа. Команда работает только при отладке программы в TURBO т. к. использует внутреннюю подпрограмму самого TURBO. Формат команды:
MOV xx,-(SP) .OCTOUT
Где первая команда производит засылку в стек числа которое надо вывести на экран.
Внимание!!! Те у кого TURBO6M с длиной меньше 13422 (8) могут не стараться у них эта команда работать не будет !
Данные получены от Михаила Королёва, как собственно и сам TURBO6M, за что ему огромное спасибо!!!
═══════════════════════════ Реклама ════════════════════════════ └───────┘
┌───────────────────────────────────────────┐ │ Продаю бывшую в употреблении БК 0010-01 │ │ тел. 474-41-84 ( Олег ) │ └───────────────────────────────────────────┘
Поздравляю Terra Software с днём рождения !!!
════════════════════════════════════════════════════════════════
═════════════════════════════════════════════════════════ Спасибо тем кто помог в создании второго номера HelpInfo: ═════════════════════════════════════════════════════════
Михаилу Королёву - за MKDOS v1.20 ,TURBO6M, DESS v2.6, Reader.14e и за советы;
Д. А. Романову - за VorteX! v1.05;
А. Надёжину - за ANDOS v2.50;
гр. "Калинов Мост", "ДДТ" и др. - за моральную поддержку.
┌───────────────────┐ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│ │▓ ▓│ │▓ Production by ▓│ │▓ SORTSOFT corp. ▓│ │▓ 14-dec-1993 ▓│ │▓ ▓│ │▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓│ └───────────────────┘
|
|
| |