Как сделать перевод строки в ассемблере

Обновлено: 07.07.2024

Рассмотрим пример простейшей программы, выводящей на экран надпись Hello world (Здравствуй, мир, англ., greet - приветствие).

Программа Выполняемые действия
Data SEGMENT Greet DB 'Hello world',13,10, '$' Data ENDS Assume CS: Code, DS:Data Code SEGMENT Start: mov ax, Data mov ds,ax; mov dx, OFFSET Greet mov ah,9 int 21h mov al,0 mov ah, 4ch int 21h Code ENDS Stack1 SEGMENT Stack DB 100h DUP(?) Stack1 ENDS END Start Начало сегмента данных Конец сегмента данных Объявление, что регистры процессора CS и DS будут содержать номера сегментов с именами Code и Data Начало сегмента команд Метка Поместить в регистр АХ номер сегмента Data Переслать АХ в регистр DS (команды непосредственной загрузки регистра DS нет) В регистр dx помещается смещение надписи относительно DS В регистр ah помещается номер 9 функции DOS “выведи надпись” Прерывание (вывод надписи) Возвращение в систему: в регистр ah помещается номер функции “возврат в систему” Прерывание (окончание выполнения программы) Конец сегмента команд Начало сегмента стека Конец сегмента стека Директива END заканчивает текст программы и предписывает начинать ее с команды, снабженной меткой Start

Программа на ассемблере – это последовательность предложений, каждое из которых записывается в отдельной строке. Комментарии начинаются с символа “;”. Общий синтаксис предложений-команд:

В квадратных скобках указаны необязательные части команды. Метка нужна для ссылок на команду из других мест программы. Разрешается указывать в строке только одну метку с двоеточием (например, Start: ) и больше ничего, тогда она метит следующую команду программы. Мнемокод (мнемонический код) – это служебное слово, указывающее в символьной форме операцию, которую должна выполнить команда. Примерами операндов являются числа и имена переменных. Если операндов несколько, они отделяются друг от друга запятыми. Операндами могут быть и выражения, составляемые из чисел, имен переменных и операторов. Основные операторы ассемблера приведены в табл. 2.1.

Категория Operator What it is (or does)
() [ ] Подвыражение (Subexpression) Ссылка на ячейку памяти (Memory reference)
. Селектор структурных элементов (Structure member selector)
Унарные + - Унарный плюс (Unary plus) Унарный минус (Unary minus)
: Переопределение сегмента (Segment override)
OFFSET SEG TYPE PTR Возвращает смещение (Returns offset part) Возвращает сегментную часть Returns segment part Возвращает тип (байтовый размер) Returns type (byte size) Приведение типа (Typecast)
* / MOD SHL SHR Умножение (Multiplication) Целое деление (Integer division) Integer modulus (remainder) Логический сдвиг влево (Logical shift left) Логический сдвиг вправо (Logical shift right)
Аддитивные + - Двоичное сложение (Binary addition) Двоичное вычитание (Binary subtraction)
Битовые NOT AND OR XOR Битовое НЕ Битовое И Битовое ИЛИ Битовое Исключающее ИЛИ

В программе на ассемблере для описания переменных и их имен должны присутствовать предложения-директивы с общим синтаксисом:

Имя (например, Greet) – это, как правило, имя константы или переменной, описываемой данной директивой. Название директивы – это служебные слова. Директива DB (define byte – определить байт) определяет данные размером в байт. При ее выполнении ассемблер вычисляет операнды и записывает их значения в последовательные байты памяти, начиная с первого незанятого. Первому из байтов дается указанное имя, по которому на этот байт можно ссылаться из других мест программы. Когда ассемблер встретит в программе имя переменной, он заменит его на адрес, который принято называть значением имени. По описанию переменной запоминается также ее размер (тип). Например, директива Greet DB 'Hello world',13,10, '$' записывает последовательные байты памяти коды символов, помещенных в кавычки, код 10 (перевод строки), код 13 (возврат каретки) устанавливающий курсор на начало текущей строки, код символа конца строки '$'. Директивы определения помещаются в начале программы до команд.

Задания:

1. Найдите в тексте программы директиву определения данных и команды. В командах найдите и выпишите мнемокоды и операции, которые им соответствуют.

2. Выполните в программе-оболочке Far следующие действия (рис. 3.42):

1) Создайте в Far файл Greet.ASM и наберите программу.

2) Cкомпилируйте с помощью команды tasm greet.

3) Скомпонуйте с помощью команды tlink greet.

Получив исполняемый файл Greet.EXE выполните программу, например, введя имя Greet в командную строку.


Рис. 2.12. Команды и результаты компиляции и компоновки программы

3. Выполните то же самое задание с помощью интегрированной среды TASM. Скопируйте папку ТА из папки Student_MUPK_NW:\COMMON\LANGV в папку C:\Student, запустите файл ta.exe. Нажмите клавишу F10 для перехода в главное меню, выполните команду File-Load (Файл-Загрузить), нажмите Enter, выберите из списка нужный файл. Выполните настройку - отключите опцию создания com-файла (рис. 2.13) и сохраните ее командой Options-Save options.

Рис. 2.13. Изменение опций компоновщика с отключением опции создания
com-файла

Затем выполните команды Compile to OBJ (компиляция), Make EXE file(компоновка) (рис. 2.14). В случае успеха выполните команду Run-Run program, затем Run-User screen.

Рис. 2.14. Создание exe-файла

В рассмотренных здесь и ниже примерах использованы вывод и ввод символов, реализуемых при выполнении одной из группы команд прерывания с шестнадцатиричным номером 21h дисковой операционной системы MS DOS. Перед выполнением команды прерывания INT в регистр AH записывают номер нужной функции. Функции с номерами 4Сh, 2 и 9 выполняют возврат управления операционной системе для продолжения выполнения программы, вывод одного символа на экран и вывод строки. Символ с кодами 10 (перевод строки) перемещает курсор в следующую строку экрана, оставляя его в той же колонке. Символ 13 (возврат каретки) устанавливает курсор на начало текущей строки. Функция 0Ch прерывания 21h вводит с клавиатуры символы (с эхо-печатью их на экране) до тех пор, пока не будет нажата клавиша Enter, и записывает их в буфер размером 15 позиций. Пока не нажата клавиша Enter, набираемый текст можно редактировать клавишами Backspace (отмена последнего символа) и Esc (отмена всего набранного текста). Функции ввода 0Ah, 0Ch и другие считывают символы из начала буфера.

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Описание макросов используемых в учебном курсе

Макросы подключаются путём указания в начале файла с ассемблерным кодом include console.inc. На самом деле сама реализация макросов лежит в каталоге include в файле io.inc.

Имя макрокоманды не является служебным именем, поэтому большие и маленькие буквы в них различаются, однако для удобства программирования при описании соответствующих макроопределений иногда объявлены синонимы таких имён, например, у имени макрокоманды gotoxy есть синонимы gotoXY и GotoXY.

Все макрокоманды вывода (outchar, outint, outstr, gotoxy, msgbox и др.) не портят регистры и флаги. Макрокоманды ввода (inchar, inint, readkey и др.) не изменяют регистры (за исключением тех, на которых они возвращают результат), флаги меняет только макрокоманда inint, она устанавливает определённые флаги в соответствие с результатом своей работы.

exit - макрокоманда выхода из программы

Формат: exit

Следует помнить, что любая ассембленрная программа должна в конце концов вызвать системный вызов exit, обращение к которому как-раз реализовано внутри макроса exit.

ClrScr - макрокоманда очистки окна консоли

Формат: ClrScr

Она эквивалентна вызову процедуры ClrScr языка Free Pascal. Имеет короткий синоним Cls.

ConsoleTitle - макрокоманда задания заголовка окна консоли

Формат: ConsoleTitle Title

Эта макрокоманда меняет заголовок консольного окна. Текст заголовка используется диспетчером задач (процессов) Windows для идентификации задачи в списке выполняемых приложений. В качестве параметра может использоваться как непосредственный операнд-текст, так и адрес текста.

outstr, outstrln - макрокоманда вывода строки текста

Формат: outstr[ln] text

Эта макрокоманда выводит на экран строку текста, определяемую своим параметром. В качестве параметра может использоваться как непосредственный операнд-текст, так и адрес текста.

Как и в Паскале, добавление к имени макрокоманды окончания ln приводит к переходу после вывода на начало новой строки.

Текст может заключаться как в двойные, так и в одинарные кавычки (апострофы). В строку выводимого текста можно вставлять через запятые числовые коды любых символов, например:

Реальное число введённых символов (без учёта нулевого символа) возвращается на регистре EAX, например:

Вводит в буферизованном режиме один символ с клавиатуры. То есть вводится текст до перевода строки, а затем по символьно выдаётся программе.

Если по внешнему виду операнда нельзя установить его тип (и, следовательно, размер в байтах), то Ассемблер требует явно указать тип оператором ptr, например:

outchar, outcharln - макрокоманда вывода символа на экран

Формат: outchar[ln] op1[,text]

Ограничение: К сожалению, пока макрокоманда работает неправильно, при использовании регистра ESP как базового, например:

надо производить в две команды, например:

Печатает символ на стандартный поток вывода. Операнд op1 может иметь формат i8, r8 или m8. Значение операнда трактуется как беззнаковое число, являющееся кодом (номером) символа в алфавите, этот символ выводится в текущую позицию экрана. В качестве необязательного второго параметра можно задать текстовую строку, которая выводится перед символом, формат этого последнего параметра такой же, как и в макрокоманде outstr.

Как и в Паскале, добавление к имени макрокоманды окончания ln приводит к переходу после вывода на начало новой строки.

Для задания кода символа удобно использовать символьную константу языка Ассемблер (например, 'A'), тогда можно не задаваться вопросом о соответствии самих символов и их номеров в используемом алфавите. Такая константа преобразуется компилятором Ассемблера именно в код этого символа, т.е. конструкция 'A' полностью эквивалентна записи ord('A') языка Паскаль. Например, макрокоманда outchar '*' выведет символ звёздочки на место курсора. Другими словами, макрокоманда outchar эквивалентна оператору Паскаля для вывода одного символа Write(op1).

inint, inintln - макрокоманда ввода целого числа

Формат: intint[ln] op1[,text]

Считывает число в текстовом виде со стандартного потока ввода, преобразуя его в машинный формат. В качестве первого операнда op1 можно использовать форматы r8, r16, r32, m8, m16 или m32. В качестве необязательного второго операнда можно задать строку-приглашение ко вводу, формат этого последнего параметра такой же, как и в макрокоманде outstr.

Добавление к имени макрокоманды окончания ln приводит к очистке буфера ввода после чтения и эквивалентно вызову стандартной процедуры Readln языка Паскаль.

Макрокоманда вводит из стандартного потока на место первого операнда любое целое значение из диапазона –2^31..+2^32–1 (этот диапазон является объединением диапазонов знаковых и беззнаковых чисел формата двойного слова dd). При выходе вводимого значения за максимальный диапазон двойного слова макрокоманда выдаёт (предупредительную) диагностику об ошибке:

При этом операнду присваивается значение 7FFFFFFFh (MaxLongint). Такой же результат будет и при явно заданном знаке минус и абсолютном значении введённого числа больше, чем 80000000h (MaxLongword).

В случае, если введённое число превышает размер операнда op1, то производится усечение этого числа без выдачи диагностики об ошибке.

Макрокоманда выставляет флаг CF:=0 при правильном вводе и CF:=1 при неправильном. Для правильного числа также устанавливается флаг ZF:=1, если лексема введённого числа начиналась со знака "–", иначе ZF:=0.

В отличие от Паскаля, где ограничителем лексемы целого значения во входном потоке является символ пробела, табуляции или конец строки, макрокоманда inint дополнительно считает концом целой лексемы любой символ, не являющийся цифрой. В такого "плохого" конца лексемы целого числа (когда конец был не пробельным символом) при возврате устанавливается флаг SF:=1, иначе SF:=0.

Например, из строки "–123ABCD" введётся число –123, во входном потоке останется строка "BCD", при этом будет: SF:=1, ZF:=1 и CF:=0.

ConsoleMode - макрокоманда переключения режима ввода

Формат: ConsoleMode

Включает и выключает перекодирование вводимого текста между кодировками cp866/сp1251. По умолчанию режим такой, какой он есть в Windows, обычно cp866.

GotoXY - макрокоманда перемещения курсора

Формат: GotoXY x,y

Параметры x и y могут быть форматов r8, r16, m8, m16 или i8. Действие этой макрокоманды эквивалентно выполнению оператора процедуры GotoXY(x,y) языка Free Pascal для окна консоли. При выходе x и/или y за границы окна курсор не перемещается.

WhereX, WhereY - макрокоманды определения позиции курсора

Формат: * WhereX * WhereY

Макрокоманда возвращает для WhereX номер столбца позиции курсора (1..80) и для WhereY номер строки в окне консоли. Обычно окно консоли создаётся длиной 50 строк (с возможностью прокрутки текста). Результат возвращается в регистре AL. Эта макрокоманда эквивалентна вызову функции AL:=WhereX языка Free Pascal.

SetTextAttr - макрокоманда смены текущих цветов фона и символов

Формат: SetTextAttr [colors]

Макрокоманда переключает цвет символа и фона, на котором печатается символ. Цвета задаются в палитре из 16 цветов, как и в языке Free Pascal, задаются в параметре формата i8 в виде 16* + .

Определены имена следующих констант цветов:

цвет значение
Black 0h
Blue 1h
Green 2h
Red 4h
Bright 8h
DarkGray Bright
Cyan Blue+Green
Brown Green+Red
Magenta Blue+Red
LightMagenta Bright+Blue+Red
LightGray Blue+Green+Red
LightBlue Bright+Blue
LightGreen Bright+Green
LightRed Bright+Red
Yellow Bright+Green+Red
White Bright+Blue+Green+Red

При отсутствии параметра подразумевается выставление цвета LightGray. Действие макрокоманды эквивалентно (за исключением случая пустого параметра) оператору присваивания языка Free Pascal

Формат: MsgBox Caption,Message[,Style]

Имя Поведение
MB_OK кнопка "OK"
MB_OKCANCEL кнопки "OK" и "Отмена"
MB_ABORTRETRYIGNORE кнопки "Прервать", "Повтор" и "Пропустить"
MB_YESNOCANCEL кнопки "Да", "Нет" и "Отмена"
MB_YESNO кнопки "Да" и "Нет"
MB_RETRYCANCEL кнопки "Повтор" и "Отмена",
MB_CANCELTRYCONTINUE кнопки "Отмена", "Повторить" и "Продолжить"

Пиктограмма окна задаётся битовым признаком:

Имя Иконка
MB_ICONSTOP stop
MB_ICONQUESTION quest
MB_ICONEXCLAMATION notify
обычно здесь выдаётся ещё и звуковой сигнал
MB_ICONASTERISK info
MB_USERICON без пиктограммы (можно сделать свой .ico файл)

При нажатии на кнопку в регистре EAX возвращается код нажатой кнопки. Мнемонические имена этих кодов: IDOK, IDCANCEL (также, если нажать клавишу ESC или крестик закрытия окна), IDABORT, IDRETRY, IDIGNORE, IDYES, IDNO, IDTRYAGAIN, IDCONTINUE

При вводе из окна по умолчанию выбирается (если просто нажать ENTER) первая по порядку из выведенных кнопок, чтобы выбрать по умолчанию другую кнопку, надо в параметре Style задать битовый признак с номером кнопки в окне: MB_DEFBUTTON

В качестве параметров Caption и Message можно использовать как непосредственный операнд-текст, так и адрес текста.

Язык программирования ассемблер сейчас редко используется для решения прикладных задач, однако его изучение позволяет лучше понять принципы работы ЭВМ, операционных систем и трансляторов с языков высокого уровня. В разное время в большинстве ПЭВМ использовались и используются процессоры фирмы Intel (8086/8088, 80186, 80286, i386, i486, Celeron, Pentium и т.д., см. с. 23-25). Эти процессоры поддерживают преемственность на уровне машинных команд: программы, написанные для младших моделей процессоров, без всяких изменений могут быть выполнены на более старших моделях. При этом базовой является система команд процессора 8086. Язык ассемблера - это символьная форма записи машинного языка, его использование существенно упрощает написание машинных программ. Приведем перевод английских слов:

assemble:1. собирать, монтировать, 2. компоновать с помощью ассемблера, ассемблировать, транслировать с помощью ассемблера, транслировать программу с помощью ассемблера

assembling:1. сборка, монтаж, 2. компоновка, ассемблирование, трансляция программы с помощью ассемблера

Для ПЭВМ разработаны разные языки ассемблера. Наиболее распространены язык фирмы Microsoft, названный языком макроассемблера (сокращенно MASM) и язык Turbo Assembler фирмы Borland (сокращенно TASM). Для того, чтобы программы на ассемблере случайно не нанесли вред операционной системе и программному обеспечению, последующие задания рекомендуется выполнять в виртуальной машине.

Рассмотрим пример простейшей программы, выводящей на экран надпись Hello world (Здравствуй, мир, англ., greet - приветствие).

Программа Выполняемые действия
Data SEGMENT Greet DB 'Hello world',13,10, '$' Data ENDS Assume CS: Code, DS:Data Code SEGMENT Start: mov ax, Data mov ds,ax; mov dx, OFFSET Greet mov ah,9 int 21h mov al,0 mov ah, 4ch int 21h Code ENDS Stack1 SEGMENT Stack DB 100h DUP(?) Stack1 ENDS END Start Начало сегмента данных Конец сегмента данных Объявление, что регистры процессора CS и DS будут содержать номера сегментов с именами Code и Data Начало сегмента команд Метка Поместить в регистр АХ номер сегмента Data Переслать АХ в регистр DS (команды непосредственной загрузки регистра DS нет) В регистр dx помещается смещение надписи относительно DS В регистр ah помещается номер 9 функции DOS “выведи надпись” Прерывание (вывод надписи) Возвращение в систему: в регистр ah помещается номер функции “возврат в систему” Прерывание (окончание выполнения программы) Конец сегмента команд Начало сегмента стека Конец сегмента стека Директива END заканчивает текст программы и предписывает начинать ее с команды, снабженной меткой Start

Программа на ассемблере – это последовательность предложений, каждое из которых записывается в отдельной строке. Комментарии начинаются с символа “;”. Общий синтаксис предложений-команд:

В квадратных скобках указаны необязательные части команды. Метка нужна для ссылок на команду из других мест программы. Разрешается указывать в строке только одну метку с двоеточием (например, Start: ) и больше ничего, тогда она метит следующую команду программы. Мнемокод (мнемонический код) – это служебное слово, указывающее в символьной форме операцию, которую должна выполнить команда. Примерами операндов являются числа и имена переменных. Если операндов несколько, они отделяются друг от друга запятыми. Операндами могут быть и выражения, составляемые из чисел, имен переменных и операторов. Основные операторы ассемблера приведены в табл. 2.1.

Категория Operator What it is (or does)
() [ ] Подвыражение (Subexpression) Ссылка на ячейку памяти (Memory reference)
. Селектор структурных элементов (Structure member selector)
Унарные + - Унарный плюс (Unary plus) Унарный минус (Unary minus)
: Переопределение сегмента (Segment override)
OFFSET SEG TYPE PTR Возвращает смещение (Returns offset part) Возвращает сегментную часть Returns segment part Возвращает тип (байтовый размер) Returns type (byte size) Приведение типа (Typecast)
* / MOD SHL SHR Умножение (Multiplication) Целое деление (Integer division) Integer modulus (remainder) Логический сдвиг влево (Logical shift left) Логический сдвиг вправо (Logical shift right)
Аддитивные + - Двоичное сложение (Binary addition) Двоичное вычитание (Binary subtraction)
Битовые NOT AND OR XOR Битовое НЕ Битовое И Битовое ИЛИ Битовое Исключающее ИЛИ

В программе на ассемблере для описания переменных и их имен должны присутствовать предложения-директивы с общим синтаксисом:

Имя (например, Greet) – это, как правило, имя константы или переменной, описываемой данной директивой. Название директивы – это служебные слова. Директива DB (define byte – определить байт) определяет данные размером в байт. При ее выполнении ассемблер вычисляет операнды и записывает их значения в последовательные байты памяти, начиная с первого незанятого. Первому из байтов дается указанное имя, по которому на этот байт можно ссылаться из других мест программы. Когда ассемблер встретит в программе имя переменной, он заменит его на адрес, который принято называть значением имени. По описанию переменной запоминается также ее размер (тип). Например, директива Greet DB 'Hello world',13,10, '$' записывает последовательные байты памяти коды символов, помещенных в кавычки, код 10 (перевод строки), код 13 (возврат каретки) устанавливающий курсор на начало текущей строки, код символа конца строки '$'. Директивы определения помещаются в начале программы до команд.

