Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

hex2dec на ассемблере

6.4K
16 мая 2007 года
shultz1988
33 / / 26.05.2005
Необходимо преобразовать hex число, содержащееся например в регистре ax в последовательность цифр, составляющих это же число в десятичной системе, т.е.
в регистре ax - FFFF
а в некоем массиве buf в итоге должно получиться
buf[1] - 6
buf[2] - 5
buf[3] - 5
buf[4] - 3
buf[5] - 5
Порядок цифр в массиве роли не играет, я могу и в обратном порядке цифры вывести)), т.е. buf[1..5]={5,3,5,5,6} тоже сойдет.
Компилятор у меня TASM
28K
21 мая 2007 года
Ramzey
3 / / 12.05.2007
вот если надо еще.
Код:
.MODEl  Tiny
                .CODE
                ORG     100h
BEGIN:
                mov     ax, cs
                mov     ds, ax
                mov     es, ax
                cld

                lea     di, buf
                mov     ax, number
                xor     dx, dx
                div     _10000
                stosb
                mov     ax, dx
                xor     dx, dx
                div     _1000
                stosb
                mov     ax, dx
                xor     dx, dx
                div     _100
                stosb
                mov     ax, dx
                xor     dx, dx
                div     _10
                stosb
                mov     [di], dl        ;ñ«íáó½∩Ѽ «ßΓáΓ«¬

;¡á⌐ñѼ ñ½¿¡π τ¿ß½á
                mov     cx, 5
                xor     al, al
                lea     di, buf
                rep     scasb
                inc     cx
;ñ½¿¡á ó cx
                mov     ax, 4c00h
                int     21h

number          dw      23456           ;«íαáíáΓδóáѼ«Ñ τ¿ß½«
_10000          dw      10000
_1000           dw      1000
_100            dw      100
_10             dw      10
buf             db      5 dup (?)       ;óδσ«ñ¡«⌐ íπΣÑα
                END     BEGIN
1.6K
24 мая 2007 года
Vov4ick
476 / / 01.02.2007
shultz1988 В регистрах лежат не hex-числа, а просто числа. И разберись, как представляются данные в памяти.
Ramzey А если бы число могло быть 10-значным (в 10 СС) ;-)
Вот процедура с примером использования. Без проблем переделывается под 32-разряда если надо.
Код:
ideal
model tiny
codeseg
org 100h
start:
                mov     di,offset buffer+6
                mov     ax,10203
                call    num2ascii
                mov     ah,9
                mov     dx,offset buffer
                int     21h
                ret
buffer db 5 dup (' '),13,10,'$'

proc num2ascii near
; AX - число   ES:DI-куда писать ответ
                std                ; Запись справа налево для STOSB
                mov     bx,10      ; Делитель
diving:
                xor     dx,dx      ; Чтобы избежать переполнения при делении
                div     bx         ; AX=частное DX=остаток
                xchg    ax,dx
                or      al,'0'
                stosb              ; AX -> [ES:DI] ; DEC DI
                mov     ax,dx
                or      ax,ax      ; Частное было равно нулю?
                jnz     diving     ; Нет-продолжить цикл
                ret
endp num2ascii

end start
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог