СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Тәжірибелік жұмыс: Арифметикалық және логикалық командаларды бағдарламалау

Категория: Информатика

Нажмите, чтобы узнать подробности

Тәжірибелік жұмыс

Арифметикалық және логикалық командаларды бағдарламалау

Просмотр содержимого документа
«Тәжірибелік жұмыс: Арифметикалық және логикалық командаларды бағдарламалау»

Тәжірибелік жұмыс


Пән: «Микропроцессорлық техника негіздері»

Курс тақырыбы: 6.2 тақырып. Процессордың негізгі командалары

Сабақтың тақырыбы: Арифметикалық және логикалық командаларды бағдарламалау


Жұмыстың мақсаты: Студенттерге ассемблердiң арифметикалық операцияларының жұмыс тәртiбiн, сонымен қатар жылжу, көбейту, қосу т.б. командаларын таныстыру.

Қысқаша теориялық мағлұмат Арифметикалық командалар

Олардың негiзiлерi төмендегi кестеде көрсетiлген:

1-кесте

Мнемоника

(опN = операндN)

Операнд түрi


Орындалу логикасы

Өзгеретiн жалаушалар

ADD оп1, оп2

R, A

A, I

R, I

R, M

M, R

M, I

оп1 = оп1 + оп2

Қарапайым қосу

O, S, Z, A, P, C

ADC оп1, оп2

R, A

A, I

R, I

R, M

M, R

M, I

оп1 = оп1 + оп2 + CF

Тасымалдау есебiнен қосу

CF = 1, то

оп1 = оп1 + оп2 + 1

O, S, Z, A, P, C

SUB оп1, оп2

R, R

M, R

R, M

A, I

R, I

M, I

оп1 = оп1 - оп2

Азайту

O, S, Z, A, P, C

SBB оп1, оп2

R, R

M, R

R, M

A, I

R, I

M, I

оп1 = оп1 - оп2 - CF

Тасымалдау есебiнен азайту

O, S, Z, A, P, C

MUL оп1

R8

R16

M8

M16

AX = AL * оп1,



DX:AX = AX * оп1,


O, C



DIV оп1

R8

R16

M8

M16

AL = AX / оп1;

AH = қалдық,


AX = DX:AX / оп1;

AX = қалдық


D, I, T жалаушалары өзгермейдi.

SHL оп1, оп2

R, 1

R, CL

M, 1

M, CL

CF ← оп1 ← 0

Биттердi солға жылжыту

O, S, Z, P, C.


SHR оп1, оп2

R, 1

R, CL

M, 1

M, CL

0 → оп1 → CF

Биттердi оңға жылжыту

O, S, Z, P, C.




2-кесте Екiлiк арифметика командалары

A

B

A AND B

A OR B

A XOR B

NOT A

0

0

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

0

1

1

1

1

0

0



JC командасын қолдану командасы:

mov AX, 2

shr AX, 1   

jc L_BitIsSet

...

L_ BitIsSet:

...


JNZ командасын қолдану командасы:

mov AX, 12h ; AX = 0001 0010b

and AX, 80h


jnz L_NotZero

...

L_NotZero:

...



Лабораториялық жұмыстың орындалу тәртiбi:

  1. Жоғарыда көрсетiлген программасы бар текстiк файл құрып, ассемблерлеп, құрастырып, .exe файл құру қажет. Оның орындалуын td.exe программасының көмегiмен бақылау қажет.

  2. Программаны оқытушыға көрсетiп, қорғауға дайындалу қажет.


















Арифметические и логические команды


Большинство арифметических и логических команд влияют на регистр состояния процессора (или Флаги

Как вы можете видеть, в этом регистре 16 бит. Каждый бит называется флагом и может принимать значение 1 или 0

  • Carry Flag (CF) - перенос - этот флаг устанавливается в 1, когдаслучается беззнаковое переполнение. Например, если вы увеличили байт 255 + 1 (результат не помещается в диапазоне 0...255). Если переполнение не происходит, этот флаг установлен в 0

  • Zero Flag (ZF) - ноль - устанавливается в 1, если результат равен нулю. Если результат не нулевой, то этот флаг устанавливается в 0

  • Sign Flag (SF) - знак - установлен в 1, если результат -отрицательное число. Если результат положительный, то этот флаг устанавливается в 0. Обычно этот флаг принимает значение старшего значащего бита. 

  • Overflow Flag (OF) - переполнение - устанавливается в 1, если случается переполнение при арифметических операциях со знаком. Например, если вы увеличили байт 100 + 50(результат не помещается в диапазоне -128...127). 

  • Parity Flag (PF) - контроль четности - этот флаг устанавливается в 1, если в младших 8-битовых данных четное число. Если число нечетное, то этот бит установлен в 0. Даже если результат - это слово, то анализируются только 8 младших бит! 

  • Auxiliary Flag (AF) - внешний перенос - установлен в 1, если случилось переполнение без знака младших 4-х битов (т.е. перенос из 3-го бита). 

  • Interrupt enable Flag (IF) - прерывание - если этот флаг установлен в 1, то процессор реагирует на прерывание от внешних устройств. 

  • Direction Flag (DF) - направление - этот флаг используется некоторыми командами для обработки цепочки данных. Если флаг установлен в 0 - обработка происходит в прямом направлении, если 1 - в обратном. 

Имеются три группы команд.

Первая группа: ADDSUB,CMPANDTESTORXOR

Эти типы операндов поддерживаются:

REG, memory

memory, REG

REG, REG

memory, immediate

REG, immediate

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], переменная, и т.п...

immediate: 5, -24, 3Fh, 10001101b, и т.п...


После операции между операндами результат всегда записывается в первый операнд. Команды CMP и TEST воздействуют только на флаги и не записывают результат (эта команда используется для принятия решения во время выполнения программы). 

Эти команды влияют только на флаги:
       CFZFSFOFPFAF.

  • ADD - Прибавить второй операнд к первому. 

  • SUB - Вычесть второй операнд из первого. 

  • CMP - Вычесть второй операнд из первого только для флагов.

  • AND - Логическое И между всеми битами двух операндов. При этом соблюдаются правила:

1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

Как видите, мы получаем 1 только в том случае, если оба бита равны 1

  • TEST - То же самое, что AND, но только для флагов

  • OR - Логическое ИЛИ между всеми битами двух операндов. При этом соблюдаются правила:

1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0

Как видите, мы получаем 1 каждый раз, когда хотя бы один бит равен 1

  • XOR - Логическое XOR (исключающее ИЛИ) между всеми битами двух операндов. При этом соблюдаются правила:

1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

Как видите, мы получаем 1 каждый раз, когда биты имеют различное значение. 


Вторая группа: MULIMULDIVIDIV

Эти типы операндов поддерживаются:

REG
memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], переменная, и т.п...

Команды MUL и IMUL влияют только на эти флаги:
       CFOF

Если результат превышает размер операнда, то эти флаги установлены в 1, если результат умещается в размер операнда, то эти флаги установлены в 0

Для команд DIV и IDIV флаги не определены.

  • MUL - беззнаковое умножение:

если операнд - это байт: AX = AL * операнд. если операнд - это слово: (DX AX) = AX * операнд.

  • IMUL - умножение со знаком: если операнд - это байт: AX = AL * операнд. если операнд - это слово: (DX AX) = AX * операнд.

  • DIV - беззнаковое деление: если операнд - это байт: AL = AX / операнд AH = остаток (модуль). . если операнд - это слово: AX = (DX AX) / операнд DX = остаток (модуль). .

  • IDIV - деление со знаком: если операнд - это байт: AL = AX / операнд AH = остаток (модуль). . если операнд - это слово: AX = (DX AX) / операнд DX = остаток (модуль). .

Третья группа: INCDECNOTNEG

Эти типы операндов поддерживаются:

REG
memory

REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.

memory: [BX], [BX+SI+7], переменная, и т.п...

Команды INC и DEC влияют только на эти флаги: ZFSFOFPFAF.

Команда NOT не влияет ни на какие флаги!

Команда NEG влияет только на эти флаги: CFZFSFOFPFAF.

  • NOT - инвертирование каждого бита операнда. 

  • NEG - Меняет знак операнда (дополнение до двух). Обычно она инвертирует каждый бит операнда, а затем прибавляет к нему единицу. Например, 5 преобразуется в -5, а -2 преобразуется в 2.






Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!