Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Реализация формулы y=a*b+c/d-a в ассемблере.

Арчи Гнедой Ученик (86), на голосовании 1 неделю назад
Необходимо реализовать формулу y=a*b+c/d-a в ассемблере.Написал код вот,но почему то (вроде все логично) результат произведения и результат деления не складываются:start:
xor eax,eax ;ЕАХ=0
invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0 ;открываем окно используя процедуру DialogProc
or eax,eax ;проверим eax=0
jz exit ;если да(нажата кнопка cancel), то переход к метке exit

lea esi, [d] ;адрес строки для перменной d
call StrToInt ;преобразование d в число результат в EAX
mov ebx,eax ;переносим получившееся в ebx из ячейки eax

lea esi, [c] ;адрес строки для перменной c
call StrToInt ;преобразование c в число результат в EAX
div ebx ;делим с на d результат в eax
mov ecx,eax

lea esi, [a] ;адрес строки для перменной a
call StrToInt ;преобразование a в число результат в EAX
mov ebx,eax ;переносим получившееся в ebx из ячейки eax

lea esi, [b] ;адрес строки для перменной b
call StrToInt ;преобразование b в число результат в EAX
mul ebx
add eax,ecx
sub eax,ebx
Голосование за лучший ответ
Рустам Абдрашитов Мыслитель (9508) 1 месяц назад
На
 section .bss 
a resd 1
b resd 1
c resd 1
d resd 1
result resd 1
buffer resb 16

section .text
global _start

_start:
mov eax, 3
mov ebx, 0
lea ecx, [buffer]
mov edx, 16
int 0x80
call str_to_int
mov [a], eax

mov eax, 3
mov ebx, 0
lea ecx, [buffer]
int 0x80
call str_to_int
mov [b], eax

mov eax, 3
mov ebx, 0
lea ecx, [buffer]
int 0x80
call str_to_int
mov [c], eax

mov eax, 3
mov ebx, 0
lea ecx, [buffer]
int 0x80
call str_to_int
mov [d], eax

mov eax, [a]
imul eax, [b]

mov ebx, [c]
xor edx, edx
mov ecx, [d]
div ecx

add eax, [a]
sub eax, [a]

mov [result], eax

mov eax, 1
xor ebx, ebx
int 0x80

str_to_int:
xor eax, eax
.loop:
movzx ebx, byte [buffer]
cmp ebx, 10
je .done

sub ebx, '0'
add eax, ebx

.loop2:
shl eax, 1

.done:
ret
Похожие вопросы