Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 729
от 24.05.2004, 00:20
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 5320 Отправлено ответов: 14656 Активность: 275.4 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Foamplast Статус: Профессиональный Общий рейтинг: 151.43 URL: мой личный сайт [Подробней >>] |
resu Статус: Начальный Общий рейтинг: 105.92 [Подробней >>] |
Стас Статус: Доверительный Общий рейтинг: 126.58 [Подробней >>] |
St Статус: Профессиональный Общий рейтинг: 105.15 [Подробней >>] |
Pawel Статус: Профессиональный Общий рейтинг: 155.99 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 133.76 URL: Super Assembler Software Телефон: НСС +7 831 3107039 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 116.53 [Подробней >>] |
Artemy Статус: Опытный Общий рейтинг: 111.68 Телефон: 8 905 549 38 66 [Подробней >>] |
_vt Статус: Профессиональный Общий рейтинг: 118.58 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 5293. Здравствуйте. Помогите пожалуйста написать программу преобразования десятичных чисел в восьмеричные... (ответов: 3)
Вопрос № 5294. Уважаемые эксперты! Объясните неграмотному, что происходит Я пишу прогу на Turbo Pascal 7.0, там дел... (ответов: 8)
Вопрос № 5295. Здравствуйте! Объясните, пожалуйста, на примере (или подскажите, где можно взять такую информацию; м... (ответов: 3)
Вопрос № 5296. Здравствуйте Уважаемые Эксперты! Обьясните плиз такой текст. Дизасем-ал прогу в W32Dasm и столкнулся... (ответов: 3)
Вопрос № 5297. Здравствуйте, уважаемые эксперты! Можно ли задавть вопросы по asm в Linux в синтаксисе AT&T? С уваже... (ответов: 4)
Вопрос № 5298. Здравствуйте,уважаемые эксперты!Установил SoftIce4.0.Как я понял из прилагающегося юзергайда,если за... (ответов: 3)
Вопрос № 5299. Здравствуйте, уважаемые эксперты! Есть компьютер с MS-DOS 6.22. У него два последовательных порта CO... (ответов: 3)
Вопросов: 7, ответов: 27
Вопрос № 5293 |
Здравствуйте.
Помогите пожалуйста написать программу преобразования десятичных чисел в восьмеричные используя макроопределения и процедуры. При этом ввод данных нужно осуществить с клавиатуры ,а вывод результата на дисплей посредине салатовым цветом.
Спасибо!
Вопрос отправлен: 19.05.2004, 11:35
Отправитель: Natasha
[Следующий вопрос >>] [Список вопросов]
Отвечает Foamplast
Приветствую Вас, Natasha!
Ловите! http://foamplast.hexx.ru/dec2oct.zip
P.S. Интересно, а зачем девушки вообще программированию учатся? У меня сестра учится на мехмате, от неё я ответа не полчил :)
Ответ отправлен: 23.05.2004, 11:32
Отправитель: Foamplast
Отвечает resu
Здравствуйте, Natasha!
А на каком языке нужна программа, а также для ЧЕГО она (для WinAPI или Dos'a)?
Пишите на mailsux@mail.ru.
Ответ отправлен: 19.05.2004, 19:18
Отправитель: resu
Отвечает Стас
Добрый день, Natasha!
Чего не сделаешь для девушки!
Приложение:
Ответ отправлен: 20.05.2004, 04:16
Отправитель: Стас
Вопрос № 5294 |
Уважаемые эксперты!
Объясните неграмотному, что происходит
Я пишу прогу на Turbo Pascal 7.0, там делаю вставку на
ASMe, в которой нужно быстро заполнить одномерный массив данных f[i]вычисленными значениями переменной a
так вот команда типа
mov f[i] a
высвечивает ошибку синтаксиса;
Как же тогда в ASMe работать с массивами?
Заранее благодарен
Вопрос отправлен: 19.05.2004, 12:48
Отправитель: Andrew (chkandrew@yandex.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает resu
Доброе время суток, Andrew!
В вашей проге вы пересылаете из одной переменной в другую.
Нельззя!
По моему лучше так:
Приложение:
Ответ отправлен: 19.05.2004, 19:17
Отправитель: resu
Отвечает St
Привет, Andrew!
Из памяти в память (например из переменной в массив) нельзя скопировать данные командой mov, это надо делать или через промежуточное занесение числа в регистр или пользоваться коммандой movs
St
Ответ отправлен: 19.05.2004, 17:43
Отправитель: St
Отвечает Pawel
Приветствую Вас, Andrew!
Только так:
mov eax,a
mov f[i]?,eax
Ответ отправлен: 19.05.2004, 19:55
Отправитель: Pawel
Отвечает Евгений Иванов
Приветствую Вас, Andrew!
mov si,[f]
mov bx,[i]
mov ax,[a]
mov [si+bx],ax
inc bx
inc bx
...
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 19.05.2004, 23:55
Отправитель: Евгений Иванов
Отвечает Ayl
Здравствуйте, Andrew!
Ну так и правильно ругается! А что ты хочешь? Если хочешь использовать обращения, подобные f [i], так и пиши просто на Паскале. А на ассемблере нужно писать примерно так:
asm
lea si, f
mov cx, <число элементов массива>
mov al (ax), a ; вычисленное значение, не знаю размерности
cld
rep stosb (stosw для размерности 16 бит)
Ответ отправлен: 19.05.2004, 13:03
Отправитель: Ayl
Отвечает Artemy
Добрый день, Andrew!
procedure AsmArray
var
f: array [0..5] of byte;
begin
asm
mov cx,5;
mov si,offset f;
mov al,5
sub al,cl
@l1: mov ds:[si],al;
inc si;
loop @l1;
end;
{массив заполнен значениями от 0 до 5}
end;
Ответ отправлен: 21.05.2004, 10:22
Отправитель: Artemy
Отвечает Стас
Доброе время суток, Andrew!
Просто. Берешь адрес, суешь его в регистр, скажем BX. И работаешь, например так:
mov byte ptr [bx+8],52
mov byte ptr [bx+4],13
или так:
mov byte ptr [bx],1
inc bx
mov byte ptr [bx],2
или еще много как.
А вот и на Pascal.
Приложение:
Ответ отправлен: 20.05.2004, 02:16
Отправитель: Стас
Отвечает Foamplast
Приветствую Вас, Andrew!
В ассемблере квадратные скобки означают обращение к памяти. Внутри скобок может стоять либо конкретный адрес, либо регистр, либо их суммы. Общая схема выглядит так:
Cs: Ss: Ds: Es: Fs: Gs: | Eax Ebx Ecx Edx Ebp Esp Esi Edi | + | Eax Ebx Ecx Edx Ebp Esi Edi | * | 1 2 4 8 | + | смещение |
То есть допустимы следующие выражения:
Mov | Eax, | [1124] |
Mov | Eax, | [Ebx] |
Mov | Eax, | [Ecx + Esi*8 + 8734] |
Выражение f[i] недопустимо. Для доступа к элементам массива используется индескация. Например, если есть массив слов f, то:
Mov | Eax, | [f + 3*2] | ; помещает в Еах значение четвёртого элемента массива |
Mov | Eax, | [f + 15*2] | ; помещает в Еах значение шестнадцатого элемента массива |
Mov | Ecx, | [i] | ; помещает в Есх значение переменной i |
Mov | Eax, | [f + Ecx*2] | ; помещает в Еах значение i-го элемента массива |
Ответ отправлен: 23.05.2004, 01:57
Отправитель: Foamplast
Вопрос № 5295 |
Здравствуйте! Объясните, пожалуйста, на примере (или подскажите, где можно взять такую информацию; многие источники пишут, как сделать приложение, состоящее из одного окна) как организовать взаимодействие двух Windows-окон? Для каждого окна я зарегестрировал свой класс и свою
оконную процедуру, однако, сообщения второго окна не обрабытваются.
Приложение:
Вопрос отправлен: 19.05.2004, 13:05
Отправитель: dimon1979 (dimon4386@yandex.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Pawel
Доброе время суток, dimon1979!
Зависет от того, какие флоги вы используете при создании дочернего окна.
Ответ отправлен: 19.05.2004, 19:56
Отправитель: Pawel
Отвечает _vt
Приветствую Вас, dimon1979!
Из MSDN:
The first time an application calls ShowWindow, it should use the WinMain function's nCmdShow parameter as its nCmdShow parameter. Subsequent calls to ShowWindow must use one of the values in the given list, instead of the one specified by the WinMain function's nCmdShow parameter.
As noted in the discussion of the nCmdShow parameter, the nCmdShow value is ignored in the first call to ShowWindow if the program that launched the application specifies startup information in the STARTUPINFO structure. In this case, ShowWindow uses the information specified in the STARTUPINFO structure to show the window. On subsequent calls, the application must call ShowWindow with nCmdShow set to SW_SHOWDEFAULT to use the startup information provided by the program that launched the application. This behavior is designed for the following situations:
Applications create their main window by calling CreateWindow with the WS_VISIBLE flag set.
Applications create their main window by calling CreateWindow with the WS_VISIBLE flag cleared, and later call ShowWindow with the SW_SHOW flag set to make it visible.
·
E-Man : Life begins at 1000Mhz!
Ответ отправлен: 20.05.2004, 08:01
Отправитель: _vt
Отвечает Foamplast
Здорово, dimon1979!
По-моему, это как два пальца... Я для Вас пример сделал, его можно скачать: http://foamplast.hexx.ru/splash.zip
Ответ отправлен: 23.05.2004, 01:58
Отправитель: Foamplast
Вопрос № 5296 |
Здравствуйте Уважаемые Эксперты!
Обьясните плиз такой текст. Дизасем-ал прогу в W32Dasm и столкнулся со строчками 1. mov edx, prt[0021601c],насколько я понял заносим в регистр edx указатель на адрес,но перейти на этот адрес нельзя т.к. его нет в проге,может я не правельно понял запись . 2. mov edx,000a9dc5 по этому адресу находится xor eax,eax,надо полагать это заносится результат команды xor регистр edx.Прошу обьяснить а то совсем запутался.
Зарание благодарен!
Вопрос отправлен: 19.05.2004, 15:24
Отправитель: vlad
[Следующий вопрос >>] [Список вопросов]
Отвечает Pawel
Приветствую Вас, vlad!
1)mov edx, prt[0021601c] заносим в edx dw с адреса 0021601c
2)mov edx,000a9dc5 заносим в edx 000a9dc5
Ответ отправлен: 19.05.2004, 20:02
Отправитель: Pawel
Отвечает Стас
Добрый день, vlad!
1) mov edx,ptr[0021601c] - занести в регистр EDX двойное слово находящееся по адресу 0021601c. Как его потом использовать как смещение, число или еще как зависит от программы.
2) mov edx,000a9dc5, по этому адресу находится xor eax,eax.
В смысле по адресу 0a9dc5? А с чего ты решил, что это адрес?
Из приведенных тобой команд, это не вытекает.
Если это выглядит так:
xor eax,eax
mov [000a9dc5],ax ;обнуление некоего счетчика, возможно.
....
mov edx,000a9dc5
дальше это адрес должен быть использован, например так
inс dword ptr [edx]; увеличение на 1
Ответ отправлен: 19.05.2004, 17:07
Отправитель: Стас
Отвечает Foamplast
Добрый день, vlad!
Ну просто всё не так!
- mov edx, ptr [0021601c] - эта команда заносит в регистр edx содержимое ячейки памяти по адресу 0021601c. Он может и не присутствовать в образе программы, это может быть адрес в секции неинициализированных данных (правда, дизассемблер такое должен знать).
- mov edx, 000a9dc5 - команда заносит в регистр edx число 000a9dc5. И ничего больше. А уж что оно может значить - адрес в ОЗУ или номер счёта в банке - решать автору программы.
- Посмотрите вопрос номер 5294, я там подробнее про адресацию объяснял.
- У Вас орфографическая ошибка в слове "правильно" :)
Ответ отправлен: 23.05.2004, 01:58
Отправитель: Foamplast
Вопрос № 5297 |
Здравствуйте, уважаемые эксперты! Можно ли задавть вопросы по asm в Linux в синтаксисе AT&T?
С уважением, Александр
Вопрос отправлен: 19.05.2004, 22:07
Отправитель: Alexander
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Здравствуйте, Alexander!
Можно.
Только здесь большинство экспертов заточены под tasm, nasm, fasm, masm ;)
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 20.05.2004, 12:33
Отправитель: Евгений Иванов
Отвечает _vt
Здравствуйте, Alexander!
А почему ви спрашиваете? ;-)
E-Man : Life begins at 1000Mhz!
Ответ отправлен: 20.05.2004, 08:01
Отправитель: _vt
Отвечает Pawel
Доброе время суток, Alexander!
Можно.
Ответ отправлен: 21.05.2004, 13:55
Отправитель: Pawel
Отвечает Foamplast
Здравствуйте, Alexander!
Да, можно. Только я не уверен, что кто-нибудь из экспертов им пользуется. Ведь есть NASM и FASM - они и под "Виндовс" и под "Линакс". А их синтаксис представляет собой доработанный интеловский. Он по точности не хуже AT&T. (И, как мне кажется, проще)
Ответ отправлен: 23.05.2004, 01:59
Отправитель: Foamplast
Вопрос № 5298 |
Здравствуйте,уважаемые эксперты!Установил SoftIce4.0.Как я понял из прилагающегося юзергайда,если запускать Айс вручную,то сначала надо выбрать в Программах Start SoftIce,потом "net start ntice",дальше SymbolLoader.Но SymbolLoader пишет,что "SoftICE is not active. Symbols cannot be loaded."Пробовал,чтоб Айс запускался автоматически - то же самое.Подскажите,пожалуйста,что не так делаю?Или он не рассчитан на WinXP,который я использую?
Вопрос отправлен: 19.05.2004, 22:32
Отправитель: gnev_makaki (vyatich2002@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает _vt
Здравствуйте, gnev_makaki!
Если "SoftICE is not active", значит команда "net start ntice" была неудачной - запусти cmd.exe, выполни ее там и посмотри, что получится.
E-Man : Life begins at 1000Mhz!
Ответ отправлен: 20.05.2004, 08:02
Отправитель: _vt
Отвечает Pawel
Приветствую Вас, gnev_makaki!
Значет неудалось активировать версию. (потом "net start ntice",дальше SymbolLoader)
Ответ отправлен: 21.05.2004, 14:03
Отправитель: Pawel
Отвечает Foamplast
Здравствуйте, Гнев Макаки!
Не знаю точно, но может быть и не рассчитан. По крайней мере "СофтАйс" под "Виндовс 95-98-МЕ" и под "Виндовс НТ" должет быть разный, хотя производитель всегда может объединить дистрибутивы. А Вы драйверы отлаживаете? Если нет, то мой совет - воспользуйтесь отладчиком уровня пользователя - OllyDbg. http://home.t-online.de/home/Ollydbg
Ответ отправлен: 23.05.2004, 02:00
Отправитель: Foamplast
Вопрос № 5299 |
Здравствуйте, уважаемые эксперты!
Есть компьютер с MS-DOS 6.22. У него два последовательных порта COM1, COM2. На COM1 подцеплен датчик (протокол оптический), на COM2 висит контроллер (протокол Modbus). Нужно принять данные из COM1, конвертировать и отправить на COM2.
Так вот какого типа (драйвер, резидентная, обработчик прерывания) программу лучше написать? Скорость портов может быть любой (до 115200 бод). UART 16550A (16 байтный буфер FIFO). Данные с датчика поступают постоянно, допустим со скоростью 115200 бод = 115200/8 = 14400 байт/с. После чтения байта программа имеет около 1/14400 сек для выполнения каких-то других операций (конвертирование и отправка данных), а время на выполнение этих операций слишком мало, так еще нужно каждую секунду успевать программе принимать данные. Как мне выйти из этой ситуации? Какую оптимальную скорость подобрать, чтобы и данные шустро бегали и программа успевала обрабатывать их?
Заранее благодарю!
Вопрос отправлен: 20.05.2004, 00:17
Отправитель: Эдуард (hied345@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Добрый день, Эдуард!
Во первых, 14 Кб в секунду - это очень мало, так что комп будет успевать делать многое ещё. Пиши свой обработчик прерывания и вперёд.
Программа может быть хоть резидентной, хоть простой - неважно.
Драйвер в ДОС мало чем отличается от простого обработчика прерывания, может быть, только форматом исполняемого файла.
Бывай.
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 20.05.2004, 12:33
Отправитель: Евгений Иванов
Отвечает Стас
Здравствуйте, Эдуард!
Я так понимаю, что использовать комп никто не будет, соответственно можно написать прогу просто запускающаюся из autoexec.bat. Нет смысл писать резидент, тем более драйвер.
Обработку прерывания делать придется в любом случае (IRQ3 для COM1). Скорость портов - макс. которую позволяет COM порт(наверное будет 115200). Даже если у тебя I286, времени на обработку должно быть достаточно.
Если же резидент, то организовать прогу можно так:
1 часть прием данных в приемный буффер, здесь надо не забыть о возможном переполнении буффера, ставится флаг ПРИЕМ, запоминаем "количество байт".
2 часть преобразование данных, берем из буффера приема пишем в буффер передачи, очищаем флаг ПРИЕМ, ставим ПЕРЕДАЧА, добавляем "кол-во обработанных" к значению "подготовлено к отправке".
3 часть если стоит флаг "ПЕРЕДАЧА" передача буффера передачи на COM2.
1 часть висит на IRQ3.
2 и 3 могут либо быть продолжением 1 части, либо висеть на таймере.
Если в процессе тестирования буффер переполнится, можно либо увеличить буффер либо заняться оптимизацией, либо сбавить скорость порта.
Ответ отправлен: 20.05.2004, 01:12
Отправитель: Стас
Отвечает Pawel
Приветствую Вас, Эдуард!
Проще всего написать резидент для DOS с обработчиком прерываний.
Ответ отправлен: 21.05.2004, 14:00
Отправитель: Pawel
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (24) C / C++ (15) Perl (2) Builder / Delphi (15) Pascal (20) Basic / VBA (2) Java / JavaScript (4) PHP (12) Криптография (5) WinAPI (7) Радиоэлектроника (6) |
Пользователю Windows 95/98/Me (35) Windows NT/2000/XP (47) "Железо" (29) Поиск информации (16) |
Администратору Windows NT/2000/XP (24) Linux / Unix (9) |
Юристу Гражданское право (9) Семейное право (7) Трудовое право (8) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||