![]() |
|
|
![]()
|
|
| Ura20007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 22.4.2007 Репутация: нет Всего: 1 |
Всем привет!
Вот задачка:1. Дан файл f, компоненты которого являются целыми числами: a) найти количество четных чисел среди компонент; b) найти количество удвоенных нечетных чисел среди компонент; c) найти количество квадратов нечетных чисел среди компонент. С ассемблером (под DOS) плохо знаком.Есть реализация задачи на C++. Прошу помощи в реализации на ассемблере. Может есть у кого уже прога на асме.Файл прикрепил! Заранее большое спасибо за любую помощь! Это сообщение отредактировал(а) Ura20007 - 22.9.2008, 16:39 Присоединённый файл ( Кол-во скачиваний: 20 )
______1.zip 0,71 Kb |
|||
|
||||
| Ura20007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 22.4.2007 Репутация: нет Всего: 1 |
Помогите пожалуйста чем сможете
|
|||
|
||||
| Ura20007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 22.4.2007 Репутация: нет Всего: 1 |
Ребята помогите хотя бы с частью a
|
|||
|
||||
| Diabolus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 12.6.2007 Репутация: нет Всего: нет |
gcc -S source.c asm.txt или как-то так. Выдаст тебе код на асме, который делает компилятор из С. Ну а дальше уже будет проще. Почистить мусор, оптимизировать... Либо просто ключевые моменты перенести в свою программу.
|
|||
|
||||
| Ura20007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 22.4.2007 Репутация: нет Всего: 1 |
Ребята а какой нужно использовать файл бинарный или текстовый подскажите пожалуйста!
|
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 6 Всего: 14 |
Ura20007, за месяц ассемблер под DOS можно было и выучить,
|
|||
|
||||
| Ura20007 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 248 Регистрация: 22.4.2007 Репутация: нет Всего: 1 |
На сайте откопал!
|
|||
|
||||
| Mikl_ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: 6 Всего: 14 |
Кстати, видимо, тенденция на этом сайте "Напишите программу на ассемблере..." 1) на каком из ассемблеров? tasm, masm, fasm, nasm или еще какой-то ассемблер. 2) Для какой операционной системы? DOS, Windows, Unix или какую-то другую? Как всегда начинаем писать программу с рассуждений. 1) файл нужно открыть (если таковой существует, а если файла нет, то выдать сообщение), получить handle файла. Прочитать файл (или часть файла) в буфер, который расположен в памяти. Если файл очень большой (больше, чем буфер, который мы можем ему отвести), тогда файл читается в буфер за несколько раз. Закрыть файл. Если файл бинарный - хорошо. Если файл текстовый, придется текст переделывать в число, для нас это дополнительная головная боль. Функции открытия/чтения/закрытия файлов зависят от операционной системы под которую пишется программа (для DOS -функции 21h прерывания, для Windows -- функции API) 2) содержимое файла находится в памяти. a) найти количество четных чисел среди компонент. Нужно знать с каким размером чисел мы столкнемся (байты, слова, двойные слова) и формат числа (знаковое/беззнаковое, целое/вещественное). Допустим у нас целые числа. Тогда в цикле читаем по одному числу, делаем сдвиг этого числа вправо на 1 бит -- если произошла установка бита CF в регистре флагов - значит число нечетное. Увеличиваем счетчик нечетных чисел (mov ax,X / shr ax,1 / jnc четное_число ) Числа на четное/нечетное можно проверить еще так (test X,1 / jz четное_число). А еще четность/нечетность проверяется вот так (mov ax,X/test ax,ax /jp четное_число) b) найти количество удвоенных нечетных чисел. Нечетное число это 2*N+1 удвоенное нечетное число 2*(2*N+1)=4*N+2 значит мы должны сделать сдвиг этого числа вправо на 1 бит и убедится, что оно четное, затем сделать еще один сдвиг вправо на 1 бит и убедится, что оно нечетное или как вариант (mov ax,X / sub ax,2 / test ax,11b / je удвоенное_нечетное_число) c) найти количество квадратов нечетных чисел (2*N+1)*(2*N+1)=4*N*N + 4*N + 1=4*N*(N+1) + 1 мы должны убедится что число нечетное, затем отняв у него единицу -- убедится, что оставшееся число делится без остатка на 8 (если N нечетное, тогда четное N+1 иначе, если N четное, тогда N+1 нечетное) (mov ax,X / dec ax / test ax,111b / jz квадрат_нечетного_числа) А теперь, когда все разжовано -- пиши программу Это сообщение отредактировал(а) Mikl_ - 24.10.2008, 05:06 |
|||
|
||||
![]()
|
| Правила форума "Asm: Общие вопросы" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |