If/else в ассемблере - Assembler
Формулировка задачи:
День добрый, есть небольшой вопрос.
Сегодня решил поучиться работать с if/else в асм, но что-то, вот, не получилось...
Вот код:
Асм начал изучать позавчера, поэтому для меня сложновато :3
Компилирую NASM'ом
begin: textnow db 1 mov cx,3 showText: mov ax,9 sh1: mov dx,offset message1 message1 db 'Hello!',0 sh2: mov dx,offset message2 message2 db 'My name is Assembler',0 sh3: mov dx,offset message3 message3 db 'I have a big functional, but very hard!!!',0 cmp textnow,1 je sh1, cmp textnow,2 je sh2 cmp textnow,3 je sh3 int 21h int 20h inc textnow loop showText
Решение задачи: «If/else в ассемблере»
textual
Листинг программы
org 100h begin: mov cx, 3 showText: mov dx, message1 cmp byte [textnow], 1 je show mov dx, message2 cmp byte [textnow], 2 je show mov dx, message3 show: mov ah, 9 int 21h inc byte [textnow] loop showText int 20h textnow db 1 message1 db 'Hello!',13,10,'$' message2 db 'My name is Assembler',13,10,'$' message3 db 'I have a big functional, but very hard!!!',13,10,'$'
Объяснение кода листинга программы
- Задается начальный адрес кода –
org 100h
. - Создается метка
begin:
для начала выполнения программы. - Загружается значение 3 в регистр cx –
mov cx, 3
. - Создается метка
showText:
для отображения текста. - Загружается адрес строки
message1
в регистр dx –mov dx, message1
. - Выполняется сравнение значения, находящегося в ячейке памяти
textnow
, с 1 –cmp byte [textnow], 1
. - Если условие равенства выполняется, то отображается сообщение –
je show
. - Иначе, загружается адрес строки
message2
в регистр dx и также выполняется сравнение значенияtextnow
с 2 –mov dx, message2
иcmp byte [textnow], 2
. - Если условие равенства выполняется, то отображается соответствующее сообщение.
- В противном случае отображается сообщение из строки
message3
. - Загружается значение 9 в регистр ah для вызова функции вывода строки –
mov ah, 9
. - Вызывается прерывание 21h для вывода сообщения на экран.
- Увеличивается содержимое ячейки памяти
textnow
на 1 –inc byte [textnow]
. - Происходит циклический повтор отображения текста указанное количество раз, определяемое изначально цифрой, загруженной в регистр cx –
loop showText
. - Вызывается прерывание 20h для завершения программы.
- Объявляется переменная
textnow
и присваивается значение 1 –textnow db 1
. - Объявляются строки сообщений
message1
,message2
иmessage3
с соответствующими текстами, завершенными символами перехода на новую строку и завершения строки –db 'Hello!',13,10,'$'
,db 'My name is Assembler',13,10,'$'
,db 'I have a big functional, but very hard!!!',13,10,'$'
. - Вся программа заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д