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,'$'
. - Вся программа заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д