Здравствуйте, Посетитель - 341182!
Предлагаю Вам Вашу программу с исправлениями
и свой вариант программы...
[code h=200];y=(a^3 - b^2)/c^2
.model small
.stack 100h
.data
a db 15 ; !!!надо задать конкретные значения
b db 7
c db 3
.386 ; !!!указываем, что используются возможности 386 процессора
.code
start:
mov ax,@data
mov ds,ax
mov al,b ;al = b
cbw ;ax = b
mov bx,ax ;bx = b
imul bx ;dx:ax = b^2
cwde ;eax = b^2 !!!сразу перейдем к 32-битному регистру
; mov bx,ax ;bx = b^2
mov ebx, eax ;ebx = b^2
mov al,c ;al = c
cbw ;ax = c
; cwd ;dx:ax = c !!!надо cwde, тогда eax = c
cwde ;eax = c !!!
mov ecx,eax ;ecx = c !!!при cwd старшее слово eax - неопределено
imul ecx ;edx:eax = c^2
mov ecx,eax ;ecx = c^2
mov al,a ;al = a
cbw ;ax = a
; cwd ;dx:ax = a !!!надо cwde, тогда eax = c
cwde ;eax = a !!!
; mov eax,ecx ; !!!убрать! затирается а
mov edi, eax ; !!!надо сохранить
imul eax ;eax = a^2
; imul eax ;eax = a^4 !!!а надо a^3
imul eax, edi ;eax = a^3
; mov eax,ecx ; !!!убрать! затирается а^3
; sub ax,bx ;ax = a^3 - b^2 !!!лучше ранее сразу сохранять в ebx
; cwd ;dx:ax = b^2 !!!надо cwde, тогда eax = b^2
sub eax, ebx ;eax = a^3-b^2 !!!лучше так
cdq ;edx:eax = a^3-b^2
idiv ecx ;eax = edx:eax / ecx
mov ax,4c00h
int 21h
end start[/code]
Можно было написать, например, так:
[code h=200];y=(a^3 - b^2)/c^2
.model small
.stack 100h
.data
a db 15
b db 7
c db 3
.386
.code
start:
mov ax,@data
mov ds,ax
movsx eax, c
imul eax, eax
mov ecx, eax
movsx eax, b
imul eax, eax
mov ebx, eax
movsx eax, a
mov edi, eax
imul eax, edi
imul eax, edi
sub eax, ebx
cdq
idiv ecx
mov ax,4c00h
int 21h
end start[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен