Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 306
от 04.12.2005, 21:42

Администратор:Калашников О.А.
В рассылке:Подписчиков: 263, Экспертов: 21
В номере:Вопросов: 4, Ответов: 4


Вопрос № 30422: Уважаемые експерты! Помогите,пожалуйста, связать Ассемблер и Дельфи! Я написал простейшую функцию, получил объектный файл, прилинковал его к консольной дельфийной программе {$L HELL.OBJ}, Но она возвращает то значение, которое я заслал, а не удвоенно...
Вопрос № 30426: Здраствуйте дорогие эксперты. Помогите пожалуйста решить задачу, а то что то немогу понять как ее сделать (пробовал при помощи массива но почему то ответ получается неправильный). А задача такая: Допустим у нас есть 65 каких то емкостей, в...
Вопрос № 30435: Здравствуйте, великие эксперты! Я написал эмулляционную программу по Универсальному микроконтроллеру, своего рода эмулятор ассемблера и дизассемблера, но есть одна проблема: У старых УМК нет команд деления и умножения. Алгоритм умножения есть, а ...
Вопрос № 30472: Здравствуйте уважаемые эксперты. Такой вопрос. Раньше писал только ассемблерные вставки в С++. Сейчас перешел на чистый асм. Подскажите, какие шаги нужно пройти дабы простой файл типа excemple.asm конвертировать в файл с расширением .obj, а затем...

Вопрос № 30.422
Уважаемые експерты! Помогите,пожалуйста, связать Ассемблер и Дельфи! Я написал простейшую функцию, получил объектный файл, прилинковал его к консольной дельфийной программе {$L HELL.OBJ}, Но она возвращает то значение, которое я заслал, а не удвоенное. С Турбо Паскалем нет проблем, но мне нужно в режиме 32бит, заранее благодарен
Анатолий.
p.s.
END

Swarog4@yandex.ru

Приложение:

Отправлен: 29.11.2005, 08:46
Вопрос задал: Кривенцов Олег Олегович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Кривенцов Олег Олегович!
убери Pushad и popad
вот так делай:

sub eax, eax
mov ax, N
shl eax, 1

удачи!
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 29.11.2005, 09:40
Оценка за ответ: 5


Вопрос № 30.426
Здраствуйте дорогие эксперты.
Помогите пожалуйста решить задачу, а то что то немогу понять как ее сделать (пробовал при помощи массива но почему то ответ получается неправильный). А задача такая:
Допустим у нас есть 65 каких то емкостей, в первой находится 1 чего то, во второй и последующих в 2 раза больше чем в предыдущей (выходит что в первой емкости 1, во второй 2, в третьей 4, в четвертой 8 и т.д.), так вот нужно посчитать общее кол-во этого чего то во всех емкостях.
P.S. На С задача работает, а вот на Assembler'e как я только непробовал ее делать, помоги те пожалуйста, буду примного благодарен, ну а если не сможете помочь с написанием, то хотя бы намекните как это сделать!
Отправлен: 29.11.2005, 09:06
Вопрос задал: Grubby (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ayl
Здравствуйте, Grubby!

Общее кол-во этого чего-то будет 2^65-1. Это число не поместиться в стандартные целые типы. Тебе нужно для счетчика использовать несколько байт (на самом деле, 9-ти байт хватит, т.к. 9 байт - это 72 разряда, т.е. максимальное число в них - 2^72 > 2^65).
Тебе нужно реализовать с этими 9-тибайтными числами две операции: умножение на 2 и сложение 2-х таких чисел. Первая реализуется с помощью сдвига влева на 1 бит через флаг переноса, вторая - побайтовым сложением, начиная с младших байтов, с учетом переноса. Т.е., последовательность команд add-adc-adc-adc-...

Ну и еще требуется процедура вывода данного числа на экран.

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик)
Отправлен: 29.11.2005, 14:37
Оценка за ответ: 4
Комментарий оценки:
Спасибо большое, пол дела сделано. Теперь осталось все это только на Assembler'e реализовать


Вопрос № 30.435
Здравствуйте, великие эксперты!
Я написал эмулляционную программу по Универсальному микроконтроллеру, своего рода эмулятор ассемблера и дизассемблера, но есть одна проблема: У старых УМК нет команд деления и умножения. Алгоритм умножения есть, а вто деления не подходит, так как он делает вот такую штуку (команды старого ассемблера) и в нём нет команды деления, поэтому приходиться обходиться алгеброй логики.
Суть программы, например:
6/4=1,2; но не 1,5, так как эта программа отнимает от шести четыре и остаток 6-4=2 кладёт в ячейку памяти.
Если у кого-нибудь остался алгоритм деления однобайтных чисел, с нормальными остатками, при помощь команд сравнения, суммирования, вычитания, команд сдвига и т.д., не используя команды деления и умножения. Пожалуйста, бросте мне примерчик на ассемблере (можно на новом, лишь бы алгоритм был).

Всем спасибо, кто мне ответит!

Приложение:

Отправлен: 29.11.2005, 10:35
Вопрос задал: Подболотов Иван Алексеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ayl
Здравствуйте, Подболотов Иван Алексеевич!

Погоди. При целочисленном делении 6 на 4 ты никогда не получишь 1,5. А получишь 1 в частном и 2 в остатке.
Насколько я понимаю, твой алгоритм ровно это и делает.
Самый простой алгоритм - вычитать из делимого делитель, увеличивая каждый раз счетчик на 1, до тех пор, пока на очередном шаге значение делимого не станет меньше делителя. Это и будет остатком, а значение счетчика - частным.

Вот алгоритм в формальном описании.
ИД: Делитель - ячейка A, делимое - ячека B
Рез-т: Частное - ячейка A, остаток - ячейка B
1. Обнулим ячейку C - здесь будем накапливать частное
2. Если A < B - перейти на п.6
3. Вычесть из A значение B и записать результат в A (A=A-B)
4. Увеличить C на 1 (С=С+1)
5. Перейти на п.2
6. Записать значение из ячейки A в ячейку B (B=A)
7. Записать значение из ячейки C в ячейку A (A=C)
Все.

Также есть алгоритмы быстрого деления, с использованием сдвигов и т.п. Но, к сожалению, я их плохо помню, надо искать конспекты... Попробуй в сети поискать.
Суть, насколько я помню, там в том, что деление производится столбиком. То есть делитель вычитается из делимого, начиная со старших разрядов, а частное каждый раз сдвигается влево на 1 разряд и в конец добавляется 0 или 1. Все числа при этом, естесственно, записываются в 2-й системе счисления (в ней не нужно производить деления для нахождения очередного разряда частного).

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Академик)
Отправлен: 29.11.2005, 14:29
Оценка за ответ: 5
Комментарий оценки:
Понятно! Я как раз по сдвигам и сделал, только бы узнать алгоритм не целочисленное деление. Чтобы разделил он например: 7/4=1.75! Я раньше с этим работал ещё на Spectrum'е, но так и не вспомнил, где я видел алгоритм!


Вопрос № 30.472
Здравствуйте уважаемые эксперты.
Такой вопрос. Раньше писал только ассемблерные вставки в С++. Сейчас перешел на чистый асм. Подскажите, какие шаги нужно пройти дабы простой файл типа excemple.asm конвертировать в файл с расширением .obj, а затем и .exe?
Заранее всем благодарен.
Отправлен: 29.11.2005, 19:44
Вопрос задал: Юра (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sager
Здравствуйте, Юра!
Для дос или для вин? И не конвертировать,а скомпилировать.
Дос:
ml.exe /c excemple.asm
link excemple.obj
Для win:
ml /c /coff excemple.asm
link excemple.obj /subsystem:windows(либо вместо windows console, если консольное приложение)
Ответ отправил: Sager (статус: Студент)
Отправлен: 29.11.2005, 20:47


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100 hotlog_js="1.0"; hotlog_r=""+Math.random()+"&s=314124&im=101&r="+escape(document.referrer)+"&pg="+ escape(window.location.href); document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N"); hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2"; hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+ (((navigator.appName.substring(0,3)=="Mic"))? screen.colorDepth:screen.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; document.write("HotLog")

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Архив рассылки
Отписаться
Вспомнить пароль

В избранное