Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2016, 18:11   #1
zalaviv
Новичок
Джуниор
 
Регистрация: 19.05.2016
Сообщений: 2
По умолчанию Перевод числа из упакованного BCD-формата в ASCII-формат

Есть программа, которая считает разницу 873451-548197 используя ASCII формат, потом результат переводиться в упакованный BCD-формат.
Код:
.model small
.stack 256
.386
.data
CR_LF db 13,10,'$'
A db 8,7,3,4,5,1 ;неупакованное BCD-число 873451
B db 5,4,8,1,9,7 ;неупакованное BCD-число 548197
Result db 6 dup (?),'$'
BCD_Result db 6 dup (?),'$'
.code
Start:
mov ax,@data
mov ds,ax
mov es,ax
lea si,A+5 ;в регистр вносится адрес смещения последней цифры первого числа
lea di,B+5 ;в регистр заносится адрес смещения последней цифры второго числа
lea bx,Result+5 ;в регистр зносится адрес смещения последней позиции,куда будет занесен результат числа
mov cx,6 ;устанавливаем счетчик для цикла
xor ah,ah
CLC ;очистка флага переноса 
a10:
mov ax,[si] ;в al заноситься значения с первого числа "A"
sbb al,[di] ;от первого числа вычитается второе
aas ;корректное вычитание ASCII чисел
mov [bx],al ;результат AAS вносим в "Result"
dec si
dec di
dec bx
loop a10
mov ah,00h
mov [bx],ah ;в случае, если в последней итерации цикла был перенос, он заносится в "Result"
lea bx,Result+5 ;занесение в регистр адреса смещения для того, чтобы начать переводить полученный результат в 16-й ASCII-код
mov cx,6 ;устанавливаем счетчик для цикла
a20:
or byte ptr [bx],30h ;указываем, что берем с памяти один байт и делаем побитовое "или" для того, чтобы перевести цифры в ASCII-символы
dec bx
loop a20
xor si,si
mov cx,8
sub cx,2
add si,cx
xor di,di
upak:
dec si
xor ax,ax
mov al,Result[si]
and al,0Fh
shl ax,8
dec si
mov al,Result[si]
shl al,4
add al,ah
mov BCD_Result[di],al
inc di
sub cx,2
cmp cx,0
jg upak
mov ah,09h
mov dx,offset Result
int 21h
mov ah,09h
mov dx,offset CR_LF
int 21h
mov ah,09h
mov dx,offset BCD_Result
int 21h
mov ax,4c00h
int 21h
end Start
Как изменить эту программу, чтобы она из упакованного BCD переводила в ASCII? Не понимаю ассемблер, помогите, пожалуйста.
zalaviv вне форума Ответить с цитированием
Старый 19.05.2016, 19:08   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Код:
.data
A   dd  873451h             ; BCD число
R   db  8 dup(0)            ; место под ASCII-результат

.code
    mov    ecx,8            ; всего разрядов в двойном слове
    mov    edi,R            ; указатель на приёмник
    mov    ebx,[A]          ; берём число в EBX
unpack:                     ;
    xor    eax,eax          ;
    shld   eax,ebx,4        ; выталкиваем из него в EAX 4 бита
    add    al,30h           ; переводим эту цифру в ASCII
    stosb                   ; записываем ASCII в приёмник
    rol    ebx,4            ; подготавливаем сл.тетраду
    loop   unpack           ; мотаем цикл СХ-раз..
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 19.05.2016, 20:10   #3
zalaviv
Новичок
Джуниор
 
Регистрация: 19.05.2016
Сообщений: 2
По умолчанию

Не получаеться. Не могу понять куда это вставить.
zalaviv вне форума Ответить с цитированием
Старый 20.05.2016, 07:54   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Вставляй в конец (перед: mov ax,4c00h) не ошибёшься
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод дробного числа в денежный формат dniks Общие вопросы C/C++ 11 01.04.2013 13:11
Перевод в BCD-упакованный формат litsedeika Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 26.01.2013 01:19
Assembler, BCD-формат Аsker Помощь студентам 2 12.01.2012 21:42
не работает перевод из целого числа в ASCII professor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.06.2010 06:59
формат упакованного времени в DELPHI dimonbest Общие вопросы Delphi 32 23.09.2008 02:15