Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: assembler: числа с точкой
 
 автор: Crux   (22.05.2008 в 06:49)   письмо автору
 
 

как в ассемблере можно разделить 5 на 3 и результат вывести на экран?
пишу на MASM
результат должен быть в формате двойного слова.

поделитесь примером плиз.

   
 
 автор: sim5   (22.05.2008 в 08:19)   письмо автору
 
   для: Crux   (22.05.2008 в 06:49)
 

Я знаю TASM и то только для микроконтроллеров, но у меня есть в "заначках" готовое из билиотек и прочего и для "старших собратьев". Вот примеры деления:

;это так
;Если длина источника = байт, то делимое = AX, частное = AL, остаток = AH
;Если длина источника = слово, то делимое = DX:AX, частное = AX, остаток = DX

; ***********************************************
; * Деление длинного целого 32-х битового числа *
; ***********************************************
;
; Вход:
; EDX:EAX - делимое
; ECX     - делитель
;
; Выход:
; EDX:EAX - частное
; ECX     - остаток
;
_LDIV32  proc far
         jecxz LDIV32       ; нулевой делитель
         push esi           ; сохранить ESI
         mov esi,eax        ; мл. часть делимого
         mov eax,edx        ; ст. часть делимого
         xor edx,edx        ; реально: 0:EDX
         div ecx            ; EAX - частное, EDX - остаток
         xchg eax,esi       ; SI - частное
         div ecx            ; EAX - частное, EDX - остаток
         mov ecx,edx        ; реальный остаток
         mov edx,esi        ; ст. часть частного
         pop esi            ; восстановить ESI
LDIV32:  ret                ; деление выполнено
_LDIV32  endp

*************
;деление с импользованием цикла и опеpаций add и sub 
;=======================================
;= Entry: ax=numerator, cx=denominator =
;= Exit:  ax=result, dx=remainder      =
;=======================================

Divide   proc  near

         push  cx bx      ; Save used registers
         mov   bx,cx
         xor   dx,dx

Main_Loop:
         cmp   ax,cx
         jb    Done
         add   cx,bx
         jc    Done
         inc   dx         ; Calculate result
         jmp   Main_Loop

Done:
         sub   ax,cx      ; Calculate remainder
         add   ax,bx
         xchg  dx,ax      ; <= result in ax, remainder in dx

         pop   bx cx      ; Restore used registers
         retn

Divide   endp

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования