· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.VIROLOGY —› Не понял алгоритм округления у Коваля

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Дек 12, 2003 00:01:49

Поделить на 16 значит сдвинуть вправо на 4 бита. Следовательно, если младшие 4 бита сброшены, значит сдвигать можно без остатка.


Дата: Дек 12, 2003 00:18:10

???
Ладно, туплю. Но теперь уже я ничего не понял. Итак, с and мы все всем объяснили правильно, не ошибся ни Гренадер, ни я. Теперь давайте разбираться с делимостью на 16 :))))
Квант, если число имеет последние 4 бита в единицах, можно ли его разделить на 16 %-)))


Дата: Дек 12, 2003 00:20:38

Нет. Поэтому последние 4 бита должны быть сброшены.


Дата: Дек 12, 2003 00:26:21

Quantum

Поделил на кулькуляторе :) Баран я. Правлю все свои посты :)


Дата: Дек 12, 2003 00:33:01

Секунду, теперь уже мне плохо стало. Фрагмент кода:
test ax,000fh          
jz krat_16  

Ну и какого х.? jz будет только если младшие биты выглядят так: ....1111b


Дата: Дек 12, 2003 00:39:49

Да с чего бы? что делает test? правильно, логическое умножение. поэтому команда "test 1111b, 000fh" умножит числа, получит 000fh, и НЕ УСТАНОВИТ ZF. Что и требовалось - значит, число не кратно 16.


Дата: Дек 12, 2003 00:41:13 · Поправил: volodya

[]


Дата: Дек 12, 2003 00:45:03

А я говорил, что трогает? Я просто пропустил слово "логичское" второй раз. Но дело не в этом.
Команда test установит ZF ТОЛЬКО ТОГДА, когда логическое произведение операндов будет == 0, т.е. установка флагов аналогична команде and. так?


Дата: Дек 12, 2003 00:49:45

Все, баста. Хватит на сегодня. Позор на мою лысину. Всем спокойной ночи.


Дата: Дек 12, 2003 00:49:45 · Поправил: Grenader

Да, пожалуй, действительно хватит. Надо выспаться.


Дата: Дек 12, 2003 11:11:55

Ну прогера громадного спасибо и малой лапши на ваши коды(в смысле чтоб создавались удобные в понимании через некоторое время и быстрые по выполнению).


Дата: Дек 12, 2003 14:54:36

Grenader
Проверка на заразность.
mov ax,4200h ;Установим ука-
xor cx,cx ;затель на пос-
dec si ;ледний байт
mov dx,si ;файла ...
int 21h
jnc read_last
jmp close ;Ошибка!
read_last: ;И считаем этот
mov ah,3fh ;байт в ячейку
mov cx,1 ; " last " ...
lea dx,last
int 21h
jc close ;Ошибка !
cmp last,'7' ;"last"="7"
jne write_vir ;Нет - дальше
jmp find_next ;Да - поищем дру-
;гой файл ...
Прости за тупой вопрос, но что означает: "jnc" read_last?
Я понимаю, что твое время ценно, но тем не менее не обесудь.


Дата: Дек 12, 2003 16:26:24

EvilsInterrupt
jnc - буквально, "jump if not carry" - то есть совершить переход, если флаг CF (флаг переноса) сброшен. В данном случае (я не спец по досу, это простая логика), если произойдет ошибка, флаг CF будет установлен досом. Но здесь Коваль написал несколько невнятный код (jnc read_last; jmp close) - это эквивалентно "jc close" - кстати, дальше по тексту так и будет.


Дата: Дек 12, 2003 18:15:28

Grenader
Если со злостью, чо-нить нажелать, то говарят сбудется.
Чтоб блин перед тобой всегда вставали интересные задачи.


Дата: Дек 12, 2003 18:40:53

EvilsInterrupt
пасиб

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.054