Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 861

/ вопрос открыт /

Всем привет!
Снова вопрос по присоединению OBJ файла, скомпилированного в TASM к проекту delphi.
Никто не вкурсе почему не работает команда ROL, в то время как команда ROR работает превосходно, при том что если набирать во встроенном асме то ROL работает.
Если кто знает как можно исправить, или где можно скачать нормальный TASM (WWW.WASM.ru уже пробывал) то пишите.

Приложение:
  1. ROLROR.asm
  2. =============================================
  3. title ROLROR for 32 byte
  4. .386p
  5. .MODEL FLAT, STDCall
  6.  
  7. ;===================================
  8.  
  9. .DATA
  10. EXTRN x:BYTE,y:BYTE
  11.  
  12. ;===================================
  13.  
  14. .CODE
  15. PUBLIC ROL1
  16. PUBLIC ROR1
  17.  
  18. ;===================================
  19.  
  20. ROL1 PROC
  21.  
  22. mov al,x
  23. mov cl,y
  24. ror al,cl
  25. mov x,al
  26.  
  27. ROL1 ENDP
  28.  
  29. ;===================================
  30.  
  31. ROR1 PROC
  32.  
  33. mov al,x
  34. mov cl,y
  35. ror al,cl
  36. mov x,al
  37.  
  38. ROR1 ENDP
  39.  
  40. ;===================================
  41.  
  42. END
  43.  
  44. =====================================
  45.  
  46. unit1.pas
  47. =====================================
  48. unit Unit1;
  49.  
  50. interface
  51.  
  52. uses
  53. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  54. Dialogs, StdCtrls, ExtCtrls;
  55.  
  56. type
  57. TForm1 = class(TForm)
  58. Edit1: TEdit;
  59. Label1: TLabel;
  60. Button1: TButton;
  61. Button2: TButton;
  62. RadioGroup1: TRadioGroup;
  63. procedure Button1Click(Sender: TObject);
  64. procedure Button2Click(Sender: TObject);
  65. private
  66. { Private declarations }
  67. public
  68. { Public declarations }
  69. end;
  70.  
  71. Procedure ROL1(); STDCall; EXTERNAL;
  72. Procedure ROR1(); STDCall; EXTERNAL;
  73. {$L ROLROR}
  74.  
  75. var
  76. Form1: TForm1;
  77. x,y:byte;
  78.  
  79. implementation
  80.  
  81. {$R *.dfm}
  82.  
  83. procedure TForm1.Button1Click(Sender: TObject);
  84. begin
  85. x:=StrToInt(Edit1.Text);
  86. case radiogroup1.ItemIndex of
  87. 0:y:=1;
  88. 1:y:=2;
  89. 2:y:=3;
  90. end;
  91. {asm
  92. mov cl,y
  93. rol x,cl
  94. end;}
  95. ROL1();
  96. Edit1.Text:=IntToStr(x);
  97. end;
  98.  
  99. procedure TForm1.Button2Click(Sender: TObject);
  100. begin
  101. x:=StrToInt(Edit1.Text);
  102. case radiogroup1.ItemIndex of
  103. 0:y:=1;
  104. 1:y:=2;
  105. 2:y:=3;
  106. end;
  107. ROR1();
  108. Edit1.Text:=IntToStr(x);
  109. end;
  110.  
  111. end.


SOA Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: SOA (статус: Посетитель)
Вопрос отправлен: 8 марта 2010, 13:54
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Паровоз

Здравствуйте, SOA!
Исправляйте текст:
title ROLROR for 32 byte
.386p
.MODEL FLAT, STDCall

;===================================

.DATA
EXTRN x:BYTE,y:BYTE

;===================================

.CODE
PUBLIC ROL1
PUBLIC ROR1

;===================================

ROL1 PROC
PUSHA ;сохраняем регистры
mov al,x
mov cl,y
rol al,cl
mov x,al
POPA ;восстанавливаем регистры
RET
ROL1 ENDP

;===================================

ROR1 PROC
PUSHA ;сохраняем регистры
mov al,x
mov cl,y
ror al,cl
mov x,al
POPA ;восстанавливаем регистры
RET
ROR1 ENDP

;===================================

END

Ответ отправил: Паровоз (статус: 10-ый класс)
Время отправки: 8 марта 2010, 22:43
Оценка за ответ: 5

Комментарий к оценке: Большое спасибо.

Мини-форум вопроса

Всего сообщений: 40; последнее сообщение — 11 марта 2010, 19:59; участников в обсуждении: 5.

Страницы: [1] [2] [Следующая »]

Вадим К

Вадим К (статус: Академик), 8 марта 2010, 16:07 [#1]:

не работает - это не компилируется, или программа компилируется, но выдает неверные результаты?
Галочка "подтверждения прочтения" - вселенское зло.
SOA

SOA (статус: Посетитель), 8 марта 2010, 16:17 [#2]:

В том то и дело что прога компилируется, но при нажатиина соответствующие кнопки ROR сдвигает 1 в байте вправо, а rol нет. При этом если я набираю во встроенном asm в delphi то все сдвигается.
Егор

Егор (статус: 10-ый класс), 8 марта 2010, 16:45 [#3]:

вывод - осваиваем си! там просто:
x>>1; y<<1;
и никаких проблем!
:))))))))))))))
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
SOA

SOA (статус: Посетитель), 8 марта 2010, 16:58 [#4]:

Какой исчерпывающий ответ!!!
Паровоз

Паровоз (статус: 10-ый класс), 8 марта 2010, 17:16 [#5]:

Вы посмотрите повнимательнее свой ассемблерный текст. Там в обеих процедурах выполняется команда ror.
min@y™

min@y™ (статус: Доктор наук), 8 марта 2010, 18:26 [#6]:

Чото я не нашёл в твоём ассемблере команды ROL.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 8 марта 2010, 19:52 [#7]:

To паровоз:
действительно при наборе вопроса случилась очепятка, но смысла это не меняет rol не работает, что легко проверить скомпилировав программу.
min@y™

min@y™ (статус: Доктор наук), 8 марта 2010, 19:59 [#8]:

Бросай ты это дело.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 8 марта 2010, 20:00 [#9]:

А че так? A?!
min@y™

min@y™ (статус: Доктор наук), 8 марта 2010, 20:03 [#10]:

Цитата (SOA):

А че так? A?!

Это моё мнение.
Если хочешь ассемблер + delphi, то лучше юзать именно встроенный.
Отлаживать программы ПРОЩЕ!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 8 марта 2010, 20:06 [#11]:

Я уже писал по поводу встроенного асма кажется.
min@y™

min@y™ (статус: Доктор наук), 8 марта 2010, 20:22 [#12]:

Цитата (SOA):

Я уже писал по поводу встроенного асма кажется.

Я помню. [здесь я написал длинную фразу про сабж, но потом подумал и удалил её].
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
SOA

SOA (статус: Посетитель), 8 марта 2010, 20:24 [#13]:

Да Да...
Паровоз

Паровоз (статус: 10-ый класс), 8 марта 2010, 21:32 [#14]:

Выкладывайте свой obj-файл.
SOA

SOA (статус: Посетитель), 8 марта 2010, 22:17 [#15]:

  title ROLROR for 32 byte
.386p
.MODEL FLAT, STDCall
 
;===================================
 
.DATA
EXTRN x:BYTE,y:BYTE
 
;===================================
 
.CODE
PUBLIC ROL1
PUBLIC ROR1
 
;===================================
 
ROL1 PROC
PUSHA  ;сохраняем регистры
mov al,x
mov cl,y
rol al,cl
mov x,al
POPA  ;восстанавливаем регистры
ROL1 ENDP
 
;===================================
 
ROR1 PROC
PUSHA  ;сохраняем регистры
mov al,x
mov cl,y
ror al,cl
mov x,al
POPA  ;восстанавливаем регистры
ROR1 ENDP
 
;===================================
 
END
Ну а сам obj файл сейчас могу разместить только в новом вопросе, так что предлагаю вам воизбежание криков мол неизвестно что я там еще скомпилировал в своем obj файле, скомпилировать его вам в TASM.
Паровоз

Паровоз (статус: 10-ый класс), 8 марта 2010, 22:23 [#16]:

"предлагаю вам воизбежание криков мол неизвестно что я там еще скомпилировал в своем obj файле, скомпилировать его вам в TASM"

Как раз наоборот, все что Вы скомпилировали в своем obj файле прекрасно видно в окне CPU.
Вадим К

Вадим К (статус: Академик), 8 марта 2010, 22:42 [#17]:

Замечу, что встроенный ассемблер в последних версиях делфи очень продвинутый, он понимает и MMX, SSE и другие команды.

Но если какой то команды нет, то никто не мешает ее вставить в виде опкода:)
Галочка "подтверждения прочтения" - вселенское зло.
Паровоз

Паровоз (статус: 10-ый класс), 8 марта 2010, 22:47 [#18]:

P.S.

У Вас отсутствут команда возврата из процедуры. Сразу же после ROL1 выполняется процедура ROR1, которая делает обратный сдвиг. Что какается ROR1, то вам просто повезло, что программа не вылетела и после ROR1 идет код не требующий восстановления стека.
SOA

SOA (статус: Посетитель), 9 марта 2010, 10:32 [#19]:

Действительно с ret работает. 8)
min@y™

min@y™ (статус: Доктор наук), 9 марта 2010, 10:54 [#20]:

Цитата (SOA):

Действительно с ret работает. 8)

Если бы юзал отладчик - понял бы сразу, в чём ошибка.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 16 ноября 2024, 20:43
Выполнено за 0.04 сек.