Консультация # 186308: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: У меня есть чуть неверно написанная программа для Tasm .386 . Помогите, пожалуйста, исправить ошибки. Решаемое выражение: (a^3-b^2)/c^2
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: У меня есть чуть неверно написанная программа для Tasm .386 . Помогите, пожалуйста, исправить ошибки. Решаемое выражение: (a^3-b^2)/c^2
Код :
;y=(a^3 - b^2)/c^2
.model small
.stack 100h
.data
a db ?
b db ?
c db ?
.code
start:
mov ax,@data
mov ds,ax
mov al,b
cbw
mov bx,ax
imul bx
mov bx,ax
mov al,c
cbw
cwd
mov ecx,eax
imul ecx
mov ecx,eax
mov al,a
cbw
cwd
mov eax,ecx
imul eax
imul eax
mov eax,ecx
sub ax,bx
cwd
cdq
idiv ecx
mov ax,4c00h
int 21h
end start
Здравствуйте, Посетитель - 341182! Предлагаю Вам Вашу программу с исправлениями и свой вариант программы...
Код :
;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
Можно было написать, например, так:
Код :
;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
Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 04.06.2012, 02:08
5
нет комментария ----- Дата оценки: 04.06.2012, 10:59
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!