Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/2256: Рейтинг темы: голосов - 2256, средняя оценка - 4.63
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16374 / 7686 / 1080
Регистрация: 11.11.2010
Сообщений: 13,761
18.12.2013, 13:38  [ТС]
ГЛАВА 18
ПРОЧИЕ ОЧЕНЬ ПОЛЕЗНЫЕ КОМАНДЫ
(начало)

Команда XLAT

(Табличное преобразование =Table LOOK-up TRANSLATION)
Синтаксис команды:
XLAT
XLATB
Иногда вместо арифметических и логических преобразований выгоднее использовать преобразование одного кода в другой. Преобразование кода длиной не более 8 бит (всего 256 комбинаций) наиболее просто реализуется с помощью хранения выходных кодов в массиве длиной до 256 байт и использования исходного кода в качестве индекса в этом массиве. В микропроцессоре предусмотрена специальная команда для выполнения этих действий – команда XLAT. В команде XLAT предполагается, что базовый адрес массива байт находится в регистре EBX, а преобразуемый байт – в регистре AL. Преобразуемое значение кода берется из массива кода и помещается в регистр AL.
Допустим необходимо цепочку цифр вывести на семисегментный индикатор:

Фрагмент программы, преобразующей двоичный код в код семисегментного индикатора:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
;семисегментный код для шестнадцатеричных чисел
TABLE_CIF DB 3Fh,06h,5Bh,4Fh,66h,6Dh,7Dh,07h
DB 7Fh,6Fh,77h,7Ch,39h,5Eh,79h,71h
MOV EBX,OFFSET TABLE_CIF ;загрузить базовый адрес
MOV ESI,OFFSET STG_BCD ;указать цепочку источник
MOV EDI,OFFSET STG_DISPL;указать цепочку приемник
MOV ECX,LENGTH STG_BCD
NEXT: LODSB ;получить цифру в AL
AND AL,0Fh ;отсекаем “лишнее”
XLAT ;преобразовать в код индикатора
STOS ;значение в AL отправить на индикатор
LOOP NEXT ;повторяем до завершения
Фрагмент программы преобразования шестнадцатеричной цифры в ASCII-код. Процедура display выводит число на экран, само число уже в регистре EAX.
Assembler
1
2
3
4
5
6
7
.data
Table db ‘0123456789ABCDEF’
.code
mov ebx,offset Table
and al,0Fh
xlat
call display
Если вы заранее построили таблицу соответствий, команду XLAT можно использовать для быстрого деления/умножения на определенный коэффициент, возведения в степень, получения квадратного или кубического корня, фильтрации сигнала, шифрования/дешифрации и т.п. Несмотря на свою привлекательность, XLAT ограничена размером регистра AL и может преобразовывать код длиной не более 8 бит (всего 256 комбинаций). Чтобы преодолеть это ограничение, XLAT можно имитировать командами:
lea reg,[base+reg*scale+offset]
или
mov reg,[base+reg*scale+offset]
Команда HLT
(Остановка = HALT)
Синтаксис команды:
HLT
Семантика команды: остановка микропроцессора до прерывания или перезагрузки.
Алгоритм работы: перевод микропроцессора в состояние остановки.
Применение: в результате выполнения команды микропроцессор переходит в состояние остановки. Из этого состояния его можно вывести сигналами на входах RESET, NMI, INTR. Если для возобновления работы микропроцессора используется прерывание, то сохраненное значение пары CS:EIP/IP указывает на команду, следующую за HLT. Для иллюстрации применения данной команды рассмотрим способ переключения микропроцессора из защищенного в реальный режим и его возврата обратно в реальный режим. В микропроцессоре не предусмотрено специальных средств для подобного переключения. Сброс микропроцессора можно инициировать, если вывести байт со значением 0FEh в порт клавиатуры 64h. После этого микропроцессор переходит в реальный режим и управление получает программа BIOS, которая анализирует байт отключения в CMOS-памяти по адресу 0Fh. Если значение этого байта равно 05h – сброс микропроцессора инициирует инициализацию программируемого контроллера прерываний на значение базового вектора 08h. Далее управление передается по адресу, который находится в ячейке области данных BIOS 0040:0067h.
Если значение этого байта равно 0Ah – сброс микропроцессора инициирует непосредственно передачу управления по адресу в ячейке области данных BIOS 0040:0067h (то есть без перепрограммирования контроллера прерываний).
Если Вы не используете прерываний, то достаточно установить байт 0Fh в CMOS-памяти в 0Ah. Предварительно Вы должны инициализировать ячейку области данных BIOS 0040:0067h значением адреса, по которому необходимо передать управление после сброса. Для программирования CMOS-памяти используются номера портов 070h и 071h. Вначале в порт 070h заносится нужный номер ячейки CMOS-памяти, а затем в порт 071h – новое значение этой ячейки.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
;работаем в реальном режиме, готовимся к переходу
;в защищенный режим:
PUSH ES
PUSH 40h
POP ES
MOV WORD PTR ES:[67h],OFFSET RET_REAL
;RET_REAL – метка в программе, с которой должно
;начаться выполнение программы после сброса
MOV ES:[69h],CS
MOV AL,0Fh ;будем обращаться к ячейке 0Fh в CMOS
OUT 70h,AL
NOP ;чуть задержимся, чтобы аппаратура отработала
;сброс без перепрограммирования контроллера
MOV AL,0Ah
OUT 71h,AL
;переходим в защищенный режим установкой бита 0 CR0=1
. . .;работаем в защищенном режиме
;готовимся перейти обратно в реальный режим
MOV AL,01FCh
OUT 64h,AL ;сброс микропроцессора
HLT
;остановка до физического окончания процесса сброса
RET_REAL: · · · ;метка, на которую будет передано
;управление после сброса
Разработчики из фирмы Intel рекомендуют использовать команду HLT только тогда, кода возникает катастрофическая ошибка оборудования и дальнейшая работа бессмысленна.


0
Закрытая тема Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru