По введенному номеру месяца вывести время года - Assembler (245954)
Формулировка задачи:
data segment mes1 db 10, 13, 'January$' mes1_e db 10, 13, 'Neverno$' data ends code segment start: assume cs:code, ds: data mov ax, data mov ds, ax mov ah, 09h ;вводим первый символ и запоминаем его в bl int 21h mov bl, ah mov ah, 09h lea dx, mes1_e ;пусть символы неравны cmp bl, al ;сравниваем их jne m_ne ;если они неравны, переходим на вывод сообщения lea dx, mes1 ;иначе загружаем адрес другой строки m_ne: int 21h mov ax, 4c00h int 21h code ends end start
Решение задачи: «По введенному номеру месяца вывести время года»
textual
Листинг программы
.data Season label dw offset asWinter dw offset asSpring dw offset asSummer dw offset asAutumn asWinter db 'Winter', '$' asSpring db 'Spring', '$' asSummer db 'Summer', '$' asAutumn db 'Autumn', '$' .code ................. mov al, [S] mov ah, 0 mov si, ax shl si, 1 mov dx, Season[si] mov ah, 09h int 21h .................
Объяснение кода листинга программы
Список с пояснениями: .data
- Season label
- dw offset asWinter
- dw offset asSpring
- dw offset asSummer
- dw offset asAutumn
- asWinter db 'Winter', '$'
- asSpring db 'Spring', '$'
- asSummer db 'Summer', '$'
- asAutumn db 'Autumn', '$' .code
- .................
- mov al, [S]
- mov ah, 0
- mov si, ax
- shl si, 1
- mov dx, Season[si]
- mov ah, 09h
- int 21h
- ................. В данном коде используется язык Assembler. Список переменных и их назначений:
- al - в этом случае используется для хранения введенного номера месяца.
- ah - используется как дополнительный регистр.
- si - используется как индекс для обращения к строкам в сегменте данных.
- dx - используется для хранения адреса строки с временем года.
- S - это сегментная переменная, которая содержит введенный номер месяца. Метод работы программы:
- Введенный номер месяца сохраняется в регистре al.
- Регистр ah инициализируется нулем.
- Сегмент регистра si устанавливается равным сегменту регистра al.
- Индекс в регистре si устанавливается равным значению регистра al, умноженному на 10 (сдвиг вправо на 11 позиций).
- В dx записывается адрес строки с временем года, которое соответствует введенному номеру месяца.
- В регистре ah устанавливается значение 09h, что является кодом функции вывода строки на экран.
- Выполняется интеркаляция int 21h, которая выводит на экран строку, адрес которой содержится в регистре dx.