Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > простая математика на асме


Автор: turbanoff 30.12.2005, 11:48
Есть 4 переменные(2-х байтотвые): a,b,x,y
Нужно вычислить:
((A* X^2) div (B * X^2)) div (X * Y + 1)
Вводя 1 переменную(например tmp для вывода ответа)
Желательно тоже 2-х байтовую.
Я написал алгоритм, но сотрицательными числами глючит, объясните почему?
Можете прислать на [email protected]/
Мой алгоритм

Код

pusha
      pushf

      mov ax,x
      imul x
      mov bx,ax 
      mov ax,b
      imul bx

      xor ecx,ecx
      mov cx,dx
      shl ecx,8
      add cx,ax

      mov ax,a
      imul bx

      xor ebx,ebx
      mov bx,dx
      shl ebx,8
      add bx,ax 

      mov eax,ebx
      xor edx,edx
      idiv ecx

      mov ecx,eax 
      mov ax,x
      imul y
      xor ebx,ebx
      mov bx,dx
      shl ebx,8
      add bx,ax  
      add ebx,1  

      mov eax,ecx
      xor edx,edx
      idiv ebx

      mov tmp,eax
      popf
      popa


Автор: Janus 30.12.2005, 14:39
Что значит "глючит"? Не выдает ожидаемого ответа? А ты думаешь, как отрицательные числа хранятся?

Автор: turbanoff 30.12.2005, 15:13
подскажи, как правильно, пожалуйста!!![color=skyblue][/color]

Автор: Гость_Ring0D 1.1.2006, 11:46
С наступившим Новым Годом вас господа !
Подскажите пожалуйста : как правильно надо заполнить структуры такого вида :
tkp.PrivilegeCount := 1;
tkp.Privileges[0].Luid := SeDebugNameValue;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;


Я хочу перевести функцию получения SeDebugPrivilege с Дельфи на ассемблер, пока вот что получилось :


.586p
.model flat, stdcall
option casemap :none

include \MASM32\INCLUDE\windows.inc
include \MASM32\INCLUDE\kernel32.inc
include \MASM32\INCLUDE\shell32.inc
include \MASM32\INCLUDE\advapi32.inc

includelib \MASM32\LIB\kernel32.lib
includelib \MASM32\LIB\shell32.lib
includelib \MASM32\LIB\advapi32.lib


.data
R TOKEN_PRIVILEGES <>
hToken dd ?
SeDebug dd ?
Se db "SeDebugPrivilege",0

.code

start:
;****************
invoke GetCurrentProcess
;****************
invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken
;****************
invoke LookupPrivilegeValue, 0, offset Se, SeDebug
;****************
mov R.PrivilegeCount, 1
mov R.Privileges.Luid, SeDebug
;****************
ret
end start

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)