Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: из 16-ой в 10-ю  (Прочитано 23813 раз)
0 Пользователей и 1 Гость смотрят эту тему.
madfun
Гость
« : 11-12-2004 14:23 » 

Может кто знает простенький алгоритм, выводящий на экран 16-е число в десятеричной форме? Например: в регистре al есть чило AC,нужно вывести это число на экран,как  172.[/i][/b]
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 11-12-2004 18:48 » 

дели, сначала отнимая сотни, потом десятки, затем единицы
Записан

madfun
Гость
« Ответ #2 : 12-12-2004 14:22 » 

А можно поподробнее и с примерчиком!
Записан
Ronin
Гость
« Ответ #3 : 12-12-2004 15:22 » 

AC[hex] = 172[dec]=10101100[bin] =
= 1*2^7+0*2^6+1*2^5+0*2^4+1*2^3+1*2^2+0*2^1+0*2^0

Таким образом необходимо сдвигать число влево или вправо, завести счетчик разрядов и инкрементить или декрементить его в зависимости от направления сдвига. Для каждой итерации надо будет произвести умножение и сложение, как показано выше.
Конкретно: сдвиг производится через флаг CF, двойка вовзводится в степень счетчика и умножается на значение CF. Результаты итераций суммируются с накоплением.
Такой алгоритм можно использовать для чисел практически любой необходимой разрядности.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 12-12-2004 19:29 » 

madfun, щас попробую
Код:

   mov al,N8

   ;сотни
   mov cl,100
   mov ch,-1
div_100{
   inc ch
   sub al,cl
   jnc div_100
   add al,cl
   call print_CH

   ;десятки
   mov cl,10
   mov ch,-1
div_10{
   inc ch
   sub al,cl
   jnc div_10
   add al,cl
   call print_CH
   
   ;единицы
   mov ch,al
   call print_CH


под этим:
   call print_CH
подразумевается вывод десятичного разряда, который в данный момент находится в регистре ch
Записан

madfun
Гость
« Ответ #5 : 12-12-2004 20:35 » 

1) А что такое в самом начале кода mov al,N8. В смысле, что такое N8?
2) Сделал всё как в примере, но на экран выводит не число, а вот это- ☺_§
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #6 : 12-12-2004 20:50 » 

madfun, N8 - восьмибитное число

Цитата

2) Сделал всё как в примере, но на экран выводит не число, а вот это- ☺_§

естественно, ты же 30h забыл добавить Улыбаюсь
Записан

Ronin
Гость
« Ответ #7 : 12-12-2004 20:52 » 

Она выводит не число а код символа. Если не ошибаюсь надо прибавить к этим значениям по 48. Для получения кодов соответствующих цифр.
Записан
madfun
Гость
« Ответ #8 : 12-12-2004 21:39 » 

Прибавления ни 30, ни 48 не помогает, например, если прибавлять 30h, то выводит  1F§.  :?:
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 12-12-2004 21:47 » 

madfun, сорри, я опечатался - мне негде код прогнать... смотри код выше - я исправил

   add al,ch
на
   add al,cl
Записан

Ronin
Гость
« Ответ #10 : 12-12-2004 21:47 » 

Есть еще идейка сделать через XLAT - таблицу с цифровыми символами и далее по смещению...
Записан
madfun
Гость
« Ответ #11 : 12-12-2004 22:02 » 

:new_twist: She is a life!!! 2Алексей1153: Большое спасибо, заработала!
А что надо изменить, чтобы она могла с числами типа dw работать?
2 Ronin:не-е, мои познания в асме ещё таковы, что я даже понятия не имею, что такое XLAT таблица.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 12-12-2004 22:15 » 

madfun,
Цитата

2 Ronin:не-е, мои познания в асме ещё таковы, что я даже понятия не имею, что такое XLAT таблица.

не расстраивайся, я тоже Улыбаюсь Наверное - индексированный массив, прошу прощ за каламбур...

Цитата

с числами типа dw работать?


Код:

   mov ax,N16

   ;10000
   mov cx,10000
   mov dh,-1
div_10000{
   inc dh
   sub ax,cx
   jnc div_10000
   add ax,cx
   call print_DH

   ;1000
   mov cx,1000
   mov dh,-1
div_1000{
   inc dh
   sub ax,cx
   jnc div_1000
   add ax,cx
   call print_DH

   ;100
   mov cx,100
   mov dh,-1
div_100{
   inc dh
   sub ax,cx
   jnc div_100
   add ax,cx
   call print_DH
   
   ;10
   mov cx,10
   mov dh,-1
div_10{
   inc dh
   sub ax,cx
   jnc div_10
   add ax,cx
   call print_DH

   ;единицы
   mov dh,al
   call print_DH
Записан

Ronin
Гость
« Ответ #13 : 12-12-2004 22:26 » 

XLAT-таблица - это не термин. Это команда такая - XLAT. Действует она так, как показано ниже.

digit_table db '0123456789'

    mov bx, offset table
    mov al, 3
    xlat

после этого al='3'=51=33h

...если не напутал в цифрах
Записан
madfun
Гость
« Ответ #14 : 12-12-2004 22:36 » 

Отлично Всё, thank you very much, всё работает как часы Отлично
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 13-12-2004 05:12 » 

Ronin, по ходу дела с таблицей тут медленнее будет работать...
Записан

Allex63
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 22-12-2004 11:51 » 

А "школьный" алгоритм перевода не пробовал? Делить на основание системы счисления (10,8,2,60...), остатки заисывать в буфер в обратном порядке. Масштабируется на любой размер машинного слова, с которым допустима операция деления.
Записан

Мысли должны быть короткие и плоские.
Так их в ROM больше помещается.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 22-12-2004 13:28 » 

это медленно работает
Записан

Allex63
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 23-12-2004 09:08 » 

Sorry, Alexey, но я не согласен. В "школьном" алгоритме требуется N делений, где N-количество выводимых цифр. Это немного, столько же, сколько и при "делении на заранее вычисленные степени десятки методом последовательных вычитаний". А реализация проще и короче, так как сворачивается в итоге в один цикл. Легко переносится и на дробные (BINARY FIXED POINT) числа. И последнее - там, где появляется задача индикации, за суперскоростями уже можно не гоняться, все едино человек больше 13-40 кадров в секунду не различает.
Записан

Мысли должны быть короткие и плоские.
Так их в ROM больше помещается.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 23-12-2004 13:49 » 

ну не знаю, мне помниться операция деления около 200 тактов весит Улыбаюсь
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 23-12-2004 19:06 » 

Алексей1153, у тебя слишком древние сведения - это относится к 8086/80286. Современные процессоры делают это намного быстрее.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 23-12-2004 20:18 » 

наверное древние Улыбаюсь я ассемблером вплотную никогда не занимался
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 24-12-2004 19:50 » 

Зря - это интересно и позновательно. Только не стоит делать в asm win-программы (это в С эффективнее делать) - лучше тренероваться на системных и прикладных утилитах: получишь хорошие навыки составления алгиритмов на низком уровне (как все есть на самом деле), планирования размеров и типов переменных, а так же понимание в деле оптимизации программ по объему и быстродействию.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #23 : 25-12-2004 17:38 » 

Ром, Улыбаюсь я же не говорю, что вообще не занимался - на том же орионе я только на ём и писал. Правда у I8080 нет было команд деления и умноже Улыбаюсь)))

а вот на айбиэмках не довелось вплотную позаниматься. некогда... а так - я бы с удовольствием
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 26-12-2004 12:55 » 

Алексей1153, да я и сам сейчас этим не знанимаюсь - незачем. Просто приятно вспомнить...
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #25 : 26-12-2004 14:47 » 

да, есть в этом что-то такое... необъяснимое Улыбаюсь когда,образно выражаясь, владеешь ситуацией на кристалле Улыбаюсь)) а он чаще всего безропотно подчиняется Улыбаюсь
Записан

RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 26-12-2004 16:49 » 

Ага И никакой винды...

Что-то на офтоп тянет.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines