![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
NEt_Hunter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Помогите с курсовой. Ассем. не знаю.
Даны 3 константы с фиксированной точкой в формате слова. Показать их представление в памяти машины и написать на Ассемблере программу печати двоичного представления этих констант. Если можно, очень прошу пишите с комментами. |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
Это сообщение отредактировал(а) MAKCim - 19.10.2006, 14:57 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
NEt_Hunter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Большое спасибо, Макс! Но я не пойму где эти три константы
![]() |
|||
|
||||
NEt_Hunter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Никто не поможет с комментами к командам?
![]() |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 9 Всего: 23 |
Начнем с теории.
Ну, если ты занимаешься программированием, значит знаешь, что все данные (переменные, константы) содержаться в двоичном виде. С байтом проблем нет. Он как есть так и представлен. Если данные размером в слово заносятся в память, то они туда заносятся и держатся в "перевернутом" виде. Представь два байта. Мы, люди, будем их нумеровать 1-й и 2-й. Тогда младшие (правые) 8 битов числа размещаются в первом байте слова, а старшие 8 бит - во втором байте. Для наглядности пример: число 1110011100011000 в нашем представлении в памяти будет иметь вид 0001100011100111. Но есть особенность: так представляются данные именно в памяти, в регистре представление прямое. Значит, если считываем эти данные в регистр и просмотрим его, получим опять 1110011100011000. Что получается? Если просто вывести занесенные из памяти данные через регистр, то результат получится правильный лишь в том смысле, что будут выведены те же данные, что и в памяти. Но они будут представлены в "нашем" виде. Поэтому из регистра надо выводить по одному биту, начиная с хвоста. Если трудно определить, где у регистра хвост, а где голова, (а может это вообще палка о двух концах ![]() Теперь ближе к коду. Основной его частью является цикл, выводящий данные по биту из регистра. Функция же, несущая основную нагрузку в этом цикле есть функция shr. Эта функция выполняет сдвиг, указанного в параметре регистра, на указанное число. Первый вышедший бит помещается во флаг CF. Его и выводим. Вот для наглядности: ____регистр______ __ |1110011100011000| --> |CF| ________________ __ 0 --> |0111001110001100| --> |0| | | 0 ________________ __ 0 --> |0011100111000110| --> |0| | | 00 ________________ __ 0 --> |0001110011100011| --> |0| | | 000 и так далее. Да, есть еще и отрицательные числа. Они представляются в дополнительном коде. Как его найти? Для слова это 65536 плюс твое отрицательное число. Что получается? Получается, что число -256 (к примеру) и число 65280 в двоичном виде будут выглядить одинаково. Ну, и они также представлены в памяти в перевернутом виде. Собственно все. Лишь еще одно дополнение. Приведенный код - код exe-файла, размер которого 546 байт. Для такой простой задачи вполне подойдет com-файл. Его размер 160 байт. Он и приведен.
Сам com-файл здесь Это сообщение отредактировал(а) anwe - 28.10.2006, 17:01 Присоединённый файл ( Кол-во скачиваний: 4 ) ![]() |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
Насколько я вижу - тут com-программа, а не exe
На каждой платформк по-разному -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
anwe |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 9 Всего: 23 |
А на счет
|
||||
|
|||||
NEt_Hunter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Спасибо огромное!!! Теперь каждую строчку понял, но есть еще кое-что для полной завершении проги:
Нужно результат добавить в файл. ![]() |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 9 Всего: 23 |
Драсти, о чё сразу не сказал?
Правильно ли я понял, что надо создать файл и записать представление эти констант туда? |
|||
|
||||
NEt_Hunter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
Я думаю главное нужно было написать алгоритм проги, а результат оставил на потом. Там много нужно менять?
![]() |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 9 Всего: 23 |
Ну раз алгоритм.
Создаешь файл функцией 3Ch без специфических атрибутов, то есть сх=0, ds:dx - полное имя файла. Занес из регистра bx данные справа налево в буфер. Функцией 40h, где bx - идентификатор файла, полученный от функции 3Ch, cx - число байтов для записи, ds:dx - адрес буфера, откуда берешь данные, записываешь полученный результат. Функцией 3Eh, где bx - идентификатор файла, закрываешь файл. И последнее, самое приятное: через проводник (или еще что-то) находишь свое творение, смотришь результат. ![]() |
|||
|
||||
NEt_Hunter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
File DB ‘D:1.pas’,0
Я не совсем понял, допиши пожалуйста. ![]() Это сообщение отредактировал(а) alexeis1 - 2.11.2006, 00:34 |
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 9 Всего: 23 |
Да все верно, почти.
|
|||
|
||||
NEt_Hunter |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 9.10.2006 Где: Германия Репутация: нет Всего: нет |
а bufer где объявлять?
|
|||
|
||||
anwe |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 748 Регистрация: 2.9.2006 Репутация: 9 Всего: 23 |
Как где, в конце:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |