6. Команды сравнений и переходов

Цель работы: ознакомление с командами переходов и сравнений, а также правилами их использования при применении ближних и дальних ссылок.

Теоретическая часть

Команда CMP

Команда сравнения производит вычитание второго операнда из первого, не изменяя их значений, изменяются только флажки.

Синтаксис:

CMP <назначение>, <источник>

Изменяемые флажки: af, cf, pf, sf, zf, of.

Анализируя флажки, можно определить результат сравнения. Известно, что команда cmp ax, bx выполняет операцию (ax)–(bx), и если после этого вычитания zf = 1, следовательно, (ax)=(bx), а если cf = 1, то первый операнд меньше второго для беззнаковых чисел:(ax)<(bx).

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

Команда безусловного перехода JMP

Синтаксис:

JMP <назначение>

где назначение – это адрес (метка), по которому должен быть осуществлен переход. Определить назначение можно также с помощью метки или выражения. Метка может быть дальней или ближней (near или far) и содержать имя процедуры или имя метки, описанной с помощью директивы label.

Примеры задания меток:

proc_add procedure

m1:

aici:

et3 label far

gata label near

Примеры команды jmp:

JMP proc_add

JMP m1

JMP et3

JMP gata

С помощью команды jmp можно задать три типа переходов:

  • короткий переход – short, адрес назначения находится на расстоянии [-128, +127] байтов от места нахождения команды jmp;
  • ближний переход – near, адрес назначения находится в том же сегменте, что и команда jmp;
  • дальний переход – far, адрес назначения может находиться в другом сегменте кода.

Команды условного перехода

Синтаксис:

jcc <назначение>

где cc – условие перехода.

Директивы этой группы осуществляют переход только при выполнении определенных условий. Команды условного перехода имеют следующие характеристики:

  • Все инструкции условного перехода являются командами короткого перехода (тип short), что означает, что целевой адрес должен быть в пределах диапазона [-128, 127] байт от команды перехода;
  • Для одной и той же команды может существовать несколько мнемонических обозначений;
  • Команды условных переходов флажков не меняют.

Команды условных переходов используются после команд, изменяющих флажки состояний. Чаще всего их используют после команды сравнения cmp. В таблице приведены мнемоники команды перехода. При чтении таблицы необходимо помнить два правила: 1) для анализа знаковых величин используются сравнения ,,greater” и ,,less”; 2) для анализа беззнаковых величин используются сравнения ,,above” и ,,bellow”.

Мнемоника команды Условия перехода Пояснения
je, jz zf=1 Equal, Zero
jl, jnge sf?of Less, Not Greater or Equal
jle, jng sf?of или zf=1 Less or Equal, Not Greater
jb, jnae, jc cf=1 Below, Not Above or Equal, Carry
jbe, jna cf=1 или zf=1 Below or Equal, Not Above
jp, jpe pf=1 Parity, Parity Even
jo of=1 Overflow
js sf=1 Sign
jne, jnz zf=0 Not Eaual, Not Zero
jnl, jge sf=of Not Less, Greater or Equal
jnle, jg sf=of и zf=0 Not Less or Equal, Greater
jnb, jae, jnc cf=0 Not Below, Above or Equal, Not Carry
jnbe, ja cf=0 или zf=0 Not Below or Equal, Above
jnp, jpo pf=0 Not Parity, Parity Odd
jno of=0 Not Overflow
jns sf=0 Not Sign

Пример

Написать программу, которая проверяет, является ли введенный символ буквой ‘t’, и выводит ее эквивалент в верхнем регистре или сообщение “false” в противном случае.

Например:
Введите символ: t
T
или
Введите символ: s
false
Рассмотрим фрагмент программы.

	mov ah,1	;читаем символ
	int 21h
	mov var, al	;сохраняем введенный символ в переменной var
	cmp var, ’t’	;сравниваем введенный символ с символом t
	jne m1		;если символы не совпали, то переходим на m1
	sub var, 20h	;если символы совпали, то преобразуем ‘t’ в ‘T’
	mov ah, 2	;выводим новый символ на экран
	mov dl, var
	int 21h
	jmp sfarsit
m1:	mov ah, 9	;выводим сообщение False, содержащее 
lea dx, False		;текст “false”
	int 21h
sfarsit: ...

Задания

  1. Написать программу, соответствующую вашему варианту.
  2. Зациклить выполнение задания до тех пор, пока не будет введен символ пробел.

Варианты задач

1. Написать программу, которая проверяет, является ли введенный символ заглавной латинской буквой, и выводит ее эквивалент в нижнем регистре или сообщение „error”.

Например:
Введите символ: A
a
или
Введите символ: b
Error

2. Написать программу, которая проверяет, является ли введенный символ арифметической операцией (+, -, *, /), и выводит сообщение „true”, иначе выводит сообщение „false”.

Например:
Введите символ: *
true
или
Введите символ: b
false

3. Написать программу, которая проверяет, является ли введенный символ цифрой, и выводит символ ‚!’, иначе выводит сообщение „error”.

Например:
Введите символ: 5
!
или
Введите символ: (
error

4. Написать программу, которая проверяет, является ли введенный символ знаком препинания (– , . ! ? : ;), и выводит сообщение „true”, иначе выводит сообщение „false”.

Например:
Введите символ: !
true
или
Введите символ: 2
false

5. Написать программу, которая проверяет, является ли введенный символ малой латинской буквой, и выводит ее эквивалент в верхнем регистре или сообщение „error”.

Например:
Введите символ: r
R
или
Введите символ: 6
error

6. Написать программу, которая проверяет, является ли введенный символ скобкой (, ), [, ], {, }, и выводит сообщение „true”, иначе выводит сообщение „false”.

Например:
Введите символ: )
true
или
Введите символ: k
false

7. Написать программу, которая проверяет, является ли введенный символ гласной буквой (a, e, i, o, u, A, E, I, O, U), и выводит сообщение „ok”, иначе выводит сообщение „error”.

Например:
Введите символ: e
ok
или
Введите символ: m
error

8. Написать программу, которая проверяет, является ли введенный символ согласной буквой ‚m’, ‘n’, ‘p’ или ‘r’, и выводит сообщение „ok”, иначе выводит сообщение „error”.

Например:
Введите символ: m
ok
или
Введите символ: 4
error

9. Написать программу, которая проверяет, является ли введенный символ специальным символом (~, @, #, $, %, ^, &, |, \), и выводит сообщение „ true”, иначе выводит сообщение „ false”.

Например:

Введите символ: &
true
или
Введите символ: A
false

10. Написать программу, которая проверяет, является ли введенный символ символом с кодом меньше чем 48 или больше чем 122, и выводит сообщение „true”, иначе выводит сообщение „false”.

Например:
Введите символ: “
true
или
Введите символ: z
false

11. Написать программу, которая проверяет, является ли введенный символ одной из цифр ‘1’, ‘3’, ‘5’, ‘7’ или ‘9’, и выводит сообщение „ok”, иначе выводит сообщение „error”.

Например:
Введите символ: 3
ok
или
Введите символ: z
error

12. Написать программу, которая проверяет, является ли введенный символ одной из цифр ‘2’, ‘4’, ‘6’ или ‘8’, и выводит сообщение „ok”, иначе выводит сообщение „error”.

Например:
Введите символ: 4
ok
или
Введите символ: z
error

13. Написать программу, которая проверяет, является ли введенный символ символом ‘$’ или ‘@’, и выводит сообщение „true”, иначе выводит сообщение „false”.

Например:
Введите символ: $
true
или
Введите символ: z
false

14. Написать программу, которая проверяет, является ли введенный символ одним из символов ‘j’, ‘k’, ‘f’, ‘g’, и преобразовывает их в верхний регистр, иначе выводит сообщение „false”.

Например:
Введите символ: k
K
или
Введите символ: T
false

15. Написать программу, которая проверяет, является ли введенный символ одним из символов ‘A’, ‘C’, ‘D’, ‘E’, и выводит сообщение ‘OK’, иначе выводит сообщение „error”.

Например:
Введите символ: D
OK
или
Введите символ: T
error

16. Написать программу, которая проверяет, является ли введенный символ одним из символов ‘<’, ‘=’, ‘>’, ‘?’, и выводит сообщение “true”, иначе выводит сообщение „false”.

Например:
Введите символ: <
true
или
Введите символ: T
false

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов