Консультация № 177926
19.04.2010, 00:18
43.65 руб.
0 12 1
Здравствуйте Уважаемые Эксперты! Помогите мне пожалуйста! Мне нужно сделать задачу ,которая написана ниже для процессора i8086. Сама лабораторная работа сделана для проц. i8080! Мне нужно сделать эту задачу в отладчике Delphi ,чтобы она выполнялась например в Delphi 2010 или в Delphi 7!
Вот задача:






Обсуждение

давно
Посетитель
7438
7205
19.04.2010, 14:50
общий
это ответ
Здравствуйте, Vitvol.
Вот Вам функция для Delphi.
У меня Delphi нет, проверить не могу.
Пробуйте. Если что не так, говорите, я подправлю.

Приложение:
function CalcY(x:char,k:char):char;
begin
asm
{чтение числа в al}
mov al,x
{сохраним в ah}
mov ah,al
{сравним с 23}
cmp al,23
{если >=, то переходим на метку}
jnc GreatEqual
{x/2, делим на 2 сдвигом вправо}
shr ah,1
{отнимем из 41}
mov al,41
{41-x/2}
sub al,ah
{на выход}
jmp return
{>=}
GreatEqual:
{проверим на =}
jz Equal
{k}
mov al,k
{k+x}
add al,ah
{инверсия k+x}
not al
{на выход}
jmp return
{=}
Equal:
{3}
mov al,3
{3*x}
mul ah
{3*x or k}
or al,k
{выход}
return:
{результат функции}
mov Result,al
end;
end;
5
Спасибо Вам огромное!!!!!!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
19.04.2010, 15:11
общий
Лысков Игорь Витальевич:
Спасибо за быстрый ответ! Я вставил код в Delphi и получил следующее:
Build
Checking project dependencies...
Compiling Project1.dproj (Debug configuration)
[DCC Error] Project1.dpr(26): E2003 Undeclared identifier: 'return'
[DCC Error] Project1.dpr(32): E2107 Operand size mismatch
[DCC Error] Project1.dpr(46): E2107 Operand size mismatch
[DCC Error] Project1.dpr(48): E2031 Label expected
[DCC Error] Project1.dpr(50): E2107 Operand size mismatch
[DCC Error] Project1.dpr(53): E2029 ';' expected but '.' found
[DCC Error] Project1.dpr(55): E2029 Declaration expected but end of file found
Failed
Elapsed time: 00:00:00.0
Output
Build started 19.04.2010 15:06:58.

Ваш код больше подходит для C, вот эта ошибка мне больше всего не нравится [DCC Error] Project1.dpr(26): E2003 Undeclared identifier: 'return' . Я пробовал return менять на HLT т.к. это выход или я не прав?
Неизвестный
19.04.2010, 15:20
общий
Лысков Игорь Витальевич:
Ой извините я ступил сильно((((((((9 return - это метка
давно
Посетитель
7438
7205
19.04.2010, 15:24
общий
Метка... Ну и каков результат?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
19.04.2010, 15:27
общий
Лысков Игорь Витальевич:
Вот, все, что смог исправить под Delphi:
Код:
 
function CalcY(x:char;k:char):char;
begin

asm
{чтение числа в al}
mov al,10
{сохраним в ah}
mov ah,al
{сравним с 23}
cmp al,23
{если >=, то переходим на метку}
jnc @GreatEqual
{x/2, делим на 2 сдвигом вправо}
shr ah,1
{отнимем из 41}
mov al,41
{41-x/2}
sub al,ah
{на выход}
jmp @return
{>=}
@GreatEqual:
{проверим на =}
jz @Equal
{k}
mov al,5
{k+x}
add al,ah
{инверсия k+x}
not al
{на выход}
jmp @return
{=}
@Equal:
{3}
mov al,3
{3*x}
mul ah
{3*x or k}
or al,5
{выход}
@return:
{результат функции}
mov Result,al
end;end;

end.


Ошибку показывает здесь:
@return:
{результат функции}
mov Result,al

[DCC Error] Project1.dpr(51): E2107 Operand size mismatch

Не воспринимает он Result
Неизвестный
19.04.2010, 15:32
общий
Лысков Игорь Витальевич:
Мне результаты программы нужно видеть в регистрах я буду запускать программу пошагово трассировкой
давно
Посетитель
7438
7205
19.04.2010, 15:36
общий
Vitvol:
Попробуйте записать:
mov Result, eax

А результаты Вы и будете видеть в регистрах...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
7438
7205
19.04.2010, 15:41
общий
Vitvol:
Operand size mismatch означает несоответствие размера операндов, т.е. Delphi, похоже, ждет dword, а я ему хотел дать байт
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
19.04.2010, 18:28
общий
Лысков Игорь Витальевич:
Не работает та же ошибка ( Сейчас пороюсь в коспектах еще может что-нибудь нарою!
Неизвестный
19.04.2010, 18:40
общий
Лысков Игорь Витальевич:
УРЯЯЯЯ Работает !!! Я сделал так и все запускается! Правильно будет если так сделать?
Код:

begin

asm
{чтение числа в al}
mov al,5
{сохраним в ah}
mov ah,al
{сравним с 23}
cmp al,23
{если >=, то переходим на метку}
jnc @GreatEqual
{x/2, делим на 2 сдвигом вправо}
shr ah,1
{отнимем из 41}
mov al,41
{41-x/2}
sub al,ah
{на выход}
jmp @return
{>=}
@GreatEqual:
{проверим на =}
jz @Equal
{k}
mov al,5
{k+x}
add al,ah
{инверсия k+x}
not al
{на выход}
jmp @return
{=}
@Equal:
{3}
mov al,3
{3*x}
mul ah
{3*x or k}
or al,5
{выход}
@return:
{результат функции}
mov cx,ax
end;

end.


Еще вопрос, а долго описание этой л.р. ,которая написана под 8080 сделать его для 8086???? Если что , то я отблагодарю)
давно
Посетитель
7438
7205
21.04.2010, 18:02
общий
Vitvol:
А в чем вопрос-то? Как раз данная программа сделана под 8086.
Надо аналогично другое сделать? Легко...
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
22.04.2010, 23:34
общий
Лысков Игорь Витальевич:
Нее Вы не поняли, описание всмысле не комментарии к программе ,а описание самой лабораторной вот и все) Препод сказал что не нужно описание, программы хватит)
Все спасибо уже ничего не нужно) Я уже сдал работу!
Форма ответа