Консультация № 160380
13.02.2009, 14:35
0.00 руб.
0 1 1
Очень нужна помощь, помогите пожалуйста: Как с помощью безусловного перехода jmp изменить пограмму чтоб она обрабатывалась 1 раз.(желательно к вечеру)
программа такая :
.model tiny
.code
.386
org 100h
start:
mov eax,20
mov ebx,8
push eax
push ebx
call my_subroutin
pop ebx
pop eax
ret
my_subroutin proc near
mov eax,a
mov ebx,2
mul ebx
mov flag,eax
mov ebx,4
mov eax,b
mul ebx
add eax,flag
add eax,b
add eax,c
mov ebx,-1
mul ebx
and eax,1111111110000011b
or eax, 0000000001100011b
ret
a dd -6
b dd -4
c dd -16
flag dd ?
my_subroutin endp
end start

Обсуждение

давно
Старший Модератор
31795
6196
16.02.2009, 14:08
общий
это ответ
Здравствуйте, Грязнева Ольга Михайловна!

Вы формируете программу с 16-ти битными сегментами, использование 32-х битных команд для работы со стеком некорректно(хотя компилятор не реагирует на это), т.к может ввести в заблуждение программиста, к примеру: при передаче параметров через стек и последуюшим его(стека) корректировкой командой ret ХХ.
Отсюда правильнее было бы так:
Код:
mov bx,offset noCall
push bx
jmp my_subroutin
noCall:

т.к. возврат из подпрограммы происходит по команде retn, а это 16-ти битная команда.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа