LINUX.ORG.RU

[вещества][тупняк]as && div


0

1

есть такой код на асме

.code32
.globl _start
.text
_start: 
        movl    $5,%eax
        movl    $5,%edx
        xchgl   %eax,%edx
        divl    %edx

        movl    $1,%eax
        movl    $0,%ebx
        int     $0x80
при выполнении вываливает:
Исключение в операции с плавающей точкой

ну и где я поделил на ноль?

★★★

divl    >>> %edx <<<

Этот код всегда вызывает исключение деления на ноль - используй другой регистр для делителя.

bukinist ()

Система небось 64 бита?

anonymous ()

Перед делением ещё нужно обнулить edx:

section		.data
string1:	db "%d", 0xa, 0

section		.text
global		main
extern		printf

main:
	mov			eax, 666
	mov			ebx, 2
	xor			edx, edx
	div			ebx

  mov			esi, eax
	mov			edi, string1
	xor			eax, eax
	call		printf

anonymous ()

> ну и где я поделил на ноль?

А с чего вы взяли, что тут деление на ноль?

0x500000005 / 5 = 0x100000001, что не влезает в 32 бита. Потому и #DE. См. интеловский мануал, том 2а.

Relan ★★★★★ ()
Ответ на: комментарий от anonymous

вах! а я тож думал, что мы мило делим eax на edx. Эх, Зубков-Зубков

luke ★★★ ()
Ответ на: комментарий от luke

> а с чего 0x500000005? там же 0x5

И еще раз ненавязчиво отсылаю вас читать интеловский мануал, том 2а.

Relan ★★★★★ ()
Ответ на: комментарий от luke

>а с чего 0x500000005? там же 0x5

Хоть ни то ни другое неправильно, но как написал анонимус

div op == edx:eax / op

так что, что бы не содержал регистр edx - это либо явное деление на ноль, либо результат не помещается в 32 битный регистр - всегда вызывает исключение, не используй edx или dx в этих операциях вообще.

bukinist ()
Ответ на: комментарий от luke

> у меня есть ман по 486-му. сойдёт?

Откуда ж я знаю что у вас там за ман. Лично я предпочитаю интеловские — они довольно подробные (описание инструкций так вообще практически исчерпывающее) и поддерживаются в актуальном состоянии. Правда на вражеском языке.

Relan ★★★★★ ()
Ответ на: комментарий от luke

даже в 8086 фич до кучи

чтож тогда 32-битные регистры используешь?

Begemoth ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.