С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48
1

Без понятия как регистрами пользоваться

03.11.2021, 16:11. Показов 796. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем здравствуйте. Без понятия как пользоваться регистрами. Вот задание: "Составить линейную программу, печатающую значение true, если указанное высказывание является истинным, и false — в противном случае: Данная тройка натуральных чисел а, Ь, с является тройкой Пифагора, т.е. с^2 = а^2+ Ь^2 .". Три часа убил на это.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
program test_asm4;
{$APPTYPE CONSOLE}
var
  a, b, c: integer;
 
function pif(a, b, c: integer): boolean; register;
asm
          mov eax, a    //eax = a
          mul eax       //ebx = a*a
 
          mov edx, b    //ecx = b
          mul edx       //edx = b*b
 
          je @@true     //if a*a+b*b=c*c
          test ecx,ecx
          add edx, eax  //a*a+b*b
          mov c, edx    //c=a*a+b*b
          mul edx
          mul edx       //edx=c*c
 
          ret
 
@@true:   xor edx,edx   //return true
          pop edx
end;
begin
  Readln(a, b, c);
  writeln(pif(a, b, c));
  readln
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
03.11.2021, 16:11
Ответы с готовыми решениями:

Как еще можно пользоваться регистрами микроконтроллеров?
Обычно обращение к регистрам МК проходит так: #define REG_1 *((uword volatile far *)(0xBEEFFF))...

оч сильно надо,а я без понятия как делать
Дано 200 вещественных чисел.Определить,сколько из них больше своих "соседей",тоесть предидущего и...

Интересный эффект который я без понятия как реализовать
Вопрос знатокам верстальщикам как реализовано прерывистое свечение молний на этом сайте в первой...

Function склеить (без понятия как это назвать)
<? class engine { function params() { include "set.php"; } function desing()

15
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,996
03.11.2021, 16:26 2
При вызове функции в регистрах EAX, EDX, ECX уже содержатся значения переменных a, b, c соответственно.

Ну и можно в дебагере посмотреть, во что компилируется код
Delphi
1
2
3
4
function pif(a, b, c: integer): boolean;
begin
  Result := c*c = a*a + b*b;
end;
1
3760 / 2264 / 705
Регистрация: 29.05.2013
Сообщений: 9,616
03.11.2021, 19:11 3
Цитата Сообщение от Shiro Paradox Посмотреть сообщение
Без понятия как регистрами пользоваться
Для наглядности этого процесса вы можете сделать точку остановки на первой строке кода и вызвать окно View\Debug windows\CPU Windows\Registers или Ctrl+Alt+R (вызывать его можно только при отладке приложения) и пошагово выполнить ваш код. Все что происходит с регистрами вы увидите в этом окне.
1
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,996
03.11.2021, 19:31 4
Для наглядности лучше точку останова поставить на строке с вызовом функции и открыть "Debug/View CPU". Тогда будет видно, в какие регистры загружаются аргументы функции и после вызова функции будет видно, какие подготовительные шаги предпринимаются.
1
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48
04.11.2021, 10:24  [ТС] 5
Да, но вот только эта функция недоступна(
У меня Delphi 7
0
Модератор
9640 / 6248 / 2425
Регистрация: 21.01.2014
Сообщений: 26,659
Записей в блоге: 3
04.11.2021, 10:37 6
Цитата Сообщение от Shiro Paradox Посмотреть сообщение
но вот только эта функция недоступна
какая "эта функция"? Тут речь вообще-то про отладчик идет. А отладка так-то доступна в любой версии со времен Tuirbo Pascal
0
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,996
04.11.2021, 12:03 7
Цитата Сообщение от Shiro Paradox Посмотреть сообщение
У меня Delphi 7
У меня тоже. Ставишь курсор на строке, где надо остановиться, жмёшь F5 или мышкой слева от строки на серой полосе, где при компиляции появляются синие точки. И запускаешь программу. Когда программа доходит до этой строки то выполнение останавливается и открывается delphi. Теперь можно кнопками F7, F8 выполнять программу пошагово с заходом и без захода в функции соответственно, или продолжить обычное исполнение, нажав F9. А если правой кнопкой мыши нажать на красную строчку, то в открывшемся меню можно выбрать "Debug \ View CPU" и откроется окно состояния процессора и с ассемблерными инструкциям, которые выполняются сейчас.

Добавлено через 1 минуту
Вообще, раз дают задание написать что-то на ассемблере, то по идее должны были уже поизучать и отладчик. Странно.
1
D1973
04.11.2021, 13:42
  #8

Не по теме:

Цитата Сообщение от AzAtom Посмотреть сообщение
по идее должны были уже поизучать и отладчик
Они изучали. Но не все...

0
AxBxC=X
155 / 135 / 58
Регистрация: 27.04.2016
Сообщений: 549
04.11.2021, 13:52 9
Доброго дня дружному сообществу!
Набросал за пару минут, должно работать.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function pifagor(a,b,c : integer):boolean;assembler;
 // c^2 = a^2 + b^2
 asm
 push ebx
 mov ebx, edx
 mul eax
 push eax
 mov eax,ebx
 mul eax
 pop edx
 pop ebx
 add eax, edx
 cmp eax, ecx
 jne @@not_equ
 mov eax,1
 ret
@@not_equ:
 mov eax,0
 end;
Отладку использовал такую же, как в паскалевском коде (точки останова + наведение курсора на операнд).
Нормально показывает значения регистров.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7795 / 4618 / 2831
Регистрация: 22.11.2013
Сообщений: 13,114
Записей в блоге: 1
05.11.2021, 15:00 10
harrybook,
так не попроще/побыстрее?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function Pif(a, b, c: Integer): Boolean; assembler;
// eax <- a, edx <-b, ecx <- c; a^2 + b^2 = c^2
asm
  push edx
  xchg eax,ecx
  mul  eax
  xchg eax,ecx
  mul  eax
  sub  ecx,eax
  pop  eax
  mul  eax
  test eax,ecx
  mov  eax,1
  jz   @yes
  xor  eax,eax
@yes:
end;
1
AxBxC=X
155 / 135 / 58
Регистрация: 27.04.2016
Сообщений: 549
05.11.2021, 18:11 11
bormant
Намного лучше.
Главное, чтобы автору вопроса пригодилось.
1
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 48
05.11.2021, 21:30  [ТС] 12
Спасибо вам! Я сам не понимаю, как вы это делаете? Точнее, как вы понимаете подобное и можете так спокойно кодить на этом кошмарно-сложном языке? Я много времени потратил и нифига не смог. Насчёт дебаггера, препод показывал через View/CPU, при этом он не учил нас этому. Ещё раз спасибо, я немного лучше понял.
0
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,996
05.11.2021, 21:47 13
Цитата Сообщение от Shiro Paradox Посмотреть сообщение
как вы понимаете подобное и можете так спокойно кодить на этом кошмарно-сложном языке?
Это не кошмарно сложный язык, а мнемоническое обозначение инструкций самого процессора. Процессор выполняет именно такие команды. Если понимать, как работает процессор, то ассемблер станет гораздо легче понимать.
НО! Современные программы настолько сложны, что вряд ли кто-то возьмётся написать более-менее большую программу на чистом ассемблере. А вот такие ассемблерные вставки в некоторых функциях это часто бывает.
1
harrybook
05.11.2021, 22:46
  #14

Не по теме:


Shiro Paradox
На преподов не надейтесь, грызите знания самостоятельно.
Иначе ни к чему хорошему не придёте.

0
пофигист широкого профиля
4754 / 3191 / 860
Регистрация: 15.07.2013
Сообщений: 18,482
06.11.2021, 02:29 15
Цитата Сообщение от Shiro Paradox Посмотреть сообщение
Спасибо вам! Я сам не понимаю, как вы это делаете? Точнее, как вы понимаете подобное и можете так спокойно кодить на этом кошмарно-сложном языке?
Ассемблер это самый что ни на есть простейший и легко понятный язык! Не надо было тратить много времени на поиски кода на всемирной помойке. Надо было найти учебник для новичков по ассемблеру.
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
06.11.2021, 11:38 16
на самом деле все учебники по асм из тех времен когда он еще активно применялся и еще был 32 бита и все такое
с тех пор он настолько разросся, что уже с полпинка и не соединишь знания с того учебника и современные реалии
и чтобы его использовать надо не только знать команды цпу, но и отлично представлять себе как хранятся данные в том же делфи. А это уже ну никак не новичковый уровень.
0
06.11.2021, 11:38
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
06.11.2021, 11:38
Помогаю со студенческими работами здесь

Без понятия, как создавать массив в Windows Forms
1. Пользователь вводит с клавиатуры натуральное число не большее 100, которое сохраняется в...

Нужно написать транскриптор, без понятия как даже начать
Разработать приложение, которое позволяет записывать иностранные слова русскими буквами.

примеры задания типо этого а то я без понятия как его делать
сформировать массив который начинается после второй двойки этого массива и заканчивается...

Что не так с тенями и как это лечить? ( без понятия с чем может быть связано)
Проблема на картинке. Вопрос и статус в шапке. Единственная догадка, возможно связано с...

Как научиться пользоваться windows без мыши ?
Как научиться пользоваться виндовс без мыши ? Какие сочетания клавиш чаше всего бывают необходимы...

Как пользоваться Sleep без зависаний приложения
Всем привет. Есть такой вопрос. Мне нужно, что бы Label в фоне на секунду поменял цвет. Код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru