Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2008, 19:25   #1
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
Стрелка Массивы, частное, остаток(исправить)

Программа неправильно считает Остаток и Частное.
Частное и Остаток возможно получить при помощи Div, для типа Dw; при делении в AX будет целое, а в DX будет остаток.
Вот что про это написано:
Цитата:
DIV:
- если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;

- если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;

- если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.
Необходимо немного подправить код.
Заранее спасибо, кто поможет.
Вложения
Тип файла: rar Mas_DM.rar (2.2 Кб, 12 просмотров)
Alter вне форума Ответить с цитированием
Старый 24.05.2008, 20:47   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Всё-таки не понял, чего хотели-то:

Код:
mDv_loop:
	xor ax, ax
	mov bx, ds:[si] 	; bx := ds[si]  | <- A
	mov ax, Del		; ax := 3
	xor dx, dx
	div bx		; ax := bx div ax
	mov ds:[di], ax	; mDv[di] := ax
	 add si, 2
	 add di, 2
loop    mDv_loop
-это вы берёте и число Del=3 делите на элементы массива A, а называется это дело "Целое от деления на |_DEL_|" ???

А если надо элементы массива поделить на Del, тогда вроде так:

Код:
mDv_loop:
	xor ax, ax
	mov ax, ds:[si] 	; ax := ds[si]  | <- A
	mov bx, Del		; bx := 3
	xor dx, dx
	div bx		; ax := ax div bx
	mov ds:[di], ax	; mDv[di] := ax
	 add si, 2
	 add di, 2
loop    mDv_loop
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 24.05.2008 в 20:50.
Ulex вне форума Ответить с цитированием
Старый 24.05.2008, 21:52   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
Сообщение

Почти то что хотел, подправил в остатке.
Но целые части, у которых минус, выводятся очень большим числом. Как их сделать в нормальном виде, с минусом.
Остатки выводятся теперь правильно, только знак минус пропал перед цифрами, там где он должен быть.
Вот переделанный файл, на анализ:
Вложения
Тип файла: rar Mas_DM2.rar (1.1 Кб, 15 просмотров)
Alter вне форума Ответить с цитированием
Старый 24.05.2008, 23:32   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

div - это беззнаковое деление
для деления со знаком нужно использовать idiv и соответственно подготовить dx

Код:
	mov ax, ds:[si] 	; делимое
	mov bx, Del	; делитель
	;xor dx, dx
             cwd                    ; расширение ax до dword в регистр dx
	idiv bx		; ax := ax:dx div bx
alexBlack вне форума Ответить с цитированием
Старый 24.05.2008, 23:37   #5
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Может быть попробовать IDIV - Знаковое деление (все операнды считаются знаковыми).
Проверить к сожалению не могу, компилятора сейчас нет.

alexBlack, пардон, только щас заметил что я сплогиатничал.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru

Последний раз редактировалось Ulex; 24.05.2008 в 23:51. Причина: -Repeat-
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как исправить??? BlackMamba Microsoft Office Word 1 03.08.2008 12:23
Создать массив только из тех элементов, у которых остаток от деления на М равен L (0<=L<=M-1) Айвенго Microsoft Office Excel 2 12.01.2008 16:28
Помогите исправить код student_63 Помощь студентам 5 13.12.2007 18:20
Исправить надо бы Fainder О форуме и сайтах клуба 2 19.10.2007 20:00