Тема 3: Операторы задания данных. Механизм обработки прерываний.

Пример 1 :преобразование из десятичной системы счисления

Выполните преобразования: 58 = ?2 , 645 = ?8 , 645 = ?16 Решение:

 
 

Пример 2 : преобразование между недесятичными системами:

0001110102 = 0 7 28 = 728

0001110102 = 3 А16 = 3А16

348 = 011 1002 = 0001 11002 = 1С16

Пример 3 : преобразование числа с дробной частью:0,125 = ? 2

Решение :

Тема 2 : Арифметические, битовые команды. Режимы адресации

Пример 1. Установите содержимое регистра AX в результате выполнения следующего фрагмента программы :

… MOV BL,26 MOV BH,10111B MOV AX,2FB4H XOR AX,[BX] + 2 ADD AL,BL …   если содержимое DS = 1040h, а фрагмент памяти следующий: адрес содержимое
11B1AH 2AH
11B1BH 2BH
11B1CH 2CH
11B1DH 2DH
11B1EH 2EH
11B1FH 2FH

Решение: после первых трех команд (команды пересылки) AX= 2FB4H , BX = 171AH. Второй операнд команды XOR задан с помощью базового режима адресации, в которым содержимое регистра используется в качестве адреса ( относительного ) в сегменте данных . Константа 2 задает величину сдвига. В результате полный адрес операнда – источника для команды : A = (DS) 10H + (BX) + 2 = 1040H * 10H + 171AH +2 = 11B1CH . Данной командой обрабатывается слово ( два байта), таким образом, значение операнда – источника 2D2CH. Операндом – приемником служит регистр AX.

Битовые команды ( XOR- исключающее ИЛИ ) можно выполнить только в двоичной системе. В данном случае

первый операнд (регистр AX ) 0010 1111 1011 0100 b

второй операнд (слово памяти) 0010 1101 0010 1100 b

результат XOR 0000 0010 1001 1000 b записывается в регистр AX и поэтому его значение становится AX = 0298H

Последняя команда выполняет сложение младших половинок регистров AX и BX.

98Н

+ 1АН

В2Н и это значение размещается в регистре AL. В результате содержимое AX 02В2Н

Тема 3: Операторы задания данных. Механизм обработки прерываний.

Пример 1: Опишите события, которые произойдут в системе, если по линии 0 поступил запрос в контроллер прерываний, содержимое регистров контроллера в этот момент было IMR=24, ISR=32, а фрагмент таблицы векторов прерывания следующий:

Адрес содержимое Решение: Линия 0 соответствует самому младшему разряду регистров контроллера прерываний. По содержимому регистра IMR в двоичном виде ( 0001 1000b) можно сделать вывод ,что замаскированы линии 3 и 4 ( но не нулевая). Значение регистра ISR свидетельствует о том, что в данный момент процессором обрабатывается прерывание, поступившее по линии 5. Нулевая линия имеет более высокий приоритет, поэтому обслуживание прерывания от линии 5 будет приостановлено. Контроллер передает запрос и номер прерывания ( в данном случае – 8) процессору. Процессор определяет адрес вектора 8 -го прерывания АВП = 8 * 4 = 32 = 00020h. Байт оперативной памяти с адресом 00020h имеет содержимое A5h - это младший байт слова для регистра IP. Старший байт этого слова имеет содержание FEh. Полностью содержимое регистра IP = FEA5h. Рассуждая подобным образом, несложно получить и базовый адрес сегмента CS = F000h.
0001Ch 16h
0001Dh 00h
0001Eh 3Eh
0001Fh 08h
00020h A5h
00021h FEh
00022h 00h
00023h F0h
00024h 54h

После загрузки регистров IP и CS процессор определяет адрес программы обработки прерывания:
A = (CS)*10h+(IP)=F0000h+FEA5h=FFEA5hи начинает выполнять программу с этого адреса до первой команды IRET – возврата из прерывания.

Пример2 Определите содержимое регистра AX в результате выполнения следующего фрагмента :

… .DATA S1 DB 60,65,70,75 .CODE MOV AX,@DATA MOV DS,AX LEA BX,S1 PUSH [BX] POP [BX]+2 ; можно так [BX+2] MOV CL,20 ADD S1,CL MOV AX,S1[2] AND AX,S1 … Решение : после размещения переменных в сегменте данных получаем следующее : S1 3CH S1[1] 41H S1[2] 46H S1[3] 4BH   команда LEA заносит в BX смещение переменной S1 в сегменте данных. В стек записывается слово сегмента данных с адреса, который в данный момент находится в BX . Следующей командой с вершины стека читается слово данных ( как раз то , что было загружено в стек предыдущей командой) в ячейку памяти, сдвинутую на 2 байта с адреса, который находится в регистре BX. В результате работы со стеком сегмент данных получит следующее содержание: S1 3CH S1[1] 41H S1[2] 3CH S1[3] 41H   Команды переноса и сложения увеличат содержимое ячейки с именем S1 на 20, команда пересылки дает AX = 413CH, а команда AND, обработав два слова : 0100 0001 0011 1100 B 0100 0001 0101 0000 B даст ответ 0100 0001 0001 0000 B или 4110H  

Наши рекомендации