Почемуто выбрасывает исключение... ... metka_1: mov eax,0190h cmp eax,0Ah jl metka mov edx,0Ah div edx //????????? add ebx,edx shl ebx,8 jmp metka_1 metka_2: ... Исключение - на переполнение или неверное деление (на ноль)... Почему???
потому как делится пара EDX:EAX на EDX в EDX:EAX лежит 0A00000190h EDX = 0Ah результат деления не помещается в EAX, в этом случае получается иключение.
IMXO это бесконечный цикл: mov eax,0190h cmp eax,0Ah jl metka ; здесь всегда false то есть между metka_1: ... jmp metka_1
ну потому что intel При делении на 32-битный операнд делимое находится в объединении регистров edx и eax. Т.е. если edx = 55555555h a eax = 77777777h, то edx:eax=5555555577777777h (под ":" имеется ввиду объединение) Вот это то число (64-битное) и делится на 32-х битный операнд. Частное кладется в eax, остаток в edx, если частное в eax не помещается (у тебя не помещается один бит) - то исключение.
Mezonin да, он бесконечный, но на первом же "обороте" получается исключение 3onder может сточки metka_1: mov eax,0190h стоит поменять местами?
Теперь пара dx:ax, причем старшая часть делимого в dx, а частное в ax и оно опять не помещается. Ты лучше скажи, что на что нужно поделить, а то вода льется, а результат не меняется
div dx была еще в 16-ти разрядных процах, а вот Eax'а там по понятным причинам не было, поэтому делимое должно быть в dx:ax
Эот одна из вариаций перевода числа из hex в ascii... делим eax на 0Ah (то биш на 10)... Выходит в любом случае регистры объединяются... sorry, не знал...
Вобще-то в edx помещается остаток от деления, поэтому перед делением он должен быть обнулён и трогать его не нужно, иначе будет исключение.
на сколько я понимаю начало должно быть таким Код (Text): mov eax,0190h metka_1: cmp eax,0Ah jl metka cdq mov ecx,0Ah div ecx //?????????
Может mov eax,A0190h mov ecx,0Ah metka_1: cmp eax,0Ah jl metka xor edx, edx div ecx //????????? add ebx,edx shl ebx,8 jmp metka_1 metka_2: ... должно работать