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

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


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

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

Выпуск № 530
от 26.04.2003, 13:30

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 3058
Отправлено ответов: 8977
Активность: 293.5 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

keleb-glin
Статус: Опытный
Общий рейтинг: 109.25
[Подробней >>]
DiGiT[old]
Статус: Профессиональный
Общий рейтинг: 111.74
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.28
URL: Страничка обо мне и моих друзьях
Телефон: +7 902 168 02 65
[Подробней >>]
 
Ayl
Статус: Профессиональный
Общий рейтинг: 118.99
[Подробней >>]
Hangatyr
Статус: Доверительный
Общий рейтинг: 128.71
[Подробней >>]
Knignick
Статус: Доверительный
Общий рейтинг: 120.4
[Подробней >>]
 
Tigran K. Kalaidjian
Статус: Доверительный
Общий рейтинг: 114.95
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.29
URL: Программирование
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 115.04
[Подробней >>]
 
Eugene
Статус: Профессиональный
Общий рейтинг: 108.96
URL: мощный файловый архив
[Подробней >>]
K0dMaster
Статус: Доверительный
Общий рейтинг: 118.14
[Подробней >>]
Beeblebrox
Статус: Профессиональный
Общий рейтинг: 108.93
URL: Beeblebrox / TMA HomePage
[Подробней >>]
 
Paulkan
Статус: Начальный
Общий рейтинг: 104.76
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 3021. Здравствуйте, ув. тов. Эксперты! Я хотел бы спросить чем отличаются ассемблеры в различных операцион... (ответов: 3)
Вопрос № 3022. Ув. эксперты. Исходник к вопросу №3018 некоторые участки для удобства вырезаны. Ошибка при нео... (ответов: 2)
Вопрос № 3023. Уважаемые эксперты! Помню кто-то обмолвился, что у него есть какие-то наработки по управлению различ... (ответов: 2)
Вопрос № 3024. Пожалуйста,нужна полная программа ,как написать программу 'КАЛЬКУЛЯТОР' на Ассемблере.Мне нужен полн... (ответов: 3)
Вопрос № 3025. Здравствуйте уважаемые. Объясните пожалуйста как вписать текст в Edit. Мои попытки в приложении. Тек... (ответов: 1)
Вопрос № 3026. Здравствуйте уважаемые эксперты!Пытаюсь вывести 256 символов ASCII и попутно меняю цвета,перед этим ... (ответов: 6)
Вопрос № 3028. функция getcommandline возвращает указатель на оканчивающуюся нулём строчку, но помимо той команды, ... (ответов: 4)
Вопрос № 3029. Здравствуйте Уважаемые Эксперты!!! Хочу задать , наверно, глупый вопрос ,но все же. Читаю Зуб... (ответов: 8)

Вопросов: 8, ответов: 29


 Вопрос № 3021

Здравствуйте, ув. тов. Эксперты!
Я хотел бы спросить чем отличаются ассемблеры в различных операционных системах.



Вопрос отправлен: 21.04.2003, 04:17
Отправитель: Lux

[Следующий вопрос >>] [Список вопросов]

Отвечает keleb-glin

Добрый день, Lux!
Ассемблеры различаются не по операционным системам, к которым они принадлежат, а просто по синтаксису. Для IBM-совместимых есть синтаксис, предложенный Intel, есть AT&T ( он больше юзается в никсах ) и ещё, по-моему, несколько других. Они отличаются, но не сильно ( в основном, суть одна, много мелких отличий, так, в AT&T операнды располагаются в обратном к интеловскому порядке, плюс вместо mov byte ptr есть movb и т.п. ).
Плюс есть ассемблеры для компов другой архитектуры есть свои принципиально отличающиеся ассемблеры, где всё кардинально отличается из-за различий в системах комманд процессора.


Ответ отправлен: 21.04.2003, 18:35
Отправитель: keleb-glin


Отвечает DiGiT[old]

Приветствую Вас, Lux!
Все дело в том что понимать под ассемблером. Ассемблер, имхо, не должен быть под конкретную ОС, он под конкретную машину. Смотри в любых ОС под IA-32 инструкция mov eax, ebx будет иметь один и тот же код. имеет смысл различать под различные ОС системные вызовы и форматы исполняемых файлов, а инструкции одни и те же.

Ответ отправлен: 21.04.2003, 06:26
Отправитель: DiGiT[old]


Отвечает Gibbel

Приветствую Вас, Lux!
Язык ассемблера различается только для разных процессоров. Операционки тут не при чем.

Ответ отправлен: 21.04.2003, 11:31
Отправитель: Gibbel


 Вопрос № 3022

Ув. эксперты. Исходник к вопросу №3018
некоторые участки для удобства вырезаны.
Ошибка при неоднократном выборе опции 4


Приложение:


Вопрос отправлен: 21.04.2003, 11:15
Отправитель: BAPBAP

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Добрый день, BAPBAP!
Ну так что же ты хочешь... Вылетает... Проблема в работе со стеком - ты в процедуре dec2num вынимаешь из стека нечто, но до этого нигде туда ничего не кладешь. Возможно и в остальных процедурах тоже самое.
Насколько я понял, тебе после выполнения команд:
mov ah, 08h
int 21h
xor ah, ah
нужно выполнить команду push ax


Ответ отправлен: 24.04.2003, 15:48
Отправитель: Ayl


Отвечает Hangatyr

Приветствую Вас, BAPBAP!
Так, исходник есть. Посмотрим...
cmp di, si
jb Cod
pop dx
С какой целью здесь присутствует "pop dx"? И что после выполнения этой инструкции будет в DX? Кажется, баг именно в этом.


Ответ отправлен: 21.04.2003, 13:39
Отправитель: Hangatyr


 Вопрос № 3023

Уважаемые эксперты! Помню кто-то обмолвился, что у него есть какие-то наработки по управлению различными устройствами через LPT порт! Я был бы крайне благодарен, если обладатель подобного материала смог бы поделиться со мной какой-нибудь информацией по данному вопросу =).
Спасибо...



Вопрос отправлен: 21.04.2003, 13:00
Отправитель: =FeanaR=

[Следующий вопрос >>] [Список вопросов]

Отвечает Knignick

Здравствуйте, =FeanaR=!
Описание различных протоколов LPT неплохо изложено у М. Гука
в книге "Аппаратные средства IBM PC". У меня есть собственные библиотеки для работы с LPT портом в различных режимах под Win9x и Win2k. О том, что конкретно тебя интересует, милости прошу в мыло.


Ответ отправлен: 23.04.2003, 05:16
Отправитель: Knignick


Отвечает Tigran K. Kalaidjian

Здравствуйте, =FeanaR=!
Пиши на kalaidjian@pochtamt.ru-перешлю, только ещё укажи под какую ОС, для каких портов и на каком языке программирования нужно писать.

Ответ отправлен: 22.04.2003, 15:31
Отправитель: Tigran K. Kalaidjian


 Вопрос № 3024

Пожалуйста,нужна полная программа ,как написать программу 'КАЛЬКУЛЯТОР' на Ассемблере.Мне нужен полный код программы и Пожалуйста объяснение.
Зарание всем огромное спасибо!
Я студентка,учу программирование на Ассемблере,не легко приходится,учитель дал задание сделать 'КАЛЬКУЛЯТОР' на Ассемблере,а я хоть убей не знаю,5 дней уже бьюсь над этим.
Помогите!Ведь есть же среди Вас "АСЫ" в этом деле.
Спасибо!
Валерия.



Вопрос отправлен: 21.04.2003, 16:00
Отправитель: Valeria Gerber (valeria_gerber@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Добрый день, Valeria Gerber!
Ну блин, врял ли тебе кто-то станет тут писать калькулятор - представь, если каждый, кто сюда обращается будет просить написать ему программу...
Если есть какие-либо вопросы, то не стесняйся, а целые программы, ну ты понимаешь.
Если нужна помощь по алгоритму - то для начала скажи, под ДОС или под Windows будет он у тебя? Вероятно под, дос, т.к. написать на асме под винды - это уже вряд ли для института. Ну а тогда, будет ли в нем графика (текстовая) - как будут вводиться числа (из командной строки или непосредственно в нем) ... и все такое...


Ответ отправлен: 22.04.2003, 00:50
Отправитель: Bob Johnson


Отвечает Hangatyr

Здравствуйте, Valeria Gerber!
Информации маловато... Под какую ось писать? Какие функции должны присутствовать? Интерфейс, в конце концов...

Ответ отправлен: 21.04.2003, 17:03
Отправитель: Hangatyr


Отвечает DiGiT[old]

Здравствуйте, Valeria Gerber!
Дал делать надо делать самому. Иначе проку не будет. Смотри тебе напишут хорошую прогу, а те препод в следующий раз еще жестче даст задачу и будет всем говорить вот у меня есть крутой ассемблерщик :( А если тебя сильно приспичило, то заплати какому нить знакомому (от 200 до 500р)и он те напишет...

Ответ отправлен: 22.04.2003, 06:20
Отправитель: DiGiT[old]


 Вопрос № 3025

Здравствуйте уважаемые.
Объясните пожалуйста как вписать текст в Edit. Мои попытки в приложении.
Текст не выводится в диалог, но и ошибки нет. Желательно пример. И ещё, какое
сообщение надо послать диалогу чтоб типа кнопку ОК нажать.
Спасибо.


Приложение:


Вопрос отправлен: 21.04.2003, 20:31
Отправитель: Макс (maxe@mail.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Доброе время суток, Макс!
Попробуй получить hwnd этого edit (GetDlgItem) должна обязательно вернуть не ноль и потом послать этому окну WM_SETTEXT.


Ответ отправлен: 23.04.2003, 01:30
Отправитель: Bob Johnson


 Вопрос № 3026

Здравствуйте уважаемые эксперты!Пытаюсь вывести 256 символов ASCII и попутно меняю цвета,перед этим делаю очистку экрана ,но к сожалению выход из программы получается некоректный и видимо можно сделать эту программу более лучше:)Пожалуста помогите!Видимо я чего то никак не могу понять:(


Приложение:


Вопрос отправлен: 21.04.2003, 20:42
Отправитель: dim-A

[Следующий вопрос >>] [Список вопросов]

Отвечает Knignick

Ну щас, dim-A, братия экспертов тебе скажет "пару ласковых"
насчет mov ax, 4C00h, int 21h :)



Ответ отправлен: 23.04.2003, 05:02
Отправитель: Knignick


Отвечает Ayl

Приветствую Вас, dim-A!
Насчет некорректного выхода ты что-то загнул - у тебя он попросту отсутствует. Тебе в конце нужно написать:
mov ax, 4c00h
int 21h
По коду программы - очень неопимально. К тому же с ошибками. Я бы написал вот так:

Приложение:

Ответ отправлен: 24.04.2003, 15:31
Отправитель: Ayl


Отвечает Bob Johnson

Здравствуйте, dim-A!
Выход надо делать так:
mov ax, 4c00h
int 21h
а у тебя вообще ничего нет.

Ответ отправлен: 22.04.2003, 01:04
Отправитель: Bob Johnson


Отвечает Tigran K. Kalaidjian

Приветствую Вас, dim-A!
В самом конце перед END поставь следующее:
mov ax, 4c00h
int 21h
Это стандартный выход и возврат управления операционной системе

Ответ отправлен: 22.04.2003, 14:42
Отправитель: Tigran K. Kalaidjian


Отвечает ASMодей

Приветствую Вас, dim-A!
Про выход из программы тебе уже здесь написали, а вот насчет улучшения...
посмотри как работает твоя программа:
1. очищаются первые 256 знакомест экрана
кстати это можно сделать проще и быстрее:
mov ax,0b800h
mov es,ax
sub di,di
sub ax,ax
mov cx,256
rep stosw
2. после выполнения этого цикла регистр CX=0, а регистр DI=256
3. далее ты с адреса 256 заполняешь видеопамять 65536 символами
(команда LOOP с регистром CX=0 будет выполняться именно столько раз),
а так как регистр DI был больше 0, то в процессе он достигнет
максимального значения и обнулится и начнется заполнение видеобуфера
с адреса 0.
В итоге весь экран оказывается заполненным символами.
Так что если ты хотел именно такой работы программы, то все работает
правильно, а если нет, то тебе наверное уже понятно, что нужно исправить.


Ответ отправлен: 22.04.2003, 10:18
Отправитель: ASMодей


Отвечает Hangatyr

Здравствуйте, dim-A!
В принципе, верно, но нет инструкции завершения программы. Подправленный вариант в приложении.


Приложение:

Ответ отправлен: 22.04.2003, 02:35
Отправитель: Hangatyr


 Вопрос № 3028

функция getcommandline возвращает указатель на оканчивающуюся нулём строчку, но помимо той команды, с которой я запустил программу там ещё и полный путь к исполняемому файлу...помойму ещё и в ковычках....
Как мне получить только мою команду ?



Вопрос отправлен: 22.04.2003, 02:13
Отправитель: spaces (s-p-a-c-e-s@yandex.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Knignick

Добрый день, spaces!
Ты хочешь убрать путь?
Самое простое решение:
создать указатель, ссылающийся на следующий за последним (от начала) символом '' Это и будет именя твоей программы.

Ответ отправлен: 23.04.2003, 04:51
Отправитель: Knignick


Отвечает Eugene

Добрый день, spaces!
А что тебе мешает просканировать твою строчку на две кавычки? А затем подправить тот указатель, который у тебя получен после вызова GetCommandLine на столько байт, сколько занимает путь к исполняемому файлу.

Ответ отправлен: 22.04.2003, 16:31
Отправитель: Eugene


Отвечает Bob Johnson

Приветствую Вас, spaces!
Можешь ее парсить. Если не обломно с unicode заморачиваться, можно использовать функцию CommandLineToArgvW (и CommandLineToArgvW, соотв.).


Ответ отправлен: 23.04.2003, 01:31
Отправитель: Bob Johnson


Отвечает K0dMaster

Добрый день, spaces!

Ответ отправлен: 22.04.2003, 10:15
Отправитель: K0dMaster


 Вопрос № 3029

Здравствуйте Уважаемые Эксперты!!!
Хочу задать , наверно, глупый вопрос ,но все же.
Читаю Зубкова,он пишет:
mov ah,9h или mov ax,0003h и т.д.
вызов фун-ии или отчистка экрана или ...
это видно из коментария,а как без коментария опредилить
что это именно функция а не просто какое нибудь число?

Зарание Спасибо!



Вопрос отправлен: 22.04.2003, 13:24
Отправитель: Vladimir

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Приветствую Вас, Vladimir!
Никак. Только из контекста. Например, если встретишь команду int 21h или int 10h, то надо восстановить, что именно к этому моменту будет находится в регистрах. При этом в регистре AH всегда будет номер функции. Далее - берешь справочник по функциям DOS и BIOS и смотришь соответствующее прерывание, в нем находишь функцию и начинаешь разбираться с параметрами.
А просто mov ah, 9 может быть всем, чем угодно.
А комментарии как раз для того и пишут, что бы потом понять, что именно мы в регистр кладем.

Ответ отправлен: 23.04.2003, 18:22
Отправитель: Ayl


Отвечает Knignick

Здравствуйте, Vladimir!
Перед вызовом int 21h, 10h, 2Fh и т.п.
в ah находится код вызываемой функции. Т.е.int 21h означает вызов функции ДОС с номером ah. А что делает это функция и другие ее параметры можно узнать из справочника.


Ответ отправлен: 23.04.2003, 04:37
Отправитель: Knignick


Отвечает Beeblebrox

Добрый день, Vladimir!
Потому что следом за mov ah,9 наверняка идет int 21h, а следом за mov ax,3 идет int 10h :) С опытом ты научишься воспринимать визуально эти строки как один цельный вызов прерывания.

Ответ отправлен: 22.04.2003, 13:54
Отправитель: Beeblebrox


Отвечает Hangatyr

Доброе время суток, Vladimir!
Ну, если за ней стоит вызов прерывания, то это некоторая функция, а какие действия выполняет эта функция можно посмотреть в каком-нибудь справочнике.


Ответ отправлен: 22.04.2003, 14:48
Отправитель: Hangatyr


Отвечает Tigran K. Kalaidjian

Доброе время суток, Vladimir!
Так это ведь и есть простое число !
Просто при вызове соответствующего прерывания номер ф-ции берется из каких-то определённых регистров.
В данном случае из axah.
Если интересно почитать справочник по прерываниям с описанием ф-ций, то можно почитать соотв. справочник Ральфа Брауна

Ответ отправлен: 22.04.2003, 15:41
Отправитель: Tigran K. Kalaidjian


Отвечает Bob Johnson

Приветствую Вас, Vladimir!
Если вызывается функция DOS (int 21h), то ее номер предварительно заносится в регистр ah. Это можно сделать любым доступным образом, хоть:
mov ah, 8
int ah
int 21h
Иногда функция имеет подфункции, номер которых заноситься в регистр al или в al может находиться параметр функции. Так что смотри в программе int 21h и потом смотри, что стоит перед ним.


Ответ отправлен: 23.04.2003, 01:31
Отправитель: Bob Johnson


Отвечает Paulkan

Доброе время суток, Vladimir!
Далее всегда идет какое-нибудь прерывание, поэтому_смотри
описание каждого прерывания : через какой регистр что передается. Обычно функцию заносят в AX

Ответ отправлен: 23.04.2003, 09:37
Отправитель: Paulkan


Отвечает keleb-glin

Приветствую Вас, Vladimir!
Вообще-то вызов функции довольно сильно отличается от чего-нибудь ещё. В ДОСе обычно это int xxh. Непросто бывает определить в какие регистры просто кладётся значение, а в какие - параметр для вызова. Но это надо доки по ф-кциям почитать и подебагить


Ответ отправлен: 25.04.2003, 15:13
Отправитель: keleb-glin



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (36)
C / C++ (28)
Perl (7)
Delphi (13)
Pascal (23)
Basic / VBA (8)
Java / JavaScript (10)
PHP (3)
MySQL / MSSQL (3)
Пользователю
Windows 95/98/Me (28)
Windows NT/2000/XP (22)
"Железо" (23)
Поиск информации (11)
Администратору
Windows NT/2000/XP (11)
Linux / Unix (10)
Юристу
Гражданское право (8)
Семейное право (5)
Трудовое право (5)
КоАП (5)

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




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное