- •4) Пpинципы оpганизации основных аппаpатных сpедств эвм (расслоение памяти, регистр перемещений, прерывания и опрос состояний, буферизация).
- •6) Организация ввода-вывода.
- •7) Методы повышения производительности эвм.
- •9) Микроархитектура современных пэвм. Гиперконвейерная организация процессора.
- •Регистры.
- •Сегментные регистры.
- •17) Основы языка Ассемблер
- •18) Команды логических операций. Сдвиговые команды.
- •19) Цепочечные команды. Префиксы повторения в цепочечных командах.
- •Insb считать из входного порта в приемник по адресу [di]
- •2. Команды умножения (mul, imul)
- •23) Команды условного и безусловного переходов.
- •Формат купу
- •Формат кбпу.
- •Передача параметров в п/п
- •Можно собрать макросы в отдельную библиотеку и писать программы, используя имена макросов в библиотеке.
- •3. Типы класса – имена, фиксированные (code, data, stack).
- •30) Базовая система ввода/вывода bios. Прерывания операционной системы dos. Средства
- •Прерывания ос
17) Основы языка Ассемблер
- Формат команды АССЕМБЛЕРА. Определение и характеристики полей.
- Создание программ на АССЕМБЛЕРЕ. Назначение программ ассемблирования и компановки.
- Командная строка Турбо Ассемблера. Косвенные командные файлы. Файлы конфигурации.
- Память. Порты. Регистры. Сегменты памяти.
Порядок создания программ на TASM
На этапе ассемблирования исходный код (текст программы) превращается в промежуточную форму, которая называется объектным модулем, а на этапе компоновки один или несколько модулей комбинируются в выполняемую программу. Ассемблирование и компоновку можно выполнять с помощью командной строки.
Полный цикл создания программы состоит из 3-х этапов - редактирования, ассемблирования, компоновка и выполнение.
В результате редактирования создается текстовый файл с исходной программой на ассемблере. Расширение файла должно быть .ASM. Этап ассемблирования - это создание объектного модуля (файла с расширением .OBJ) с помощью программы TASM.EXE. На этапе компоновки с помощью программы TLINK.EXE получается исполняемый модуль - файл с расширением .EXE.
Командная строка TASM
Если вы запустите Турбо Ассемблер, не задав никаких аргументов, например:
TASM
то на экран выведется справочная информация, описывающая множество параметров командной строки и синтаксис для спецификации ассемблируемых файлов.
С помощью параметров командной строки можно задавать имя нескольких ассемблируемых файлов.
Косвенные командные файлы
Турбо Ассемблер позволяет задавать косвенный командный файл, с помощью указания перед его именем символа @. Например:
TASM /DTESTMODE @MYPROJ.TA
Эта команда приводит к тому, что содержимое файла MYPROJ.TA становится частью командной строки (как если бы вы ввели ее содержимое непосредственно). Это позволяет поместить наиболее часто используемые командные строки и списки файлов в отдельный файл. В одной командной строке допускается использовать несколько косвенных командных файлов с обычными аргументами
Файлы конфигурации
Турбо Ассемблер позволяет также поместить наиболее часто используемые параметры в файл конфигурации TASM.CFG в текущем каталоге. Турбо Ассемблер проверяет наличие этого файла и обрабатывает его в командной строке первым.
Содержимое файла конфигурации имеет тот же формат, что и косвенный файл. Этот файл может содержать любую допустимую в командной строке информацию.
Содержимое файла конфигурации обрабатывается до всех других аргументов командной строки. Это позволяет вам отменить любой параметр, заданный в файле конфигурации, просто указав в командной строке параметр, который имеет противоположное действие.
18) Команды логических операций. Сдвиговые команды.
Преобразования символов необходимо выполнить, используя команды логических функций и команды сдвига. Напомним результат действия логических функций, используемых в процедурах преобразования кодов:
бит1 |
бит2 |
AND |
OR |
XOR |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
Команды AND, OR и XOR реализуют соответственно операции И, ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ над операндами. Причем действие этих команд проводится над одноименными разрядами операндов. Например, если в регистр AL запишем код 01110101, а в регистр BL запишем код 01011001, то в результате выполнения операции <AND AL, BL> в регистре AL получится число 01010001. При выполнении операции <OR AL, BL> в регистре AL получится число 01111101. При выполнении операции <XOR AL, BL> в регистре AL получится чиcло 00101100.
Все буквы, цифры и символы в ЭВМ кодируются в соответствии со стандартным набором кодов, определяемым таблицей кодов ASCII. Анализируя коды символов можно отметить, что коды прописных букв латинского алфавита имеют в 5-м разряде 0, а в кодах строчных (маленьких) 5-й разряд установлен в 1. Остальные разряды совпадают.
В русском алфавите разница в кодах строчных и прописных букв до буквы “П” также в 5-м разряде, а начиная с буквы “Р” в 4-м, 5-м и 6-м разрядах. Напpимеp, нам необходимо пpеобpазовать заглавную латинскую букву 'A' в строчную 'a'.
Символ “A” - представляется ASCII-кодом 41h или 01000001b, a символ “a” представляется ASCII-кодом 61h или 01100001b. Следовательно, чтобы преобразовать код прописной буквы в код строчной буквы необходимо изменить код 41h в код 61h. Для этого значение 5-го бита должно быть переведено из 0 в 1.
Используя логические команды проводим пpеобpазование кода:
mov AL, 'A' ; Занесем код символа “A” AL := 0100 0001
or AL, 00100000b ; AL = 0110 0001 = “a”
При выполнении команд сдвига флаг CF всегда содержит значение последнего выдвинутого бита.
Существуют следующие команды сдвига:
SHR - Логический (беззнаковый) сдвиг вправо
SHL - Логический (беззнаковый) сдвиг влево
SAR - Арифметический сдвиг вправо с сохранением знака
SAL - Арифметический сдвиг влево с сохранением знака
Крайний бит при сдвиге попадает во флаг CF. Для проверки бита, занесенного во флаг CF используется команда JC (переход, если есть перенос) или JNC (переход, если нет переноса). Покажем пример подсчета единичных бит в байте.
clc; очистка флага CF=0
С10: mov CX, 08
mov AL, 10110011B
shr AL, 1 ;Сдвиг вправо на 1, al=01011011, CF=1
jnc C20
inc BX
C20: dec CX
Loop C10
Первая команда SHR сдвигает содержимое регистра AL вправо на 1 бит. Выдвинутый в результате один бит попадает в флаг CF, а самый левый бит регистра AL заполняется нулем. При этом флаг CF последовательно принимает значения 1, 1, 0 и т.д. Если флаг CF в результате сдвига установлен, то увеличиваем значение счетчика в BX.
Циклический сдвиг представляет собой операцию сдвига, при которой выдвинутый бит занимает освободившийся разряд. Существуют следующие команды циклического сдвига:
ROR <операнд> - циклический сдвиг вправо.
ROL < операнд> - циклический сдвиг влево.
RCR < операнд> - циклический сдвиг вправо с переносом.
RCL < операнд> - циклический сдвиг влево с переносом.