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

Ваш аккаунт

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

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

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

Задача - DWORD to 4xASCII (Assembler)

32K
22 марта 2008 года
Воланд
7 / / 22.03.2008
Уважаемые программисты ассемблера, решите пожалуйста задачку на перевод!!!Изучаем Ассемблер только неделю, а сказали на следующей уже принести готовый курсовик:confused: Очень нужно!!! заранее спасибо.
Задача:
Перевод 4-байтового двоичного числа в цепочку ASCII-символов его шестнадцатеричного представления. Вывод результата в файл
5.1K
22 марта 2008 года
12345678
93 / / 16.12.2006
Функция перевода бинарного числа в любую систему счисления. Синтаксис FASM.
Код:
IntToStr:
        ; eax = number, ebx = base, edi = buffer
        push    ecx edx eax
        xor     ecx,ecx
      .new:
        xor     edx,edx
        div     ebx
        push    edx
        inc     ecx
        test    eax,eax
        jnz     .new
      .loop:
        pop     eax
        add     al,30h
        cmp     al,'9'
        jng     .ok
        add     al,7
      .ok:
        stosb
        loop    .loop
        mov     al,0
        stosb
        pop     edx ecx eax
        ret


Ну а с выводом в файл разобраться не сложно. См. API функции CreateFile и WriteFile из kernel32
30K
23 марта 2008 года
Ден Зурин
28 / / 17.02.2008
По условию нужен перевод только в 16-ричную систему. Мой вариант (на TASM/MASM):
Код:
IntToHex PROC
; in:  EAX=number, EDI=buffer
; out: ECX=length
  push eax
  push edx
  push edi
  pushf
; get digit count
  mov edx, 1
  xor ecx, ecx
@inc_counter:
  inc ecx
  cmp ecx, 8
  je @hex_trans
  shl edx, 4  
  cmp edx, eax
  jbe @inc_counter
; trans to hex
@hex_trans:
  mov edx, eax
  add edi, ecx
  dec edi
  std
@get_digit:
  mov al, dl
  and al, 0Fh
  cmp al, 9
  ja @is_letter
  add al, '0'
  jmp short @out_digit
@is_letter:
  sub al, 10
  add al, 'A'
@out_digit:
  stosb
  shr edx, 4
  jnz @get_digit
; done
  popf
  pop edi
  pop edx
  pop eax
  ret
IntToHex ENDP

Перед вызовом в EAX нужно поместить число, а в EDI - адрес строки. Процедура преобразует число в HEX-строку и возвращает ее длину в ECX.
А что касается записи в файл - это зависит от ОС. В Windows, как уже было сказано, нужны функции CreateFile и WriteFile, подробнее см. "Уроки Iczelion'а". В DOS'е - через функции прерывания 21h, а в Linux'е - через C-библиотеку libc.
32K
23 марта 2008 года
Воланд
7 / / 22.03.2008
А не подскажите, как сделать так, чтобы ввод двоичных символов осуществлялся с клавиатуры...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог