Cancer #01 |
|
Z80 - Теоретическа статья о возможности усложнить программирование под Z80 посредством изъятия команды LD A,n.
Теоретическа статья о возможности усложнить программирование под Z80 посредством изъятия команды LD A,n (C) sinn/dtr/fdm "Итак вы, возлюбленные, будучи предварены о сем, берегитесь, чтобы вам не увлечься заблуждением без- законников и не отпасть от своего утверждения, но возрастайте в благодати и познании Господа нашего и Спасителя Иисуса Христа. Ему слава и ныне и в день вечный. Аминь" 2-е Петра, 3:17-18 ────────────────────────────────────────── Представим, что из Z80 изъяли команду LD A,n. Представим, что каким-то прекрасным утром мы проснулись, а его в Z80 не обнаружили. Или, мы нарочно вводим это ог- раничение. Корни появления нам не важны, важны последствия. Вот о них и поговорим. Рассмотрим, насколько усложнится написание программ под Z80 (почему я уточнил, что именно под Z80? Потому что извлечение команды никак не повлияет на написание программ в ассемблере под i86, PCC). Решений для данной проблемы можно найти несколько. Я постараюсь описать несколько, остальные оставлю Вам. Первое решение Что сразу приходит на ум, так это полный отказ от прежнего стиля написания. Придется писать программы по-новому, с новым подходом, с новым стилем. По-началу будет конечно трудно, появится психологические барьеры, фобии, которые могут пагубно отразиться на психике кодеров. Эти проблемы скорее всего обойдут стороной начинающих, ибо их разум еще не "замутнен" старыми стилями, старыми методами. Именно на них и возложется вся надежда. Каков будет "новый стиль"? Сложно конечно сказать, я даже не могу себе этого представить. Вполне возможно, что придется вообще забыть о регистре A, как о таковом. Придется обходиться без него. К примеру, чтобы сбросить флаг переноса, придется применять следующий прием: PUSH BC ; сохраняем регистровую ; пару, так как используем ; для установки флага ; переноса регистр C, но ; если вам не нужно ; содержимое BC, то можно ; этой операции и не ; производить, естественно ; не нужно будет его и ; восстанавливать ; (см. ниже) ; впринципе, вместо BC ; можно будет использовать ; и другой 16-разрядный ; регистр LD C,%00000000 ; сброс флага переноса PUSH BC ; C => POP AF ; F POP BC ; восст. рег Сравнения: XOR A = PUSH BC LD C,%00000000 PUSH BC POP AF POP BC Как видите, увеличится объем используемой памяти, увеличится количество тактов. Так как при данном решении проблемы так называемого "изъятия" мы отказываемся от регистра A (хочу сказать, что мы не сможем полностью отказаться от регистра A, так как нам будет нужна команда PUSH AF, а так же противоположная ей команда POP AF, причина здесь одна - нам нужен будет доступ к флаговому регистру F. Но если вас это задело, то откажитесь и от этих команд это будет более смелое решение), то мы не сможем использовать и команды CPIR, CPI, DAA, а так же другие (см. справочник по командам Z80). Для этого придется писать свои процедуры, делать их по возможности быстрыми, чтобы они так же занимали мало места. Как можно заметить, полный отказ от регистра A ведет к максимальному усложнению программирования под Z80 при изъятии команды LD A,n. Второе решение Это решение является более рациональным, в отличии от выше описанного решения, так как оно не требует "переосмысления" программирования под Z80. Здесь можно использовать старые методы кодинга, не отказываться полностью от своих алгоритмов. Но. Есть одно "НО". Нельзя использовать команду LD A,n непосредственно, так как таковой не "существует". Чтобы загрузить в регистр A константу, необходимо провести примерно следующие действия: LD A,10 = PUSH BC PUSH BC LD B,10 или так LD B,10 LD A,B PUSH BC POP BC POP AF POP BC Как можно заметить, возможны разные варианты занесения числа в аккумулятор, что сможет способствует развитию творчест- ва. Отказом только даже одной команды можно разнообразить программирование, а что если отказаться от всех? Но не будем отходить от обсуждаемой темы. Третье решение или решение "Микс" Третье решение является гибридом первого и второго решений. То есть, идет отказ от _некоторых_ команд регистра, связаных с регистром A. К примеру, вводится отказ от команд LD A,B, LD A,C. Так что, чтобы занести в аккумулятор число 10, придется произвести следующие действия: LD A,10 = PUSH DE LD D,10 LD A,D POP DE Но нельзя будет сделать так: PUSH BC LD B,10 LD A,C ; ошибка, так как ; отказались от ; команды LD A,C POP BC Вывод: ───═══ Первое решение гораздо сложнее всех остальных, рассмотренных в этом докладе. Это решение максимально усложняет программирования под Z80 при изъятии команды LD A,n. Второе решение самое легкое и элемнтерное из рассмотренных в данном докладе. Оно минимально усложненяет программирование под Z80 при изъятии команды LD A,n. Третье решение среднее по сложности из рассмотренных в моем докладе. Оно находится по степени сложности между первым и вторым решениями. По своей сути, оно является идеальным вариантом при решении проблемы изъятия команды LD A,n из процессора Z80, так как вы _сами_ сможете решать от какой команды вам стоит отказаться. Но здесь надо быть очень внимательным. Если вы откажитесь от всех команд (ведь из условия "Микс" можно отказаться от _любого_ количества команд), то третье решение трансформируется в первое решение. Вывод - решение один и решение "Микс" (третье решение) связаны между собой, что доказывает гибридность с первым решением. Так же, если мы откажимся только от команды LD A,n, то получим второе решение, что так же является доказательством гибридности со вторым решением. Резюме: ───═══ Ввиду появления проблем при написании программ на ассемблере Z80, вследствии изъятия команды LD A,n из процессора Z80, ее изьятие не рекомендуется, хотя, если вы принципиально откажитесь от этой команды, то можете стать первоначальником нового течения в программировании. Сможете даже дать этому течению свое название - ведь его нет, а значит нет и названия. Придумать сейчас что-то новое становится все труднее и труднее - прогресс ведь, господа. Ловите момент!
Другие статьи номера:
Sub - Здравствуй жопа новый год! |
Weshi - Вокруг нас - вещи. Даже мы относимся к вещам. |
Day - Несколько дней из жизни "Белого Феди". |
Zlaps - "Что Он так богохульствует? Кто может прощать грехи, кроме одного Бога?" |
Z80 - Теоретическа статья о возможности усложнить программирование под Z80 посредством изъятия команды LD A,n. |
Reliz - Многие группы любят публиковать потоки сознания со своих пьянок. |
Ebland - "Только грязные облака проливают слезы о нас с тобой". |
Hellos - Приветствую... |
Sub - Сука возит воду по полесью словно огненая сфера безжизненно слабой пизды. |
Похожие статьи:
В этот день... 21 ноября