вать, что математический сопроцессор ставит вопрос об «одно-
процессорности» настольных ПК под сомнение.
w a i t
— эта команда заставляет М П ждать сигнала от сопро-
цессора о завершении операции. Впрочем, начиная с пары
80386/387, такая синхронизация проводится автоматически. К
слову, существует также команда
f w a i t ,
предназначенная для
сопроцессора.
И наконец последнее.
Цепочечные команды.
Это — группа из нескольких команд, специально предназна-
ченных для быстрой работы со строками в оперативной памяти.
Они неявно адресуются к памяти с помощью регистров
S I И D I
(можно лишь явно переопределить сегмент источника, по умол-
чанию s i привязан к
D S , а d i — к e s ). Команды выполняются
очень быстро, но, насколько мне известно из собственного опы-
та, не всегда стабильно, особенно когда речь идет о работе с
«верхней» памятью — памятью видеоадаптера и т.п. Также они
малоприменимы при работе в защищенном режиме адресации,
потому как регистры
D S и E S выполняют там совсем другие функ-
ции. Часто встречаются
в связке с префиксом r e p . О ни исполь-
зуют флаг
d f
для определения направления работы: будут ли ре-
гистры s i и
d i
по ходу выполнения инкрементироваться
(d f = o ),
либо декрементироваться
(d f = i ). Существуют модификации этих
команд для работы с байтами, словами И ДВОЙНЫМИ словами (суф-
фикс
D — впрочем, какие двойные слова в 80286?)
m o v s b / m o v s w
— выполняют пересылку данных из источника
в
приемник. Пример:
.2 8 6
.M O D E L S M A L L
■ D A T A
m s g l d b ' Т е с т о в о е с о о б щ е н и е ' ; 1 8 б й т
m s g 2 d b 1 8 d u p ( ? ) ; п р о с т о в ы д е л е н н а я п а м я т ь .
■ C O D E
s t r t :
m o v a x , © d a t a ; с т а н д а р т н о е и м я с е г м е н т а д а н н ы х в к о р о т -
к о й с е г м е н т а ц и и
m o v d s , а х ; н а с т р о й к а с е г м е н т н о г о р е г и с т р а
m o v s i , o f f s e t m s g l
m o v e s , a x
m o v d i , o f f s e t m s g 2
m o v c x , 9 ; д л и н а к о п и р у е м о й с т р о к и
c l d ; б у д е м н а р а щ и в а т ь S I и D I , ч т о б ы в с е с к о п и р о в а л о с ь
п р а в и л ь н о
r e p m o v s w ; с о б с т в е н н о , в о т и в с е
А теперь взгляните, как бы это выглядело без цепочечных ко-
манд:
;m o v с х , 9
,-p u s h Ь х
; a l : m o v b x , [ s i ]
; m o v [ d i ] , b x
;
a d d s i , 2 ; с м е щ а е м у к а з а т е л ь и с т о ч н и к а
l
a d d d i , 2 ; с м е щ а е м у к а з а т е л ь п р и е м н и к а
;
l o o p a l
m o v a x , 4 c 0 0 h
i n t 2 1 h
E N D s t r t
Итак, в этом примере мы скопировали содержимое msgl в
msg2. Но не только. Это первый пример ДЕЙ СТВИ ТЕЛЬН О ра-
бочей EXE-программы для M S-DOS. Две предпоследние строки
вызывают стандартную функцию M S-D O S — нормальное завер-
шение работы программы (если этого не сделать, попросту пой-
дет выполнение содержимого оперативной памяти, следующее
сразу за программой, что рано или поздно приводит к зависа-
нию программы (или, реже, к более серьезным последствиям).
s c a s b / s c a s w
— поиск элементов в цепочке (сравнение a l / a x
с
E S : [ d i ] ). Команда влияет на флаги, т.е. ее имеет смысл ис-
пользовать совместно с модифицированным префиксом повто-
рения:
R E P E S C A S B ; и д т и п о с т р о к е , п о к а E S : [ D I ] н е р а в е н A L
C M P S B / C M P S W — сравнение двух строк. В принципе, все, что
сказано о
s c a s ,
относится и к этой команде.
l o d s b / l o d s w
— загрузка данных из d s : [ s i ] в a l / a x .
s t o s b / s t o s w
— запись данных
и з a l / a x в E S : [ d
i ] .
Очень по-
лезная вещь, когда надо заполнить кусок памяти одним и тем же
значением (хоть бы и нулем — эта команда действует быстрее,
нежели логические в связке с циклами).
i n s b / i n s w
— чтение байт (слов) из порта, задаваемого в ре-
гистре
D X . Будьте внимательны: ввод-вывод у большинства пор-
тов достаточно медленный, поэтому вы очень рискуете, пользу-
ясь такой командой с префиксом на современных машинах
o u t s b / o ü t s w
— запись байт/слов в порт. Тут опасность еще
больше: если в предыдущем случае вы рисковали получить оши-
бочные данные, то здесь вы можете вызвать аппаратный сбой.
Компилятор может определять команду самостоятельно, на-
пример:
R E P I N S m y _ a r r a y — тут он подставит на место i n s нужную
команду, но загружать смещения, сегменты и размеры массива
вам все равно придется самостоятельно.
Ну вот. С командами М П мы как бы разобрались. Теперь на-
конец обратимся непосредственно к ассемблированию.
Прежде всего, потребуется транслятор — TASM
(Turbo As-
sembler
от фирмы
Borland]
либо M ASM
(Microsoft Macro Assem-
ble
г). Есть также множество других вариантов, например LASM —
транслятор моей собственной разработки. (Разработка транс-
ляторов и компиляторов — хоть и очень интересный процесс, но
выходит за рамки этого цикла. Думаю, если вы, дорогие читате-
ли (и, естественно, уважаемая редакция МК) дадите добро, я по-
свящу этой проблематике отдельный цикл статей.) Стоит упомя-
нуть N ASM —
Netwide Assembler,
dev86 (в Linux) и, конечно же,
незабвенный DEBUG в M S-DOS.
DEBUG позволяет набрать программу прямо в оперативную
память и сразу же выполнить ее — для этого в приглашении сле-
дует набрать
а ,
а затем код; выход из набора происходит по двой-
ному нажатию
Enter.
Да, и еще: он работает исключительно с ше-
стнадцатеричными числами, указывать систему счисления там не
надо. Метки, переменные, директивы не поддерживаются. Просто
вводите код и данные. Трассировка программы производится с по-
мощью клавиши т — а вообще, читайте help, доступный по ?, раз-
бирайтесь сами. DEBUG — это та среда, с которой стоит начать.
Как работать с «профессиональными» пакетами, я расскажу
в следующий раз. Там же будут обрисованы направления, кото-
рые не были рассмотрены здесь, но которые желательно изучить.
(Продолжение следует)
ПОДРОБНОСТИ НА САЙТЕ.
w w w .u n l i m i t e d .c o m .u a
М О Й КОМ ПЬЮ ТЕР
предыдущая страница 41 Мой Компьютер 2004 45 читать онлайн следующая страница 43 Мой Компьютер 2004 45 читать онлайн Домой Выключить/включить текст