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

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный хостинг на базе Linux x64 и Windows x64

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

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 2045
∙ повысить рейтинг »
_Ayl_
Статус: Практикант
Рейтинг: 1861
∙ повысить рейтинг »
vladisslav
Статус: 5-й класс
Рейтинг: 1182
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Assembler (Ассемблер)

Номер выпуска:1321
Дата выхода:14.04.2010, 21:30
Администратор рассылки:Лысков Игорь Витальевич, Модератор
Подписчиков / экспертов:418 / 70
Вопросов / ответов:2 / 3
IRC-канал по теме:#assembler

Вопрос № 177755: Здравствуйте! Помогите пожалуйста решить задачку по низкоуровневой работе с мышью: Написать программу, которая бы реализовывала установку курсора в правый нижний угол экрана. Предпочтителен - TASM, но буду рад и другим вариантам. ...


Вопрос № 177764: Добрый день! Вопрос о модификации адресов. Почему запись mov ax,120h mov [bx],ax правильна, а просто одна команда mov [bx],120h (без предыдущей команды mov ax,120h) неправильна и пишется invalid instruction operands? Однако, если заменит...

Вопрос № 177755:

Здравствуйте!

Помогите пожалуйста решить задачку по низкоуровневой работе с мышью:
Написать программу, которая бы реализовывала установку курсора в правый нижний угол экрана.

Предпочтителен - TASM, но буду рад и другим вариантам.
Процессор - 64-битный.

В приложении пример реализации изменения типа курсора в текстовом режиме при нажатии некоторой клавиши на клавиатуре.

Спасибо!

Отправлен: 08.04.2010, 23:46
Вопрос задал: Гальцов Андрей, Практикант
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич, Модератор :
Здравствуйте, Гальцов Андрей.
Вот Вам программка, сделанная на основе Вашей.
Хочу только обратить внимание, что запускать программу надо только из текстового режима (т.е. нажать Alt-Enter на окне CMD)

Приложение:

-----
Удачи!

Ответ отправил: Лысков Игорь Витальевич, Модератор
Ответ отправлен: 09.04.2010, 10:53
Номер ответа: 260710
Украина, Кировоград
Тел.: +380957525051
ICQ # 234137952
Mail.ru-агент: igorlyskov@mail.ru
Абонент Skype: igorlyskov

Оценка ответа: 5
Комментарий к оценке:
Спасибо большое!)

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 260710 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 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? Заранее спасибо.

    Отправлен: 09.04.2010, 03:31
    Вопрос задал: Adsorores, Посетитель
    Всего ответов: 2
    Страница вопроса »


    Отвечает 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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Отвечает Лысков Игорь Витальевич, Модератор :
    Здравствуйте, 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 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное