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

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


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

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

Выпуск № 568
от 09.10.2006, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 346, Экспертов: 33
В номере:Вопросов: 3, Ответов: 8


Вопрос № 57634: Уважаемые эксперты, подскажите пожалуйсто, как в асм-е определить четное ли число или нет? заранее огромное спасибо ))...
Вопрос № 57703: Уважаемые эксперты не могли бы вы пояснить мне в чем ошибка. Почему не компилируется приложения. Компилирую с помощью masm 6.11. В строках помеченныч звездочками масм выдает ошибку: Instruction operands must be the same size...
Вопрос № 57707: Здравствуйте уважаемые эксперты! Я пишу программу под Winscokets, а точнее pop3 клиента. У меня вопрос как узнать количество байт которые необходимо принять от сервера? ...

Вопрос № 57.634
Уважаемые эксперты, подскажите пожалуйсто, как в асм-е определить четное ли число или нет?
заранее огромное спасибо ))
Отправлен: 03.10.2006, 23:58
Вопрос задал: Глеб (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Евгений Иванов
Здравствуйте, Глеб!

Проверяй нулевой бит. Если включен, то нечётное число.

TEST EAX, 1
JNZ odd

удачи!
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская, 66
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 04.10.2006, 00:04

Отвечает: Jekyll
Здравствуйте, Глеб!

Все очень просто. Если младший разряд равен 1 - то число нечетное, если 0 - четное.

mov eax,Number
test eax,01h
jz some_label
Ответ отправил: Jekyll (статус: 2-ой класс)
Ответ отправлен: 04.10.2006, 00:34

Отвечает: ens
Здравствуйте, Глеб!
Для этих целей используют флаг четности, он равен младшему биту. Проверить можно jp-если четно то прыгнуть туда-то
(там бывести сообщение,что мол результат предыдущей операции четный).Либо выключить все кроме младшего бита числа инструкцией AND,предварительно сохранив число в стеке.
(читай 15 выпуск Калашникова)и сравнить это число с единицей, если равно(je,jz) то четное,нет так нет.
С уважением,ENS.

---------
Если нет выхода ищу вход.
Ответ отправил: ens (статус: 5-ый класс)
Ответ отправлен: 04.10.2006, 17:39

Отвечает: Fluxx
Здравствуйте, Глеб!
Это очень просто. надо проверить младший бит. Если он равен 1 - нечетное, если 0 - четное. Сделать это можно так:

Приложение:

Ответ отправил: Fluxx (статус: 1-ый класс)
Ответ отправлен: 04.10.2006, 21:04


Вопрос № 57.703
Уважаемые эксперты не могли бы вы пояснить мне в чем ошибка. Почему не компилируется приложения. Компилирую с помощью masm 6.11. В строках помеченныч звездочками масм выдает ошибку:
Instruction operands must be the same size

Приложение:

Отправлен: 04.10.2006, 15:05
Вопрос задал: Cubaman (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jekyll
Здравствуйте, Cubaman!

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

Для решения проблемы нужно использовать явные указания компилятору, byte ptr, word ptr, dword ptr и т.д.
Ответ отправил: Jekyll (статус: 2-ой класс)
Ответ отправлен: 04.10.2006, 15:14

Отвечает: ASMодей
Здравствуйте, Cubaman!
Директиву .386 необходимо поставить после объявления сегмента, иначе ассемблер полагает, что сегмент - 32-разрядный.
Кроме того, строку
mov [vector10h],bx
надо заменить на
mov word ptr [vector10h],bx

Ответ отправил: ASMодей (статус: Профессионал)
Россия, Магнитогорск
----
Ответ отправлен: 04.10.2006, 16:54


Вопрос № 57.707
Здравствуйте уважаемые эксперты!
Я пишу программу под Winscokets, а точнее pop3 клиента. У меня вопрос как узнать количество байт которые необходимо принять от сервера?
Отправлен: 04.10.2006, 15:20
Вопрос задал: Шурыгин В.В. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ASMодей
Здравствуйте, Шурыгин В.В.!
Вроде бы эта функция:
IOCtl(FIONREAD, &nBytes);
Ответ отправил: ASMодей (статус: Профессионал)
Россия, Магнитогорск
----
Ответ отправлен: 04.10.2006, 16:59

Отвечает: d-e-n
Здравствуйте, Шурыгин В.В.!

Немного не так.

sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
res = connect(sock, (SOCKADDR*) &addr, sizeof(addr));
res = recv(sock, data, data_len, 0);

Параметры: data - буфер с данных, data_len - его длинна (сколько максимум данных может прочитать сокет)

В res будет SOCKET_ERROR, в случае ошибки, либо длинна полученных данных.

Т.е. чтение будет идти не "сколько нужно", а "сколько есть, но не больше чем можно". Причём, сокет не будет вечно ждать пока появится data_len данных, а остановит ожидание по таймауту.

Чтобы узнать об этом подробней, советую прочитать статьи МСДН-а по сокетам. Например начиная от сюда: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcesdkr/html/wcesdkrrecv.asp
Ответ отправил: d-e-n (статус: 1-ый класс)
Ответ отправлен: 04.10.2006, 17:04


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное