Написать программу, которая по введенному номеру месяца выводит время года - Assembler

Узнай цену своей работы

Формулировка задачи:

data segment    
mes1 db 10, 13, 'January$'
mes1_e db 10, 13, 'Neverno$' 
mes2 db 10, 13, 'February$'  
mes3 db 10, 13, 'March$'
mes4 db 10, 13, 'April$'
mes5 db 10, 13, 'May$'
mes6 db 10, 13, 'June$'
mes7 db 10, 13, 'Jule$'
mes8 db 10, 13, 'August$'
mes9 db 10, 13, 'September$'
mes10 db 10, 13, 'October$'
mes11 db 10, 13, 'November$'
mes12 db 10, 13, 'December$'
 
data ends                    
code segment     
start:   
    assume cs:code, ds: data         
    mov ax, data     
    mov ds, ax   
                 
    mov ah, 01h ;вводим первый символ и запоминаем его в bl
    int 21h  
    mov bl, al           
 
    mov bl, '1'
    mov ah, 09h 
    lea dx, mes1_e  ;пусть символы равны 
    cmp bl, al  ;сравниваем их
    jne m_ne    ;если они неравны, переходим на вывод сообщения
    lea dx, mes2    ;иначе загружаем адрес другой строки
    lea dx, mes3
    lea dx, mes4
    m_ne:   int 21h  
 
    mov ah, 01h ;вводим первый символ и запоминаем его в bl
    int 21h  
    mov bl, al        
 
    mov bl, '2'
    mov ah, 09h  
    lea dx, mes3  ;пусть символы неравны
    cmp bl, al  ;сравниваем их
    jne m_ne1    ;если они неравны, переходим на вывод сообщения
    lea dx, mes1_e    ;иначе загружаем адрес другой строки
    m_ne1:   int 21h
  
    mov ah, 01h ;вводим первый символ и запоминаем его в bl
    int 21h  
    mov bl, al
 
    mov bl, '3'
    mov ah, 09h 
    lea dx, mes4  ;пусть символы неравны 
    cmp bl, al  ;сравниваем их
    jne m_ne2    ;если они неравны, переходим на вывод сообщения
    lea dx, mes1_e    ;иначе загружаем адрес другой строки
    m_ne2:   int 21h
    mov ax, 4c00h    
    int 21h  
 
    mov ah, 01h ;вводим первый символ и запоминаем его в bl
    int 21h  
    mov bl, al
 
    mov bl, '4'
    mov ah, 09h  
    lea dx, mes5  ;пусть символы неравны
    cmp bl, al  ;сравниваем их
    jne m_ne3    ;если они неравны, переходим на вывод сообщения
    lea dx, mes1_e    ;иначе загружаем адрес другой строки
    m_ne3:   int 21h
code ends    
end start
У меня выводит числа по порядку, а как сделать чтобы я ввел к примеру '1' вывело Январь, ввел '4' вывело Апрель.

Решение задачи: «Написать программу, которая по введенному номеру месяца выводит время года»

textual
Листинг программы
;fasm-code..
;------------
org     100h
jmp     start
 
table  dw  m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12  ;таблица переходов
err    db  10,13, 'Neverno $'
 
m1     db  10,13, 'January $'
m2     db  10,13, 'February $'
m3     db  10,13, 'March $'
m4     db  10,13, 'April $'
m5     db  10,13, 'May $'
m6     db  10,13, 'June $'
m7     db  10,13, 'Jule $'
m8     db  10,13, 'August $'
m9     db  10,13, 'September$'
m10    db  10,13, 'October $'
m11    db  10,13, 'November $'
m12    db  10,13, 'December $'
 
start:  mov    cx,2           ; макс.длина ввода
        xor    bx,bx          ; здесь будет введённое число
@inp:   mov    ah,1           ; ввод с эхом..
        int    21h            ;
        cmp    al,13          ; Enter - закончить
        je     @stop          ;
        sub    al,'0'         ; символ в число
        shl    bx,8           ; сдвинуть ВХ влево (для 2-значного)
        mov    bl,al          ; число в BL
        loop   @inp           ;
 
@stop:  shl    bl,4           ;
        shr    bx,4           ; собираем ввод из ВХ в BL
        or     bl,bl          ;
        jz     @err           ; ноль - ошибка!
        cmp    bl,12h         ;
        jbe    @ok            ; если <= 12
 
@err:   mov    ah,9           ; ERROR!
        mov    dx,err         ;
        int    21h            ;
        jmp    @exit          ;
 
@ok:    test   bl,10000b      ; проверяем старшую тетраду
        jz     @prn           ; значит число меньше 9.
        sub    bl,6           ; иначе: HEX --> DEC
 
@prn:   dec    bl             ; в таблице отсчёт с нуля
        shl    bl,1           ; адрес - 2 байтный, поэтому х2
        mov    si,table       ; адрес таблицы
        add    si,bx          ; добавить смещение
        mov    ah,9           ;
        mov    dx,[si]        ; взять адрес из таблицы
        int    21h            ; вывод!!!
 
@exit:  mov    ah,8           ; Go to DOS
        int    21h            ;
        int    20h            ;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы