Вот кусок кода: xor eax,eax xor esi,esi lea si,setpass lea bx,outpass passinc: mov ax,si cmp al,0 je txtout div divi add ah,30h mov bl,ah inc si inc bx jmp passinc ........... divi db 16 Олли стопориться div divi. Подскажите пожалуйста, что тут не так.
она подсказвает тебе что деление на 16 следует заменять сдвигом на 4 )), а взятие остатка от деления на 4 маскированием с 0Fh ) а вообще-то что значит стопорится ?
Нужно edx перед делением инициализировать - для беззнаковых xor edx,edx, для знаковых cdq. Иначе из-за мусора в edx "рез-т" может не уместиться в eax\ax\al и получишь исключение
leo хм он же ax на байт делит во всяком случае раз divi описано как db и не переделано через (d)word ptr то (e)dx должен быть ни при чём Другое дело, что его ax shr 4 скорее всего не помещается в al - потому и то самое исключение, хотя я почему-то всегда был уверен что в этом случае просто ставится флаг переполнения overflow, а щас глянул в справочник и правда исключение такое же как при делении на 0
да, согласен, dx ни причем) но, почему не делится, я не могу понять) а если я в будущем захочу что-нибудь разделить...)) вот на всякий случай исходник)
Код (Text): mov ax,si cmp al,0 je txtout div divi ты делишь смещение setpass на 16 Если ax перед делением будет больше FFF, то ты получишь исключение из-за переполнения.. А вообще деление на 16 можно заменить командой shr ax, 4 (для беззнаковых)
Llirik Тогда получится "причем" Т.к. размер операнда нужно брать не от балды, а так чтобы в него заведомо уместился результат деления
Еще вопрос такой. В коде кое-где надо поставить квадратные скобки. Например: mov bl,[al] но при компиляции ml выдает ошибку: error A2031: must be index or base register. Что делать?
классно ) я в полном восторге ) в твоём 16 разрядном режиме адрес можно задавать регистрами [si], [di], [bx], [bx+si], [bx+di], [bp+si], [bp+di], [bp+смещение] и все предидущими комбинациями + смещение. в 32 разрядном любым 32 разрядным регистром т.е. eax, ebx и пр. e... и любыми их комбинациями типа [eax+ecx*4+смещение] через al задавать адрес нельзя нигде