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

Превращение десятичного числа в BCD-формате в ASCII-формат

16.05.2016, 15:35. Показов 2950. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
нужно написать программу на ассемблере
программу превращения десятичного числа 927459 в BCD-
формате в ASCII-формат, считая, что старшая цифра числа показывает знак
55
десятичного числа: 0 = "+", 9 = "-".
заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.05.2016, 15:35
Ответы с готовыми решениями:

Вывод 64 битного числа на екран в ASCII формате
Помогите с выводом 64 битного числа на екран в ASCII формате, но нелзя использовать 32-х битные...

Перевод из BCD в ASCII
Мучаюсь уже 4 дня!! :wall: Сама задача заключается в выводе даты на экран. Я взялся написать эту...

Преобразование десятичного числа 927459 в BCD-формате в ASCII-формат
Помогите пожалуйста написать программу на ассемблере программу превращения десятичного числа ...

Перевод числа из упакованного BCD-формата в ASCII-формат
Есть программа, которая считает разницу 873451-548197 используя ASCII формат, потом результат...

3
Эксперт Hardware
Эксперт Hardware
6154 / 2393 / 397
Регистрация: 29.07.2014
Сообщений: 3,137
Записей в блоге: 4
17.05.2016, 12:33 2
dianasmelikova, , числа в BCD-формате - этот тот-же HEX, только с макс.числом не 0Fh, а 09h.
Максимальный байт в этом формате может быть только двузначным 00-99h. Для чисел с большими разрядами, байты нужно склеивать. Из этого следует, что твоё число можно представить в виде:
Assembler
1
2
3
   byteBCD    db   92h, 74h, 59h
   wordBCD    dw   0092h, 7459h
   dwordBCD   dd   00927459h
Теперь запускай виндовый калькулятор, ..дальше [Вид-->Инженерный], ставь чекбокс в HEX, вводи своё число "927459" и переключи чекбокс в BIN. В поле результата видим:
Assembler
1
2
3
4
; ..твоё BCD в двоичном представлении (927459h):
;---------------------------------------------------
      9     2     7     4     5     9
    1001  0010  0111  0100  0101  1001
Здесь видно, что для кодирования каждого разряда BCD-числа достаточно одной/двоичной тетрады.
Если мы будем выталкивать с BCD по-четыре бита, то получим значение каждого разряда. Остаётся прибавлять к каждому разряду 30h (см.таблицу ASCII-символов), как мы получим ASCII-представление каждого разряда, которое можно выводить на экран. Организовав цикл из этих действий, мы сможем вывести всё число на экран. Разрядность числа может быть любой длины (по-сути, BCD и придуманы для чисел любой разрядности).

Эта демагогия примет такой вид на ассемблере..
Чтоб не париться с байтами, считаем сразу всё число в 32-битный регистр EBX (но в этом случае получим два нуля в начале. при выводе на экран придётся пропускать их). В EAX будем выталкивать тетрады (см.команду SHLD). Прибавив к тетраде 30h, результат будем записывать в буфер, от куда потом выведем число на экран:
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
;=========== FASM code ...
format MZ
org  100h                   ; пропустим PSP
jmp  start                  ;
 
mes0    db   ' Result:  $'  ;
buff    db   8 dup(0)       ; буфер для 6-разрядного числа
array   dd   927459h        ; BCD-число
 
start:                      ;
       mov   ebx,dword[array]     ; берём число
       mov   ecx,8           ; разрядов в числе
       mov   edi,buff        ; адрес буфера для сохранения
back:  xor   eax,eax         ; очищаем место под результ
       shld  eax,ebx,4       ; выталкиваем в EAX тетраду
       add   al,30h          ; переводим её в ASCII
       stosb                 ; записываем в буфер
       rol   ebx,4           ; подготовим сл.тетраду в EBX
       loop  back            ; мотаем цикл 6 раз..
 
       mov   ah,9            ; выводим результат на консоль
       mov   dx,mes0         ;
       int   21h             ;
       mov   ecx,5           ; кол-во байт для вывода
       mov   esi,buff        ; указатель для LODSB
       add   esi,3           ; пропустим нули и первую 9
       cmp   byte[esi+2],9   ; проверка на знак
       jnz   zero            ;
       mov   al,'+'          ;
       jmp   prn1            ;
zero:  mov   al,'-'          ;
prn1:  int   29h             ; выводим знак
prn2:  lodsb                 ; выводим остальные числа
       int   29h             ;
       loop  prn2            ;
 
       xor   eax,eax         ; выход
       int   16h             ;
       mov   ax,4c00h        ;
       int   21h             ;
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
17.05.2016, 15:48 3
Цитата Сообщение от R71MT Посмотреть сообщение
ставь чекбокс в HEX
может радиобаттон?
0
Эксперт Hardware
Эксперт Hardware
6154 / 2393 / 397
Регистрация: 29.07.2014
Сообщений: 3,137
Записей в блоге: 4
17.05.2016, 15:58 4
..вполне возможно. одного поля ягоды..
0
17.05.2016, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2016, 15:58
Помогаю со студенческими работами здесь

Осуществить перевод распакованного десятичного числа в ascii формат
моя программа выводит то же самое, что и ввожу, в чем проблема? .model small .data bcdd db...

Преобразование числа в BCD формат
Подскажите пожалуйста, как можно преобразовать введенное число в BCD формат?

BCD числа в упакованном и неупакованном формате
Здравствуйте! Помогите разобраться с BCD числами. Пусть дано число 123456h в упакованном BCD...

Перевод десятичного числа в код ASCII
С клавиатуры вводится десятичное число. Вывести его в кодах ASCII. Вот что у меня получилось: ...


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

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

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