Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где бы найти ликбез по арифметике на ASM ? работа с большими числами нужна... 
:(
    Опции темы
Ruterian
Дата 6.3.2004, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 9.1.2004
Где: Вязьма, Минск

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



Нужно... Или справочник по командам сопроцессора... где бы взять?
PM MAIL WWW ICQ   Вверх
oleg1973
Дата 6.3.2004, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

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



на интел.сом


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Jin X
Дата 7.3.2004, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вот здесь чуть-чуть есть.
Ещё вот тут.
Вот возведение в квадрат:
Код
.MODEL Tiny
.CODE
ORG     100h

SMART
LOCALS

Start:

; Выводим исходное число на экран
               mov     ah,9
               lea     dx,Number
               int     21h

; Копируем задом наперёд Number в BackNumber
               lea     si,Number+lNumber-1
               lea     di,BackNumber
               mov     cx,lNumber
@@CopyBackw:    std
               lodsb
               sub     al,'0'        ; Превращаем в ASCII
               cld
               stosb
               loop    @@CopyBackw

; Заполняем BackResult нулями
               lea     di,BackResult
               push    di
               mov     cx,lNumber
               xor     ax,ax
               rep     stosw

; Начинаем возведение в квадрат
               lea     si,BackNumber
               pop     di
               mov     cx,lNumber-1  ; Внешний цикл (от lNumber-1 до 0)
@@ExtCycle:     mov     dx,lNumber-1  ; Внутренний цикл (аналогично)
@@IntCycle:
               mov     bx,cx
               mov     al,[si+bx]    ; AL = первая цифра
               mov     bx,dx
               mov     ah,[si+bx]    ; AH = вторая цифра
               mul     ah            ; Перемножаем AX=AL*AH
               aam                   ; AH = старшая цифра, AL = младшая

               add     bx,cx         ; BX = число нулей
               add     bx,di         ; Адрес, куда прибавлять результат
               push    cx
               mov     cl,ah         ; Сохраняем AH в CL
               cbw                   ; AH = 0
               add     al,[bx]       ; Складываем: AL = результат
               aaa                   ; AH = старшая цифра, AL = младшая
               mov     [bx],al       ; Записываем младшую цифру

               add     ah,cl         ; Добавляем CL к AH
               pop     cx
@@Overflow:
               inc     bx            ; Переходим к следующей позиции
               mov     al,ah
               cbw                   ; AH = 0
               add     al,[bx]       ; Складываем: AL = результат
               aaa                   ; Опять корректируем
               mov     [bx],al       ; Записываем цифру
               or      ah,ah         ; Переполнение?
               jnz     @@Overflow    ; Повторяем!

               dec     dx
               jns     @@IntCycle
               dec     cx
               jns     @@ExtCycle

; Копируем передом назад :) BackResult в Result
               lea     si,BackResult+lNumber*2-1
               lea     di,Result
               push    di
               mov     cx,lNumber*2
@@CopyForw:     std
               lodsb
               add     al,'0'
               cld
               stosb
               loop    @@CopyForw

               mov     al,'$'
               stosb                 ; Записываем '$' (конец строки)

; Удаляем нули в начале числа
               pop     di
               mov     cx,lNumber*2
               mov     al,'0'
               repe    scasb

; Выводим результат на экран
               mov     ah,9
               lea     dx,[di-1]
               int     21h

               int     20h           ; Выходим! :)

Number          db      '123456789'
lNumber         =       $-Number
StrEnd          db      ' ^ 2 = $'
; Число в обратном порядке в формате ASCII (9,8,7,6,5,4,3,2,1):
BackNumber      db      lNumber dup (?)
; Результат в обратном порядке а формате ASCII:
BackResult      db      (lNumber*2) dup (?)
; Результат в прямом порядке в виде строки:
Result          db      (lNumber*2) dup (?)

END Start

--------------------
Бойся своей мечты, ибо она осуществима!
PM MAIL   Вверх
Ruterian
Дата 8.3.2004, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 9.1.2004
Где: Вязьма, Минск

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



Jin X
Спасибо.

А ни у кого нет готового отлаженого алгоритма вычисления кол-ва процентов от DWORD, чтобы с десятыми долями процента было?
PM MAIL WWW ICQ   Вверх
Ruterian
Дата 9.3.2004, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 9.1.2004
Где: Вязьма, Минск

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



Ой, я уже сделал с долями процентов... сорри, стормозил smile.gif
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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