Меню сайта

Урок 67. Загрузка и запись

Листинг ассемблера на Фиг. 4.22 показываетразличные строковые
— — — команды. -Загрузка строки LODS и запись строки STOS являются
— — — простейшими строковыми командами. — Если программа указывает
— — — байтовый операнд в команде LODS, то оназагружает в регистр AL
— — — байт, на который указывает пара регистровDS:SI. — Затем она
— — — изменяет регистр SI на единицу- онувеличивается, либо уменьшается,
— — — в зависимости от состояния флаганаправления. — Если команда LODS
— — — указывает на слово, то она загружаетрегистр AX и изменяет регистр
— — — SI на 2. -Команда STOS строго противоположна, и записывает байт из
— — — регистра AL либо слово из регистра AX вячейку памяти. — В случае
— — — записи ячейка определяется парой регистровES:DI. — Команда записи
— — — изменяет регистр DI либо на единицу, либона 2, в зависимости от
— — — типа операнда.

— — — — — Программист может писать на ассемблерекоманду LODS (а также и
— — — все другие строковые команды) различнымиспособами. Тип операнда
— — — можно указать частью кода операции, либоассемдлер может определить
— — — тип элемента строки, основываясь наоперанде, присутствующем в
— — — команде. Как показано на Фиг. 4.22,команда

— — — — — LODS EXBYTE

— — — — — порождает команду загрузки строк байтов,так же как и команда
— — — — — LODSB.

— — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — -1/1/80 04:01:26
— — — — — — — — -Фиг. 4.22 Команды обработки строк — — — — — — — — — — — — — — — — — — — — — Page -1-1

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 4.22 Команды обработки строк
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE,DS:CODE,ES:CODE
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — EXBYTE -LABEL — — BYTE
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — EXWORD -LABEL — — WORD
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — EXBYTE1 LABEL — — BYTE
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — EXWORD1 LABEL — — WORD

— — — — — — — — — -0000 — AC — — — — — — — — — — — — — — — — — — — — — — — — -LODS — — — EXBYTE — — — — — — — — Загрузка AL из DS:SI
— — — — — — — — — -0001 — AD — — — — — — — — — — — — — — — — — — — — — — — — -LODS — — — EXWORD — — — — — — — — Загрузка AX из DS:SI
— — — — — — — — — -0002 — AC — — — — — — — — — — — — — — — — — — — — — — — — -LODSB — — — — — — — — — — — — Загрузка AL из DS:SI
— — — — — — — — — -0003 — AA — — — — — — — — — — — — — — — — — — — — — — — — -STOS — — — EXBYTE — — — — — — — — Сохранение AL в ES:DI
— — — — — — — — — -0004 — AB — — — — — — — — — — — — — — — — — — — — — — — — -STOS — — — EXWORD — — — — — — — — Сохранение AX в ES:DI
— — — — — — — — — -0005 — AB — — — — — — — — — — — — — — — — — — — — — — — — -STOSW — — — — — — — — — — — — Сохранение AX в ES:DI
— — — — — — — — — -0006 — F3/ AA — — — — — — — — — — — — — — — — — — — — — REP — — — — STOSB — — — — — — — — — Сохранение AL в ES:DI в цикле CX раз

— — — — — — — — — -0008 — A4 — — — — — — — — — — — — — — — — — — — — — — — — -MOVS — — — EXBYTE1, EXBYTE -Пересылка байта [ES:DI] &lt— [DS:SI]
— — — — — — — — — -0009 — A5 — — — — — — — — — — — — — — — — — — — — — — — — -MOVS — — — EXWORD1, EXWORD -Пересылка слова [ES:DI] &lt— [DS:SI]
— — — — — — — — — -000A — A4 — — — — — — — — — — — -&nb
sp- — — — — — — — — — — — -MOVSB — — — — — — — — — — — — Пересылка байта [ES:DI] &lt— [DS:SI]

— — — — — — — — — -000B — F3/ A5 — — — — — — — — — — — — — — — — — — — — — REP — — — — MOVSW — — — — — — — — — Пересылка CX слов [ES:DI] &lt— [DS:SI]

— — — — — — — — — -000D — AE — — — — — — — — — — — — — — — — — — — — — — — — -SCAS — — — EXBYTE1 — — — — — — — Сравнение AL с [ES:DI]
— — — — — — — — — -000E — F3/ AE — — — — — — — — — — — — — — — — — — — — — REPE — — — SCASB — — — — — — — — — Сравнение AL с [ES:DI] пока равно
— — — — — — — — — -0010 — F2/ AF — — — — — — — — — — — — — — — — — — — — — REPNE — — SCASW — — — — — — — — — Сравнение AX с [ES:DI] пока не равно

— — — — — — — — — -0012 — A7 — — — — — — — — — — — — — — — — — — — — — — — — -CMPS — — — EXWORD, EXWORD1 -Сравнение слова [DS:SI] с [ES:DI]
— — — — — — — — — -0013 — F3/ A7 — — — — — — — — — — — — — — — — — — — — — REPE — — — CMPSW — — — — — — — — — Сравнение слов [DS:SI] с [ES:DI] пока
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — равнов цикле CX раз
— — — — — — — — — -0015 — F2/ A6 — — — — — — — — — — — — — — — — — — — — — REPNE — — CMPSB — — — — — — — — — Сравнение байт [DS:SI] с [ES:DI] пока
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — неравно в цикле CX раз
— — — — — — — — — -0017 — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

— — — — — — — — — — — Фиг.4.22 Строковые команды
— — — — — В первом случае ассемблер определяет, чтострока состоит из
— — — байта, поскольку EXBYTE — переменная типаBYTE. Во втором случае
— — — программист непосредственно указывает, чтоработает с байтами.
— — — Собственно ассемблер не требует поляоперанда. Программисты чаще
— — — используют вторую форму, так как не имеютимени переменной,
— — — связанной со строкой. Программадинамически располагает строку в
— — — памяти, для нее не существуетфиксированного места, и,
— — — следовательно, нет и имени переменной.Команда STOS аналогична.
— — — Чтобы непосредственно указать строку слов,а не байтов,
— — — используются коды операций LODSW и STOSW.Ассемблер должен знать,
— — — для байтовой строки или строки словнаписана команда, поскольку
— — — машинные команды различны для различныхтипов строк. Эта разница
— — — определяет значение, на которое надоизменить индексный регистр.

— — — — — Операнд в команде должен быть указан в томслучае, если в
— — — программе используются основные формыкоманд LODS и STOS. Если
— — — программа не имеет удобной метки длястроки, она может использовать
— — — формы LODSB и STOSB. Преимуществоиспользования основной формы LODS
— — — и указания операнда заключается в том, чтоассемблер при этом
— — — проверяет не только тип операнда, но ивозможность его адресации.
— — — Так как команда LODS работает с объектамитолько в сегменте DS,
— — — оператор ASSUME должен соответственноописывать расположение
— — — сегмента поименованной переменной.Аналогично, ассемблер проверяет
— — — основную форму команды STOS на адресациюсегмента ES. Любая форма
— — — приемлема для ассемблера, но лучшеиспользовать основную форму,
— — — чтобы позволить ассемблеру наилучшимспособом проверить наличие
— — — ошибок в программе до выполнения.

Категория: Программирование на Ассемблере | Дата: 05.02.13

Меню раздела
Блок