Вопрос № 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 клиента. У меня вопрос как узнать количество байт которые необходимо принять от сервера?
Отвечает: 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