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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2011, 16:14   #1
AlekseiGans
 
Регистрация: 20.12.2010
Сообщений: 7
По умолчанию Задача. Сегмент данных и вывод в строку в восьмиричной системе.

Assembler.
Написать без использования прерываний BIOS и DOS подпрограмму для вывода на экран содержимого одного байта сегмента данных (адрес задан в регистре SI) в восьмеричной системе счисления на второй строке экрана (реальный режим).

org 100h
mov ax, 3

int 10h
mov ax, 0
mov ds,ax
mov si,20
mov al,[si]
mov ah, 0
int 16h

ret

записывает 1 байт в SI теперь нужно его перевести в 8ричную системы счисления и вывести нфу на консоль может с эим хоть кто поможет? может сылки есть на такую инфу даже не могу понять что написать в коде что бы он в 8 ричную систему преводил байт нет я знаю есть вариант последовательно делить на 8 но хз как он подойдет, не знаю даже с чего продолжить=(

Последний раз редактировалось AlekseiGans; 19.10.2011 в 22:01. Причина: поправка
AlekseiGans вне форума Ответить с цитированием
Старый 19.10.2011, 20:05   #2
AlekseiGans
 
Регистрация: 20.12.2010
Сообщений: 7
По умолчанию

ап_______ап
AlekseiGans вне форума Ответить с цитированием
Старый 19.10.2011, 20:20   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Вообще то для перевода двоичного числа в восьмеричное ничего делить в явном виде не надо. Простое разбиение двоичного числа на тройки бит.
Например сдвигаем по три раза и ловим переносы.
Или строим маску (для байта) 00000111, а затем логическое И, а потом сдвигаем и снова И, и т.д.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.10.2011, 20:26   #4
AlekseiGans
 
Регистрация: 20.12.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Вообще то для перевода двоичного числа в восьмеричное ничего делить в явном виде не надо. Простое разбиение двоичного числа на тройки бит.
Например сдвигаем по три раза и ловим переносы.
Или строим маску (для байта) 00000111, а затем логическое И, а потом сдвигаем и снова И, и т.д.
да я в терии это знаю но я не могу соорентироваться как это в код записать =(

Последний раз редактировалось AlekseiGans; 19.10.2011 в 20:29.
AlekseiGans вне форума Ответить с цитированием
Старый 19.10.2011, 21:01   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,378
По умолчанию

Например,
1. В bx записываем число.
2. Переносим число в ax
3. Выполняем AND.
4. Получена цифра, которую надо вывести.
5. В регистр cx записываем тройку
6. Выполняем сдвиг вправо для данных в bx
(помнится, что есть команда сдвига на число, которое в cx).
7. (тут должен быть подсчет числа итераций)
8. Все число обработано?
9. Да. Переходим к п.11.
10.Переходим к п.2
11. Следующие команды(тут должен быть подсчет числа итераций)
Как-то так ...
Под рукой нет любимой книжечки Питера Нортона "Ассемблер для ...",
а сам писал на ассемблере ну очень давно...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 19.10.2011, 21:10   #6
AlekseiGans
 
Регистрация: 20.12.2010
Сообщений: 7
По умолчанию

спасибо за инфу, буду думать, еше пока мозг в состоянии думать) щас найду книгу Питера Нортона может там чего найду еще=)
AlekseiGans вне форума Ответить с цитированием
Старый 20.10.2011, 08:41   #7
AlekseiGans
 
Регистрация: 20.12.2010
Сообщений: 7
По умолчанию

Народ ну есть кто поможет хотя бы немного не могу сообразить хотя бы помогите с началом=(
AlekseiGans вне форума Ответить с цитированием
Старый 20.10.2011, 11:30   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

проблема (ну лично для меня, например) не в самом алгоритме.

проблема тут:
Цитата:
Написать без использования прерываний BIOS и DOS подпрограмму ...
кстати, Вы тут же пишете:
Цитата:
Код:
mov al,[si]
....
mov ah, 0
int 16h
а что такое, по вашему команда int 16h ?! (на самом деле это прерывание - функция BIOS). Их же вроде по условию задачи нельзя использовать?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.10.2011, 12:59   #9
AlekseiGans
 
Регистрация: 20.12.2010
Сообщений: 7
По умолчанию

а если использовать обращение в видео память там же не потребуеться прерывания биоса и доса ?)
AlekseiGans вне форума Ответить с цитированием
Старый 20.10.2011, 13:22   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

нет не потребуется(хотя мне задача не нравится, обращение к экрану в надежде что стоит именно наш режим экрана, хотя задача учебная...)
адрес я правда не помню, ибо работал с VESA.

а нашел в старом коде, 0xB8000(и еще нашел такой ужастный свой асм код)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 20.10.2011 в 13:25.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод значения числа в десятичной системе счисления Kaizzer Помощь студентам 0 23.04.2011 14:44
Задача о системе коридоров JaySee Помощь студентам 1 26.02.2011 14:37
непонятен сегмент данных miracle666 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 04.12.2010 00:03
перенос сегмента кода за сегмент данных Федор777 Общие вопросы C/C++ 2 20.04.2010 18:43
вывод числа в двоичной системе jewels Общие вопросы C/C++ 12 11.03.2010 22:20