Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик
Статус: Академик
Рейтинг: 10113
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Академик
Рейтинг: 3878
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2424
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1506
Дата выхода:23.03.2012, 16:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:100 / 40
Вопросов / ответов:1 / 1

Консультация # 185630: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Ассемблер TASM Размер переменных - байты Задача: b^3-c^3/d^3 Программа такая: .model small .386 ;.stack 100h .data b db ? c db ? d db ? .code mov ax, @data mov ds, ax mov al, b cbw mov bx, ax

Консультация # 185630:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Ассемблер TASM
Размер переменных - байты

Задача: b^3-c^3/d^3

Программа такая:

.model small
.386
;.stack 100h
.data
b db ?
c db ?
d db ?

.code
mov ax, @data
mov ds, ax

mov al, b
cbw
mov bx, ax
mov al, b
imul al
imul bx
cwd
mov ebx, eax

mov al, c
cbw
mov cx, ax
mov al, c
imul al
imul cx
cwd
mov ecx, eax

sub ebx, ecx

mov al, d
cbw
mov dx, ax
mov al, d
imul al
imul dx
cwd
mov edx, eax

mov eax, ebx
cdq
idiv edx

mov ax, 4c00h <- ошибка: деление на ноль
int 21h
end


В конце выводит ошибку : Деление на ноль, т.е. она правильно считает делимое, после делимого выдает ошибку.

Что надо изменить, чтобы она правильно работала?!

Дата отправки: 20.03.2012, 15:33
Вопрос задал: Yankov Dmitry (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Yankov Dmitry!
Сначала предлагаю свой вариант:

Код :
	.model	small
	.data
b	db	3
c	db	2
d	db	1

	.code
	.386
start:
	mov	ax, @data
	mov	ds, ax

 	movsx	eax, b		;команда делает знаковое расширение байта b до 32 бит регистра eax
	call	cube		;возводим в куб
	mov	ebx, eax	;сохраним

	movsx	eax, c		;аналогично, находим c^3
	call	cube
	sub	ebx, eax	;находим b^3 - c^3

	movsx	eax, d		;d^3
	call	cube
	xchg	eax, ebx	;меняем местами
	cdq
	idiv	ebx		;делим (b^3 - c^3) / d^3

	mov	ax, 4c00h
	int	21h

cube	proc			;eax = eax^3
	mov	ecx, eax	;ecx = eax
	imul	eax, eax	;eax = eax * eax
	imul	eax, ecx	;eax = eax ^3
	ret
cube	endp
	
	end	start


Переделанный Ваш вариант.
Повторяющийся фрагмент оформил подпрограммой.
Убрал лишние присваивания
Код :
	.model	small
	.386
data
b	db	3
c	db	2
d	db	1

	.code
start:
	mov	ax, @data
	mov	ds, ax

	mov	al, b
	call	cube
	mov	ebx, eax

	mov	al, c
	call	cube
	sub	ebx, eax

	mov	al, d
	call	cube
	xchg	eax, ebx
	cdq
	idiv	ebx

	mov	ax, 4c00h
	int	21h

cube	proc
	cbw
	mov	cx, ax
	imul	al
	imul	cx
	cwde
	ret
cube	endp

	end	start

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 20.03.2012, 16:27

5
нет комментария
-----
Дата оценки: 20.03.2012, 16:36

Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное