Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
LinaRey
0 / 0 / 0
Регистрация: 14.04.2016
Сообщений: 31
1

Ввести число в 10-чной системе счисления, вывести его на экран в 16-чной системе счисления

27.10.2017, 15:49. Просмотров 796. Ответов 2

Вывести на экран число представляющие в 16-чной системе счисления. Число вводится в 10-чной с/с. Программа должна быть реализована на Assembler.
Помогите пожалуйста!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2017, 15:49
Ответы с готовыми решениями:

Получить представление числа в р-чной системе счисления
Не могу понять задание "Получить представление числа в р-чной системе счисления(р<10). Как...

Найти наибольшую цифру заданного числа в P-чной системе счисления
Дано натуральное число N. Найти наибольшую цифру заданного числа в P-чной системе счисления....

Напишите код вывода числа 270 в 18-чной системе счисления
Напишите код вывода числа 270 в 18-чной системе счисления!

Ввести целое число N, вывести его в 3-ичной системе счисления
Ввести целое число N, вывести его в 3-ичной системе счисления.

2
Kukuxumushu
1528 / 767 / 139
Регистрация: 13.06.2015
Сообщений: 2,657
Завершенные тесты: 2
27.10.2017, 18:55 2
LinaRey, специально для вас висит в шапке
0
ФедосеевПавел
Модератор
6120 / 2917 / 1186
Регистрация: 01.02.2015
Сообщений: 9,444
Записей в блоге: 1
28.10.2017, 05:27 3
В той теме нет ввода 16-ричных чисел.
LinaRey, пока задания несложные, и ещё есть время - займитесь изучением предмета. Кто знает, вдруг пригодилось бы в будущем, если бы учили?

Задание записано задом наперёд - сначала вЫвести в 16, а потом ввести в 10.
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
@stack  segment para stack
        db      1024 dup(?)
@stack  ends
 
@data   segment
        X       dw      ?
        CrLf    db      0Dh, 0Ah, '$'
        KbdBuf  db      6, ?, 6 dup(?)
        Prompt  db      'Enter a number (dec): ', '$'
        MsgErr  db      'Input error', 0Ah, 0Dh, '$'
        MsgRes  db      'The number (hex): ', '$'
@data   ends
 
@code   segment
        assume  cs:@code, ds:@data, ss:@stack
main    proc
        ;инициализация сегментного регистра данных
        mov     ax,     @data
        mov     ds,     ax
 
EnterNumber:
        ;ввод строки с числом в 10-й системе счисления
        mov     ah,     09h
        lea     dx,     [Prompt]
        int     21h
        mov     ah,     0Ah
        lea     dx,     [KbdBuf]
        int     21h
        ;перевод строки
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
        ;преобразование введённой строки в число
        lea     si,     [KbdBuf+1]
        lea     di,     [X]
        call    Str2Num
        jc      Error
        jmp     ShowNumber
Error:
        mov     ah,     09h
        lea     dx,     [MsgErr]
        int     21h
        jmp     EnterNumber
 
        ;вывод результата на экран
ShowNumber:
        mov     ah,     09h
        lea     dx,     [MsgRes]
        int     21h
 
        mov     ax,     [X]
        call    ShowHex
 
        ;перевод строки
        mov     ah,     09h
        lea     dx,     [CrLf]
        int     21h
 
        ;завершение программы
        mov     ax,     4C00h
        int 21h
main    endp
 
; преобразования строки в число
; на входе:
; ds:[si] - строка с числом
; ds:[di] - адрес числа
; на выходе
; ds:[di] - число
; CY - флаг переноса (при ошибке - установлен, иначе - сброшен)
Str2Num proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    ds
        push    es
 
        push    ds
        pop     es
 
        mov     cl, ds:[si]
        xor     ch, ch
 
        inc     si
 
        mov     bx, 10
        xor     ax, ax
 
@@Loop:
        mul     bx         ; умножаем ax на 10 ( dx:ax=ax*bx )
        mov     [di], ax   ; игнорируем старшее слово
        cmp     dx, 0      ; проверяем, результат на переполнение
        jnz     @@Error
 
        mov     al, [si]   ; Преобразуем следующий символ в число
        cmp     al, '0'
        jb      @@Error
        cmp     al, '9'
        ja      @@Error
        sub     al, '0'
        xor     ah, ah
        add     ax, [di]
        jc      @@Error    ; Если сумма больше 65535
        inc     si
 
        loop    @@Loop
 
        mov     [di], ax
        clc
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
@@Error:
        xor     ax, ax
        mov     [di], ax
        stc
        pop     es
        pop     ds
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
Str2Num endp
 
;выводит на экран в 16 системе счисления содержимое регистра AX
; входные данные:
; ax - число для отображения
ShowHex proc
        push    ax
        push    bx
        push    cx
        push    dx
 
        ; Начинаем перевод числа AX в строку
        mov     cl,     16-4    ; 16-битный регистр, будем выводить по 4 бита (0..F)
        xchg    bx,     ax      ; Сохраняем число в DX
 
@@Repeat:
 
        mov     ax,     bx      ; Восстанавливаем число в AX
        shr     ax,     cl      ; Сдвигаем на CL бит вправо
        and     al,     0Fh     ; Получаем в AL цифру 0..15
        add     al,     90h     ; special hex conversion sequence
        daa                     ; using ADDs and DAA's
        adc     al,     40h
        daa                     ; nibble now converted to ASCII
        mov     ah,     02h     ; Выводим символ в AL на экран
        mov     dl,     al
        int     21h
        sub     cl,     4       ; Уменьшаем CL на 4 для следующей цифры
        jnc     @@Repeat        ; Если знаковый CL >= 0, то повторяем
 
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
ShowHex endp
 
@code   ends
 
        end     main
1
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2017, 05:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ввести целое число N, вывести его в 8-ричной системе счисления
Будьте добры, напишите программу "Ввести целое число N, вывести его в 8-ричной системе счисления."

Ввести целое число N, вывести его в 3-ичной системе счисления
Ввести целое число N, вывести его в 3-ичной системе счисления.

Ввести целое число N, вывести его в 8-ричной системе счисления
Доброго времени суток. Помогите пожалуйста написать программу - "Ввести целое число N, вывести его...

Дано целое число X в десятичной системе счисления. Выведите запись числа X в восьмеричной системе счисления
Почему настоящие программисты путают католическое Рождестово и Halloween? Потому что 25 DEC = 31...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.