IMUL Turbo Assembler
При умножении с помощью IMUL двух 32-разрядных чисел неверно записывается результат. Результат должен быть в паре регистров EDX:EAX, но в EDX нули почему-то.
STACKSG SEGMENT PARA STACK
DW 128 DUP(?)
STACKSG ENDS
;---------------------
DATASG SEGMENT PARA
A DD 0FFFFFFFFh
B DD 0FFFFFFFFh
C DD 0FFFFFFFFh
D DD 0FFFFFFFFh
E DD 0FFFFFFFFh
B_DIV_C DQ ?
DATASG ENDS
;---------------------
CODESG SEGMENT PARA
ASSUME DS:DATASG, CS:CODESG, ES:CODESG, SS:STACKSG
START:
.486
PUSH DS
MOV AX, DATASG
MOV DS, AX
XOR AX, AX
;-------------------
MOV EAX, D
IMUL E
MOV AX, 4C00h
INT 21h
CODESG ENDS
END START
Ответы (1 шт):
Автор решения: HideME
→ Ссылка
Надо было использовать MUL, т.к. я забыл, что числа у меня беззнаковые.