Консультация онлайн # 177926

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






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

Приложение:


Лысков Игорь Витальевич

Советник
19.04.2010, 14:50
5
Спасибо Вам огромное!!!!!!

Мини-форум консультации # 177926

неизвестный

227535

= общий =    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 т.к. это выход или я не прав?
неизвестный

227537

= общий =    19.04.2010, 15:20
Лысков Игорь Витальевич:
Ой извините я ступил сильно((((((((9 smile return - это метка
Лысков Игорь Витальевич

Советник

ID: 7438

227538

= общий =    19.04.2010, 15:24
Метка... smile Ну и каков результат?
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
неизвестный

227540

= общий =    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
неизвестный

227541

= общий =    19.04.2010, 15:32
Лысков Игорь Витальевич:
Мне результаты программы нужно видеть в регистрах я буду запускать программу пошагово трассировкой
Лысков Игорь Витальевич

Советник

ID: 7438

227542

= общий =    19.04.2010, 15:36
Vitvol:
Попробуйте записать:
mov Result, eax

А результаты Вы и будете видеть в регистрах... smile
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Лысков Игорь Витальевич

Советник

ID: 7438

227543

= общий =    19.04.2010, 15:41
Vitvol:
Operand size mismatch означает несоответствие размера операндов, т.е. Delphi, похоже, ждет dword, а я ему хотел дать байт
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
неизвестный

227561

= общий =    19.04.2010, 18:28
Лысков Игорь Витальевич:
smile Не работает та же ошибка ( Сейчас пороюсь в коспектах еще может что-нибудь нарою!
неизвестный

227563

= общий =    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.
smile smile smile

Еще вопрос, а долго описание этой л.р. ,которая написана под 8080 сделать его для 8086???? Если что , то я отблагодарю) smile
Лысков Игорь Витальевич

Советник

ID: 7438

227740

= общий =    21.04.2010, 18:02
Vitvol:
А в чем вопрос-то? Как раз данная программа сделана под 8086.
Надо аналогично другое сделать? Легко... smile
=====
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
неизвестный

227847

= общий =    22.04.2010, 23:34
Лысков Игорь Витальевич:
Нее Вы не поняли, описание всмысле не комментарии к программе ,а описание самой лабораторной вот и все) Препод сказал что не нужно описание, программы хватит)
Все спасибо уже ничего не нужно) Я уже сдал работу!
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.