Задания:

1. Найдите в тексте программы директиву определения данных и команды. В командах найдите и выпишите мнемокоды и операции, которые им соответствуют.

2. Выполните в программе-оболочке Far следующие действия (рис. 3.42):

1) Создайте в Far файл Greet.ASM и наберите программу.

2) Cкомпилируйте с помощью команды tasm greet.

3) Скомпонуйте с помощью команды tlink greet.

Получив исполняемый файл Greet.EXE выполните программу, например, введя имя Greet в командную строку.


Рис. 2.12. Команды и результаты компиляции и компоновки программы

3. Выполните то же самое задание с помощью интегрированной среды TASM. Скопируйте папку ТА из папки Student_MUPK_NW:\COMMON\LANGV в папку C:\Student, запустите файл ta.exe. Нажмите клавишу F10 для перехода в главное меню, выполните команду File-Load (Файл-Загрузить), нажмите Enter, выберите из списка нужный файл. Выполните настройку - отключите опцию создания com-файла (рис. 2.13) и сохраните ее командой Options-Save options.

Рис. 2.13. Изменение опций компоновщика с отключением опции создания
com-файла

Затем выполните команды Compile to OBJ (компиляция), Make EXE file(компоновка) (рис. 2.14). В случае успеха выполните команду Run-Run program, затем Run-User screen.

Рис. 2.14. Создание exe-файла

В рассмотренных здесь и ниже примерах использованы вывод и ввод символов, реализуемых при выполнении одной из группы команд прерывания с шестнадцатиричным номером 21h дисковой операционной системы MS DOS. Перед выполнением команды прерывания INT в регистр AH записывают номер нужной функции. Функции с номерами 4Сh, 2 и 9 выполняют возврат управления операционной системе для продолжения выполнения программы, вывод одного символа на экран и вывод строки. Символ с кодами 10 (перевод строки) перемещает курсор в следующую строку экрана, оставляя его в той же колонке. Символ 13 (возврат каретки) устанавливает курсор на начало текущей строки. Функция 0Ch прерывания 21h вводит с клавиатуры символы (с эхо-печатью их на экране) до тех пор, пока не будет нажата клавиша Enter, и записывает их в буфер размером 15 позиций. Пока не нажата клавиша Enter, набираемый текст можно редактировать клавишами Backspace (отмена последнего символа) и Esc (отмена всего набранного текста). Функции ввода 0Ah, 0Ch и другие считывают символы из начала буфера.

Изучение работы микропроцессора с помощью Турбо Отладчика (Borland Turbo Debugger)

Турбо Отладчик (входящий в состав среды Borland C++) позволяет прослеживать выполнение инструкций ассемблера, содержимое ячеек оперативной памяти и регистров процессора и математического сопроцессора [58]. Он также позволяет отлаживать программы на языках Си и Паскаль. Общий вид команды запуска отладчика

Команда безусловного перехода имеет следующий синтаксис:

Операнд указывает адрес перехода. Существует два способа указания этого адреса, соответственно различают прямой и косвенный переходы.

Прямой переход

Если в команде перехода указывается метка команды, на которую надо перейти, то переход называется прямым.

Косвенный переход

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

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

В системе команд процессора архитектуры x86 не предусмотрена поддержка условных логических структур, характерных для языков высокого уровня. Однако на языке ассемблера с помощью набора команд сравнения и условного перехода вы можете реализовать логическую структуру любой сложности. В языке высокого уровня любой условный оператор выполняется в два этапа. Сначала вычисляется значение условного выражения, а затем, в зависимости от его результата, выполняются те или иные действия. Проводя аналогию с языком ассемблера, можно сказать, что сначала выполняются такие команды, как CMP , AND или SUB , влияющие на флаги состояния процессора. Затем выполняется команда условного перехода, которая анализирует значение нужных флагов, и в случае если они установлены, выполняют переход по указанному адресу.

Что касается команд условного перехода, то их достаточно много, но все они записываются единообразно:

Все команды условного перехода можно разделить на три группы.

В первую группу входят команды, которые обычно ставятся после команды сравнения. В их мнемокодах указывается тот результат сравнения, при котором надо делать переход.

Условие перехода после команды CMP op1, op2

Читайте также: