24 / 24 / 0
Регистрация: 13.06.2017
Сообщений: 72
1

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

27.11.2017, 13:02. Показов 1178. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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' вывело Апрель.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2017, 13:02
Ответы с готовыми решениями:

По введенному номеру месяца вывести время года
Помогите найти ошибку. При вводе цифры от 10 до 11 появляется надпись о том что я ввел номер зимы,...

По введенному номеру месяца вывести время года
data segment mes1 db 10, 13, 'January$' mes1_e db 10, 13, 'Neverno$' data ends ...

Составить программу, которая по введенному номеру месяца и номеру года выводит количество дней в этом месяце(использовать операторы printf и scanf)
Составить программу, которая по введенному номеру месяца и номеру года выводит количество дней в...

Составить программу, которая по введенному номеру месяца определяет время года
Составить программу, которая по введенному номеру месяца определяет время года, например, ...

2
Эксперт Hardware
Эксперт Hardware
5749 / 2220 / 381
Регистрация: 29.07.2014
Сообщений: 3,036
Записей в блоге: 4
27.11.2017, 19:19 2
Darkness_, можно сделать чз таблицу переходов..
Собираешь все адреса в одном месте, и умножив ввод на 2, добавляешь его к начальному адресу. Правда в таблице отсчёт с нуля, поэтому от ввода нужно отнять единицу. На фасме это выглядит примерно так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
;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            ;
0
Модератор
Эксперт по электронике
8381 / 4263 / 1618
Регистрация: 01.02.2015
Сообщений: 13,269
Записей в блоге: 5
27.11.2017, 20:46 3
И пояснения к аналогичному фрагменту кода По введенному номеру месяца вывести время года

Добавлено через 1 минуту
Darkness_, уточните задание, т.к. в заголовке темы
"Написать программу, которая по введенному номеру месяца выводит время года"
А в вашем коде выводится название месяца.
0
27.11.2017, 20:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2017, 20:46
Помогаю со студенческими работами здесь

Составить программу, которая по введенному номеру месяца определяет время года
Составить программу, которая по введенному номеру месяца определяет время года, например, ...

Составить программу,которая определяет текущее время года по введенному номеру месяца
1.Составить программу,которая определяет текущее время года по введенному номеру месяца помогите...

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

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru