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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2007, 20:08   #1
69_rus
Новичок
Джуниор
 
Регистрация: 13.06.2007
Сообщений: 1
По умолчанию HEX ->DEC

Здравствуйте, уважаемые мудрецы-програмеры.Прошу подсказать, как в ASM реализовать перевод
чисел из шест. системы в десятичную? Я сумел намучить только ввод чисел. А дальше как?само преобразование?
Код:
CODESG  SEGMENT PARA 'Code'
ASSUME  CS:CODESG,DS:CODESG         
 
MAIN PROC NEAR 

MOV AX,CS
MOV DS,AX
A: MOV AH,0Ah
MOV DX,offset KEYB_MAX
INT 21H
MOV AL,KEYB_LEN
CMP AL,0
JZ A
MOV CL,KEYB_LEN
MOV BX,offset KEYB_DATA
A2: MOV AH,2
MOV DL,DS:[BX]
INT 21H
INC BX
LOOP A2

c: jmp c
ret

RET
MAIN ENDP
KEYB_MAX DB 5
KEYB_LEN DB ?
KEYB_DATA DB 6 DUP(?)
CODESG  ENDS
END
69_rus вне форума Ответить с цитированием
Старый 13.06.2007, 20:44   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

могу привести 32 битный код под FASM. я думаю ты сможешь его перевести в 16 битный.

функция dword_to_STR конвертирует число размером в двойное слово в строку

Код:
dword_to_STR:
;на входе EAX число 32 бит
;         ESI указатель на строку
;         EBX разрядность результата
      pushad
      cmp ebx, 16
      ja  .end
      xor ecx, ecx
      jmp .repeat

.mesto db 32 dup (0)

    .repeat:
      xor edx, edx
      div ebx
      mov edi, eax
      mov al, dl
      cmp al, 10
      sbb al, 69h
      das
      mov byte [.mesto+ecx], al
      mov eax, edi

      inc ecx
      cmp eax, 0
      jz .endrep
      jmp .repeat
    .endrep:
      mov edi, .mesto
      add edi, ecx
    .copyrep:
      dec edi
      mov dl, byte [edi]
      mov byte [esi], dl
      inc esi

      loop .copyrep
    .end:
      popad
      ret
хочу подметить что она может выводить число в любой системе счисления (разумеетя от 2 до 16), само число может быть размером в слово (AX) или байт (AL), главное что бы старшие части регистра EAX были нулями
пример использования:
Код:
  simv db 32 dup (0),0  

      mov eax,0F12CD44h
      mov esi, simv
      mov ebx, 16
      call dword_to_STR

      push 0
      push simv
      push simv
      push 0
      call [MessageBox]
с тебя пиво,...т.е. отзыв (хотя всё равно твой отзыв ничего не даст)

Последний раз редактировалось rpy3uH; 13.06.2007 в 20:52.
rpy3uH вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск