Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практическая часть.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
172.03 Кб
Скачать

Пример 6. Деление

Записать эквивалентную данному фрагменту на языке Си программу на языке ассемблера.

static int x, y;

...

x /= -y;

Решение:

Поскольку x и y объявлены как статические переменные, размещаем их в секции неинициализированных статических данных.

section .bss

x dd 1

y dd 1

Реализация выражения, в котором происходит деление, состоит из загрузки значений переменных x и y на регистры, обращения знака, деления и выгрузки полученного результата обратно в память.

section .text

mov eax, dword [х] ;Записываем в регистр eax значение

; переменной x. Поскольку в дальнейшем

; это значение будет выступать в

; качестве делимого, его необходимо

; разместить в паре регистров edx:eax

; Таким образом, 32-разрядное знаковое

; число будет расширено до 64 разрядов.

; верхние 32 разряда заполнятся знаковым

; битом.

mov edx, eax ; Копируем значение переменной x в edx

sar edx, 31 ;Сдвигаем число на 31 разряд – все

; заряды регистра будут заполнены

; знаковым битом, т.к. сдвиг

; арифметический, пара регистров edx:eax

; готова к знаковому делению.

mov ecx, dword [y] ;Записываем в регистр ecx значение

; переменной y

neg ecx ; Меняем знак числа, т.е. получаем

; значение (–y)

idiv ecx ; делим

mov dword [x], eax ; частное из регистра eax записываем в

; память, где размещена переменная x

Пример 7. Присваивание различных типов

Реализовать присваивание b = a; (не более двух команд) при условии:

// a

static unsigned char a;

static unsigned int b;

// b

static char a;

static short b;

Решение:

; a

movzx eax, byte [a]

mov dword [b], eax

; b

movsx eax, byte [a]

mov word [b], eax

Пример 8. Значение регистра

Какое значение будут иметь регистры TL0 и TH0 таймера/счетчика, работающего в режиме 2 счета внешних событий, после поступления на его счетный вход 6 импульсов, если их начальное состояние следующее: TL0 = 252; TH0= 252 ?

Решение:

TL0 = 254; TH0= 252

Пример 9.Физический адрес

По какому физическому адресу расположен дескриптор сегмента, если в его селекторе значение поля индекса равно 4, бит TI=0, а базовый адрес в регистре глобальной таблицы дескрипторов GDTR равен 00010000h?

Решение:

00010020h

Пример 10. Прерывания

Через какой промежуток времени таймер-счетчик T/C0 микроконтроллера МК-51, работающего на тактовой частоте 12 МГц в режиме, обеспечивающем 16-разрядный счет, выдаст сигнал запроса прерывания, если его начальное состояние следующее: TH0=FFh, TL0=F5h ?

Решение:

11 мкс

Пример 11. Внешние события

Какое значение будут иметь регистры TL0 и TH0 таймера/счетчика, работающего в режиме 2 счета внешних событий, после поступления на его счетный вход 10 импульсов, если их начальное состояние следующее: TL0 = 250; TH0= 250 ?

Решение:

TL0 = 254; TH0= 250

Пример 12. Логические последовательности

На адресные входы дешифратора а2,а1,а0 поступает код 100, а на входы разрешения 0Е3, ~0Е2,0Е3 код 101. Что будет на входах у7,у6,у5,…,у0? Ответ привести в виде последовательности 1 и 0, начиная со старшего и кончая младшим разрядами выходного кода.

Решение:

Разрешающие входы объединены по «И», последовательно для разрешения выходов на входы 0Е должны поступать активные значения логических уровней, что выполняется в приведенном примере (0Е1=1, ~0Е2=0,0Е3=1). В соответствии с определением работы дешифратора активным станет тот выход, номер которого равен десятичному или 1*2²+0*2¹+0*2º=4(DEC). Поэтому активным станет 4-ый выход. Из рисунка видно, что выходы дешифратора прямые, следовательно на четвертом выходе появится 1, а на остальных-0 и ответом будет последовательность:00010000.