Answer the question
In order to leave comments, you need to log in
Division does not work in assembler. What have I done wrong?
I'm trying to first divide the first two elements of the arr16 array by the first element of the arr8 array, then the third and fourth element of arr16 by the first element of the arr8 array, the first division goes well, but when adding the second division to the code, it compiles, but the executable does not start and does not output anything :
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
include <\masm32\include\debug.inc>
includelib <\masm32\lib\debug.lib>
.data
num1 dd ?
ost1 dd ?
num2 dd ?
ost2 dd ?
num3 dd ?
num4 dd ?
arr16 dd 0000b, 0001b, 0010b, 0100b ;массив - делимое 16 байт
arr8 dd 0001b, 0001b ; массив - делитель 8 байт
; Деление:
; в роли делимого выступает пара регистров EDX:EAX - если делитель имеет размерность двойное слово (4 байта),
; тогда после деления частное находим в регистре EAX,
; остаток от деления - в регистре EDX.
.code
start:
mov edx, [arr16] ; заносим в edx первый элемент массива
mov eax, [arr16+4] ; заносим в eax второй элемент массива
div [arr8] ; делим число edx:eax на первый элемент массива с делителем
mov num1,eax ; после деления записываем в num1 частное
mov ost1, edx ; а в ost1 записываем остаток от деления
add [arr16+8], edx ; добавляем остаток к третьему элементу массива- делимого
xor eax,eax ; очищаем eax
xor edx,edx ; очищаем edx
mov edx, [arr16+8] ; третий элемент
mov eax, [arr16+12] ; чтвертый элемент
div [arr8]
;mov num2, eax
;mov ost2, edx
PrintLine
PrintDec num1
PrintLine
invoke ExitProcess, 0
end start
Answer the question
In order to leave comments, you need to log in
mov edx, [arr16] ; put the first element of the array into edx
mov eax, [arr16+4] ; put the second element of the array into eax
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question