Вопрос № 177755: Здравствуйте! Помогите пожалуйста решить задачку по низкоуровневой работе с мышью: Написать программу, которая бы реализовывала установку курсора в правый нижний угол экрана. Предпочтителен - TASM, но буду рад и другим вариантам. ...
Вопрос № 177764: Добрый день! Вопрос о модификации адресов. Почему запись mov ax,120h mov [bx],ax правильна, а просто одна команда mov [bx],120h (без предыдущей команды mov ax,120h) неправильна и пишется invalid instruction operands? Однако, если заменит...
Вопрос № 177755:
Здравствуйте!
Помогите пожалуйста решить задачку по низкоуровневой работе с мышью: Написать программу, которая бы реализовывала установку курсора в правый нижний угол экрана.
Предпочтителен - TASM, но буду рад и другим вариантам. Процессор - 64-битный.
В приложении пример реализации изменения типа курсора в текстовом режиме при нажатии некоторой клавиши на клавиатуре.
Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Гальцов Андрей. Вот Вам программка, сделанная на основе Вашей. Хочу только обратить внимание, что запускать программу надо только из текстового режима (т.е. нажать Alt-Enter на окне CMD)
Приложение:
----- Удачи!
Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 09.04.2010, 10:53
Номер ответа: 260710 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov
Оценка ответа: 5 Комментарий к оценке: Спасибо большое!)
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 260710
на номер 1151 (Россия) |
Еще номера »
Вопрос № 177764:
Добрый день! Вопрос о модификации адресов. Почему запись mov ax,120h mov [bx],ax правильна, а просто одна команда mov [bx],120h (без предыдущей команды mov ax,120h) неправильна и пишется invalid instruction operands? Однако, если заменить mov [bx],120h на mov word ptr [bx],120h, то всё компилируется. Какую роль играет именно здесь word ptr, зачем он тут нужен? Регистр bx двубайтный, число 120h тоже двубайтное, всё же согласовано, для чего переопределять? Если бы число было от 0 до 0FFh, т.е.
однобайтным, тогда переопределение было бы уместным. Или процессор полагает, что вдруг я хочу занести один байт из 120h вместо двух и выдаёт своего рода предупреждение и требует уточнения? Но тогда почему mov byte ptr [bx],120h - invalid instruction operands, а mov byte ptr+1 [bx],120h вообще constant expected? Заранее спасибо.
Отвечает Alex_S, 8-й класс :
для генерации кода команды компилятору необходимо четко знать размер операнда
в данном случае мы имеем дело с косвенной адресацией, т.е. адрес операнда содержится в регистре mov [bx],ax - поместить значение регистра AX по адресу, который содержится в регистре BX здесь размер операнда известен (разрядность AX = 16 бит), поэтому будет сгенерирована команда для записи слова
рассмотрим такой пример: 1) mov byte ptr [bx],1 2) mov word ptr [bx],1
эти две команды похожи, но
имеют разный код это разные команды первая строка - "записать байт со значением 1 по адресу, который содержится в регистре BX" вторая строка - "записать слово со значением 1 по адресу, который содержится в регистре BX"
если в роли операнда мы указываем константу, то необходимо явно задавать размер данных в случае mov [bx],ax неявно подразумевается mov word ptr [bx],ax mov [bx],ax = mov word ptr [bx],ax
смотрим дальше
mov byte ptr [bx],120h дело в том, что 120h = 288 = 100100000b не влезает такое большое значение в 1 байт (8 бит), вот беда какая максимальное значение байта равно FFh = 255 = 11111111b а вот mov word ptr [bx],120h компилируется без ошибок, 255 в шестнадцати битах уместится без проблем
Хоть ответ по сути и правильный, но спрашивалось-то несколько о другом. Будьте внимательны.
-----
∙ Отредактировал: Лысков Игорь Витальевич, Модератор
∙ Дата редактирования: 11.04.2010, 02:01 (время московское)
----- йо-хо-хо!
Ответ отправил: Alex_S, 8-й класс
Ответ отправлен: 09.04.2010, 04:33
Номер ответа: 260698
Оценка ответа: 4
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 260698
на номер 1151 (Россия) |
Еще номера »
Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Adsorores. Хоть уважаемые мной эксперты и поддержали ответ эксперта Alex_S, мне кажется, что на вопрос все-таки не был дан ответ... Сказано то, с чем автор вопроса и так согласен ...
Так понял, речь идет о masm-е. Именно он выдает такую ошибку. Видать, это ошибка самого masm-а. Та же ошибка будет, если дать операндом байт! Т.е. masm в обоих случаях считает неопределенной разрядность операнда.
Что неверно. Чтобы не было ошибки, надо явно указывать разрядность word ptr или byte ptr.
А mov byte ptr+1 [bx],20h - просто ошибка, после byte ptr нельзя писать +1 Но можно записать mov byte ptr 1[bx],20h
Кстати, tasm команду mov [bx],120h обрабатывает корректно и никаких
сообщений не выводит.
----- Удачи!
Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 09.04.2010, 12:52
Номер ответа: 260715 Украина, Кировоград Тел.: +380957525051 ICQ # 234137952 Mail.ru-агент: igorlyskov@mail.ru Абонент Skype: igorlyskov
Оценка ответа: 5
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 260715
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.