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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 10:46   #1
ksenox
 
Регистрация: 23.05.2012
Сообщений: 3
Восклицание Перевод числа из 10 в 16 систему счисления и подсчет количества нулей

Доброго времени суток Уважаемые программисты! Имеется программа для перевода числа из 10 системы счисления в 16, нужно её модернизировать так чтобы она в переведенном числе подсчитала количество нулей. Помогите пжл.

Код:
stkseg segment stack
  db 256 dup (?)
stkseg ends
 
data segment
  mes1 db 'Vvedite chislo v 10-sisteme (0..65535):',0ah,0dh,'$'
  mes2 db 0ah,0dh,'Chislo c 16-sisteme:',0ah,0dh,'$'
  input db 6,0,7 dup ('$'),'$'
  outbx db 5 dup (' '),'$'
data ends
 
code segment
  assume cs: code, ds: data, ss: stkseg
start:
  xor AX,data
  mov DS,AX
  mov ES,AX
  ;ввод числа
  mov AH,09h
  lea DX,mes1
  int 21h
  
  mov AH, 0AH
  lea DX, input
  int 21H
  xor DX, DX
  xor DI, DI
  mov CL, input+1
  lea SI, input+1
  add SI, CX
  mov BP, 10
  mov BX, 1
texttodigit:
  xor AH, AH
  mov AL, [SI]
  sub AL, 48
  mul BX
  add DI, AX
  dec SI
  mov AX, BX
  mul BP
  mov BX, AX
  loop texttodigit
p16:
  mov AX, DI
  push DI
  mov CX, 4
  xor DX, DX
  mov BP, 16
print16:
  div BP
  mov DI, CX
  dec DI
  cmp DL,15
  ja letter
 add DL, 30h
  jmp done
  letter: 
  ;add DL, 37h
 done:
  mov [outbx+DI], DL
  xor DX, DX
  loop print16
  mov AH, 09H
  lea DX, mes2
  int 21H
  lea DX, outbx
  int 21H
 
  mov AH, 4CH
  int 21H
code ends
end start
ksenox вне форума Ответить с цитированием
Старый 23.05.2012, 11:44   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

ну так в чём проблема?
создаёте цикл по символам выходного массива с проверкой на равенство "0" и увеличением счётчика

вроде такого:
Код:
  mov si, offset outbx
  mov cx, 5
  xor bl,bl
lp:
  lodsb
  cmp ax, '0'
  jne to_lp
  inc bl
to_lp:
  loop lp
  ;в bl у нас находится  искомое количество
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 23.05.2012, 14:48   #3
ksenox
 
Регистрация: 23.05.2012
Сообщений: 3
По умолчанию

DiemonStar, В какое именно место данной программы вставить этот цикл? Подробнее можно пожалуйста. Просто я в асемблере вообще не разбираюсь.
ksenox вне форума Ответить с цитированием
Старый 23.05.2012, 16:58   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Ну, в таком случае, советую почитать умные книжки по программированию на Ассемблере и учиться на своих ошибках. Очевидно, что данный код нужно вставлять туда, где заканчивается перевод числа)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод числа в др систему счисления! diallfam Помощь студентам 1 01.05.2012 12:09
Перевод целого числа из 5 в 8 систему счисления и обратно. Whitt Помощь студентам 7 08.09.2010 07:14
Перевод числа в семеричную систему счисления PastoriXx Общие вопросы .NET 5 14.05.2010 12:58
си++ перевод десячичного числа в шестнадцатиричную систему счисления Bonne Помощь студентам 0 07.05.2010 19:57
Перевод вещественного числа из 10 в 2 Систему счисления. [С++] Veselyn Помощь студентам 9 17.01.2010 00:39