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

Как вывести остаток от деления - Assembler

Сергей Щербаков Ученик (41), на голосовании 7 лет назад
Результат деления от -55/4=-13.75
Вывожу -13.
А где храниться остаток 75 и как его вывести. Ума не приложу. Ох если бы эксперт взглянул и ругнулся.

;z=(4*c-d/2+23)/(a*a-1)
.MODEL small
.Stack 100h
Datas segment
a dw 2
c dw 2
d dw 2
z dw ?
h dw ?
znam dw ?
mess db 'Error! Division by zero.$'
Datas ends

Codes segment
Assume cs:Codes, ds:Datas
First:mov ax, Datas
mov ds, ax

;a*a
mov ax, a
cwd
imul a

;if a == 1 => divide by zero => error
cmp ax, 1
je @err

;(a*a)-1
mov h, 1
sbb ax, h
mov znam, ax

;4*c
mov h, 4
mov ax, c
imul h
mov z, ax

;d/2
mov h, 2
mov ax, d
cwd
idiv h

;(4*c)-(d/2)
sbb z, ax

;(4*c-d/2)+23
mov ax, z
mov h, 23
adc ax, h

;(4*c-d/2+23) / (znam)
cwd
idiv znam
mov z, ax

xor ax, ax
mov ax, z
push ax
cmp ax, 0
jns @plus ;åñëè çíàê ïëþñ (çíàêîâûé (ñòàðøèé) áèò ðåçóëüòàòà ðàâåí 0)

mov dl, '-'
mov ah, 02h ;âèâîä
int 21h
pop ax
neg ax

@plus:xor cx, cx
mov bx, 10

@dvsn:xor dx, dx
div bx
push dx
inc cx
test ax, ax
jnz short @dvsn ;åñëè íåò íóëÿ
mov ah, 02h

@vivod: pop dx
add dl, 30h ; +30
int 21h
loop @vivod
jmp @end

@err:mov dx, offset mess
mov ah, 09h
int 21h

@end:mov ax, 4c00h
int 21h
Codes ends
end First
Голосование за лучший ответ
Иван Дурак Просветленный (37772) 7 лет назад
много кода. давай в двух словах.
операция целочисленного деления. ты делишь слово
целая часть помещается в AX, остаток в DX
еуыЗнаток (313) 7 лет назад
вместо z->dx то получим минус 3
mov ax, z
push ax
cmp ax, 0
jns @plus ;åñëè çíàê ïëþñ (çíàêîâûé (ñòàðøèé) áèò ðåçóëüòàòà ðàâåí 0)
Похожие вопросы