Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очистка вещественного массива данных 
:(
    Опции темы
xpamoi
Дата 24.1.2010, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 8.6.2009
Где: Vladivostok city

Репутация: нет
Всего: нет



Написать (на АСМ для Intel 80x86) подпрограмму очистки (обнуления) вещественного массива данных, расположенного в сегменте данных (Начало - в регистре SI, размер массива задан в регистре CX)
PM MAIL Skype   Вверх
AndNot
Дата 24.1.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.2.2008

Репутация: нет
Всего: нет



Просто запиши в массив нули. И все.
PM MAIL   Вверх
iff
Дата 24.1.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Код

        shr     cx, 1                   ;Делим на 2 с остатком
c10:    mov     word ptr [si], 0        ;Заносим в память слово, содержащее нули
        inc     si                      ;Увеличиваем si на 2
        inc     si
        loop    c10                     ;Повторяем
        jnc     c20                     ;Был остаток от деления на 2?
        mov     byte ptr [si], 0        ;Если да, то записываем в память ещё один нулевой байт
c20:


Это сообщение отредактировал(а) iff - 24.1.2010, 13:58


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mikl_
Дата 25.1.2010, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



iff
Код
c10:    mov     word ptr [si], 0        ;Заносим в память слово, содержащее нули
        inc     si                      ;Увеличиваем si на 2
        inc     si
        loop    c10 
можно заменить на rep stosw или использовать строковые команды вам религия не позволяет?   smile 
и последний "финт ушами" mov     byte ptr [si], 0 для чего? Размерность вещественного числа может быть 10 байтов (long), может быть 4 байта (double), может быть 2 байта (single) smile  то есть массив вещественных чисел не может содержать нечетное количество байтов  smile  


Это сообщение отредактировал(а) Mikl_ - 25.1.2010, 08:57
PM MAIL   Вверх
airyashov
Дата 25.1.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Цитата(Mikl_ @  25.1.2010,  03:55 Найти цитируемый пост)
Размерность вещественного числа может быть 10 байтов (long), может быть 4 байта (double), может быть 2 байта (single) smile  то есть массив вещественных чисел не может содержать нечетное количество байтов  smile 

2 это врядли



--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
xpamoi
Дата 25.1.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 8.6.2009
Где: Vladivostok city

Репутация: нет
Всего: нет



а что делает shr ?! почему и что он делит на 2 и куда девается остаток?!  smile 
PM MAIL Skype   Вверх
Mikl_
Дата 25.1.2010, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



Цитата(airyashov)
2 это врядли
начиная с микропроцессора 8087 FPU работало со словами (2 байта) и до сих пор работает smile 
xpamoi
Цитата
а что делает shr ?! почему и что он делит на 2 и куда девается остаток?!

Это iff неудачно попытался оптимизировать -- поместил в CX количество байтов которое занимает массив вещественных слов
поделил его пополам и если бы количество байтов оказалось нечетным то он бы 
mov byte ptr[si],0;Если да, то записываем в память ещё один нулевой байт
Но во-первых там будет четное количество байтов а во-вторых команды jnc c20/mov byte ptr[si],0/c20: нужно поставить сразу после shr cx,1 чтобы последующие команды не испортили флаг CARRY остаток попадает в этот флаг
твоя программа в четырех строках
Код
mov ax,0; значения в AX будут затирать массив
mov cx,N; N -- количество чисел в массиве
mov di,offest mass; указываем на начало массива
rep stosw; затираем содержимое массива нулями



Это сообщение отредактировал(а) Mikl_ - 25.1.2010, 14:25
PM MAIL   Вверх
airyashov
Дата 25.1.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Цитата(Mikl_ @  25.1.2010,  13:32 Найти цитируемый пост)
Цитата(airyashov)
2 это врядли
начиная с микропроцессора 8087 FPU работало со словами (2 байта) и до сих пор работает smile

только не с вещественными, с целыми да


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
iff
Дата 25.1.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Администратор
**


Профиль
Группа: Участник
Сообщений: 949
Регистрация: 23.3.2007

Репутация: 5
Всего: 16



Цитата

чтобы последующие команды не испортили флаг CARRY

Об этом я подумал. И додумался что не испортят: 1) mov word ptr [si], 0 - точно не испортит.
2) inc si - не испортит, если результат меньше 65535. А если результат болше 65535 то программа будет работать некорректно в любом случае (независимо от места нахождения shr)
3) loop c10 - тоже не вызовет переполнения.

Цитата

можно заменить на rep stosw или использовать строковые команды вам религия не позволяет?

Я ещё их не проходил.  smile

Цитата

Размерность вещественного числа может быть 10 байтов (long), может быть 4 байта (double), может быть 2 байта (single)

Меня сбило, что там не число а их массив. (Не пишите, что всё-ровно чётное кол-во, я уже понял)


--------------------
DOS... Синей пеленой экран заполнил чистый DOS 
Мышь... Стала вдруг квадратной, потеряла форму мышь... 
Я разбил окно, девяностопятое мастдайное окно, 
И поставил DOS, и тогда увидел: Это счастье, — вот оно.  
PM MAIL WWW   Вверх
Mikl_
Дата 26.1.2010, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



iff
Цитата
inc si - не испортит, если результат меньше 65535

команды inc и dec не влияют на флаг переноса smile 
airyashov
Цитата
только не с вещественными, с целыми да

Intel 8087, 80187, 80287, 80387 работают именно с вещественными, не путайте с 8086, 8088, 80186, 80286, 80386 smile 

Это сообщение отредактировал(а) Mikl_ - 26.1.2010, 03:57
PM MAIL   Вверх
airyashov
Дата 26.1.2010, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Mikl_  если не затруднит какой формат у вещественного 2-х байтового?


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
Mikl_
Дата 26.1.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 9.11.2007

Репутация: 6
Всего: 14



airyashov
Цитата
какой формат у вещественного 2-х байтового?

Half-float
Короткий 16-и битный формат, построенный по аналогии с IEEE 754.
Знак – 1 бит, показатель степени – 5 бит (смещение 15), мантисса – 10 бит + 1 скрытый. Всего 16 бит.
Используется в OpenGL и графических процессорах (в частности – для представления яркости пикселя). Немного более подробно можно почитать по ссылкам:
http://home.earthlink.net/~mrob/pub/math/floatformats.htm (тут этот формат называется Minifloat)
http://oss.sgi.com/projects/ogl-sample/reg...float_pixel.txt
Но на самом деле я ступил  smile реализованы во всех x86-совместимых процессорах: smile 
Одинарная точность (single precision) real4 или dd
Знак – 1 бит, показатель степени – 8 бит (смещение 127), мантисса – 23 бита + 1 скрытый. Всего 32 бита
Двойная точность (double precision) real8 или dq
Знак – 1 бит, показатель степени – 11 бит (смещение 1023), мантисса – 52 бита + 1 скрытый. Всего 64 бита
Расширенная точность (extended precision) real10 или dt
Знак – 1 бит, показатель степени – 15 бит, мантисса – 64 бита, скрытого бита нет. Всего 80 бит
Соответственно для заполнения нулями массива вещественных чисел
Код
mov ax,0; значения в AX будут затирать массив
mov cx,N*m; N -- количество чисел в массиве
; m=2 для вещественных чисел типа single precision
; m=4 для вещественных чисел типа double precision
; m=5 для вещественных чисел типа extended precision
mov di,offest mass; указываем на начало массива
rep stosw; затираем содержимое массива нулями


Это сообщение отредактировал(а) Mikl_ - 27.1.2010, 04:12
PM MAIL   Вверх
airyashov
Дата 26.1.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 1.7.2008

Репутация: 2
Всего: 6



Цитата(Mikl_ @  26.1.2010,  10:54 Найти цитируемый пост)
http://oss.sgi.com/projects/ogl-sample/reg...float_pixel.txt

за ссылочку спасибо, однако... интересно


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
xpamoi
Дата 27.1.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 8.6.2009
Где: Vladivostok city

Репутация: нет
Всего: нет



Спасибо Mikl_,  твой вариант кода очень помог=)) да и airyashov, и iff, тоже большое спасибо многое разъяснили=)) 
PM MAIL Skype   Вверх
arcsupport
Дата 27.1.2010, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 24.10.2008

Репутация: нет
Всего: 2



Господа, Вы не забыли установить регистр флага?

Это сообщение отредактировал(а) arcsupport - 27.1.2010, 14:13
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0810 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.