Тема 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 |