powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подпрограмма на ассемблере в Delphi
24 сообщений из 24, страница 1 из 1
Подпрограмма на ассемблере в Delphi
    #35038941
Alenka:-)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Подскажите, ПОЖАЛУЙСТА, что я не так делаю.
Мне надо, используя ассемблер и встроенный ассемблер, написать подпрограмму поиска максимального значения в цепочке двойных слов со знаком и продемонстрировать ее использование в Delphi.
Ответа у меня должно быть 3, но правильный ответ дают только
write('Arr (PAS) ==> ');
и
writeln('Arr (ASM) ==> ',j);
Помогите, пожалуйста, что не так написано в функции MaxPASASM:-(
1 модуль, который подключается к Delphi
.386
.MODEL FLAT,PASCAL
.CODE
PUBLIC MaxArrASM
MaxArrASM proc A:DWORD, N:DWORD
push ESI ; Сохранить регистр ESI
mov ESI,[EBP+0Ch] ; В esi адрес массива
mov ECX,[EBP+8] ; В ECX количество элементов
jmp short NewMaxH ; Переходим к следующему элементу

LoopMax: ; Заходим в цикл
Add ESI,4 ; esi:=esi+4
cmp EDX,[ESI+4] ; Проверяем старшую часть числа
jg noMax ; Если мах больше переход(проверка со знаком)
je okCheckLow ; Если равны проверяем
;запоминаем новое максимальное значение
newMaxH:
mov EDX,[esi+4] ; Переходим к следующему элементу
newMaxL:
mov EAX,[ESI]
jmp short noMax ; Безусловная передача на метку noMax
;проверяем младшую часть числа
okCheckLow:
cmp EAX,[ESI]

jb newMaxL ; Проверка беззнаковая(если CF=1, то переход на метку newMaxL)

noMax: loop loopMax ; Цикл

;на выходе EDX:EAX-искомое число
POP ESI
ret ; выход из п/п
MaxArrASM endp
End

2 модуль, написанный в Delphi
program Laba7Cons;

{$APPTYPE CONSOLE}

Type TArray=array [1..5] of longint;
var
Arr:TArray;
i:integer;
j:longint;

Function MaxArrPas(var Arr:TArray; N:integer):longint;
var
i:integer;
j:longint; //íàèáîëüøåå ÷èñëî â öåïî÷êå äâîéíûõ ñëîâ ñî çíàêîì
Begin
j:=1; //ïóñòü íîìåð max ýëåìåíòà = 1
For i:=1 to N do
Begin
If arr[j] < Arr then
j:=i;
end;
MaxArrPas:=Arr[j];
end;

Function MaxPASASM (var Arr:Tarray; N:integer):longint;assembler;
asm
mov ESI,Arr // çàãðóçêà àäðåñà ìàññèâà
mov ECX,N
jmp @NewMaxH
@LoopMax: // Çàõîäèì â öèêë
Add ESI,4 // esi:=esi+4
cmp EDX,[ESI+4] // Ïðîâåðÿåì ñòàðøóþ ÷àñòü ÷èñëà
jg @noMax // Åñëè ìàõ áîëüøå ïåðåõîä(ïðîâåðêà ñî çíàêîì)
je @okCheckLow // Åñëè ðàâíû ïðîâåðÿåì
//çàïîìèíàåì íîâîå ìàêñèìàëüíîå çíà÷åíèå
@newMaxH:
mov EDX,[esi+4] // Ïåðåõîäèì ê ñëåäóþùåìó ýëåìåíòó
@newMaxL:
mov EAX,[ESI]
jmp @noMax // Áåçóñëîâíàÿ ïåðåäà÷à íà ìåòêó noMax
//ïðîâåðÿåì ìëàäøóþ ÷àñòü ÷èñëà
@okCheckLow:
cmp EAX,[ESI]

jb @newMaxL // Ïðîâåðêà áåççíàêîâàÿ(åñëè CF=1, òî ïåðåõîä íà ìåòêó newMaxL)

@noMax: loop @loopMax // Öèêë
end;

{$L MaxArr2.obj}
//äåñü Pascal óêàçûâàåò íà òî, ÷òî ñåãìåíò êîäà ÿâëÿåòñÿ 32-ðàçðÿäíûì

Function MaxArrASM(var Arr:TArray; N:integer):longint;Pascal;external;
Begin
for i:=1 to 5 do
readln(Arr);
writeln;
j:=MaxArrPas(arr,5);
write('Arr (PAS) ==> ');
writeln(j);

write('Arr(PASASM)==> ',MaxPASASM(Arr,5));
writeln;

j:=arr[1];
for i:=2 to 5 do
if j<arrthen j:=arr;
writeln('Arr (ASM) ==> ',j);
readln;
end.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35038957
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alenka:-) Мне надо, используя ассемблер и встроенный ассемблер, написать подпрограмму поиска максимального значения в цепочке двойных слов со знаком и продемонстрировать ее использование в Delphi.
Offtop:
Вам девушка, имхо конечно, или в форум работа, или знаете-ли - есть обычно такие люди бомжеватого
типа на лавочках перед корпусом местного ВУЗа, так вот они за поллитра (и выше) - вам чего хочешь
слабают, вплоть до диплома.

P.S. А с будущей профессией Вы не промахнулись? Кстати?
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35040128
Alenka:-)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не знаете, как ответить на мой вопрос, то лучше бы вообще не писали.
А оскорблять не зачем (это лишь вас унизило в моих, по крайней мере, глазах), а не ошибается тот, кто ничего не делает.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35043731
GotDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alenka:-)Если не знаете, как ответить на мой вопрос, то лучше бы вообще не писали.
А оскорблять не зачем (это лишь вас унизило в моих, по крайней мере, глазах), а не ошибается тот, кто ничего не делает.

Аленушка, лапочка, не слушай грубиянов, а ставь Visual Basic 2005 Express.

Там это делается за 5 строчек с помощью встроенных классов.

А вот преподу скажи, что он быдлостарпер, который содомирует мозги бедных студенток (приравнять к изнасилованию!!!) быдлосвязками Pascal + Assembler (причем асма больше).
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35043733
GotDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alenka:-)а не ошибается тот, кто ничего не делает.

Алена, то что ты сейчас пытаешься сделать - ошибка. Генетическая. Российская. Всей образовательной системы страны. Таких преподов надо увольнять сразу же. Если выжигать эту дурь из мозгов каленым железом не получается. Правильно им копейки платят. Они это заслужили.

Но зачем так издеваться над молодыми неокрепшими умами студентов и студенток?
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35044265
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GotDotNet
Но зачем так издеваться над молодыми неокрепшими умами студентов и студенток?

Если эти неокрепшие умы не пройдут через огонь и воду (читай Ассемблер), то программисты из них получатся никакие.

Alenka:-) А вы научитесь оформлять код правильно. Ничего невозможно рассмотреть в том что вы выложили
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35044276
:(
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
:(
Гость
GatmanЕсли эти неокрепшие умы не пройдут через огонь и воду (читай Ассемблер), то программисты из них получатся никакие.
«Поздравляю, гражданин соврамши».
Может хватит нести подобный бред?
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35044468
GotDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gatman
Если эти неокрепшие умы не пройдут через огонь и воду (читай Ассемблер), то программисты из них получатся никакие.


Если какой-нибудь быдлопрепод пудет пичкать студентов быдлосвязкой Паскакалл + Ассембер (быдло в квадрате) - то программистами они точно не станут. Они будут ненавидеть это.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35044639
Alenka:-)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, ребята, пока вы там о чем-то спорили, я разобралась в чем дело, теперь все работает!
Как же Вы мне помогли!!!8-)
Из Вас получатся самые ПРОГРАММИСТЫЕ ПРОГРАММИСТЫ!!!
Удачи Вам!!!
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35044715
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GotDotNetЕсли какой-нибудь быдлопрепод пудет пичкать студентов быдлосвязкой Паскакалл + Ассембер (быдло в квадрате) - то программистами они точно не станут. Они будут ненавидеть это.

Ну не знаю, именно ассемблером мне привили любовь к программированию, а так бы кто знает, может админом стал бы. Да и теперь, когда пишу только на C#, мои знания по ассемблеру мне помагают понять что на самом деле происходит в коде.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35045826
GotDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gatman GotDotNetЕсли какой-нибудь быдлопрепод пудет пичкать студентов быдлосвязкой Паскакалл + Ассембер (быдло в квадрате) - то программистами они точно не станут. Они будут ненавидеть это.

Ну не знаю, именно ассемблером мне привили любовь к программированию, а так бы кто знает, может админом стал бы. Да и теперь, когда пишу только на C#, мои знания по ассемблеру мне помагают понять что на самом деле происходит в коде.

Интересно, каким образом? Тебе, что, давали основы JIT-компиляции? Ты изучал ус-во JIT-тера .Net, чтобы понять "что на самом деле происходит в коде".

Вообще-то лучше JIT-тера никто не знает это.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35045840
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GotDotNetВообще-то лучше JIT-тера никто не знает это.
Вкусный чупачупс?
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35045841
GotDotNet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ренегат GotDotNetВообще-то лучше JIT-тера никто не знает это.
Вкусный чупачупс?

Меня всегда прикалывали оправдания ассемблеристов:

чтобы лучше знать, как работает программа,
чтобы писать оптимальные программы,
...
чтобы чувствовать себя богом

Ага. Под Дос 16-битный с реальным режимом.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35046381
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GotDotNet
Интересно, каким образом? Тебе, что, давали основы JIT-компиляции? Ты изучал ус-во JIT-тера .Net, чтобы понять "что на самом деле происходит в коде".


Знаешь, когда я учился, у нас C# не преподавали, что не помешало мне вырости до PM за 1.5 года работы на C#. И устройство JITTERA мне знать не нужно, т.к. JITTER всего лишь транслирует MSIL код в машинный код (читай ассемблер). Т.о. я знаю как работает программа и где у неё могут возникнуть узкие места.
GotDotNet
Вообще-то лучше JIT-тера никто не знает это.
Раньше всегда считалось, что программист должнет знать, что делает его программа. А теперь почему-то считается, что знать должны компиляторы, а программисты должны просто излогать свою мысль компилятору. Спрашивается, зачем тогда программисты? Почему бы пользователся не писать программы на каком-нибудь простом для понимания языке.

P.S. У меня сложилось впечатление, что тебя отчислили с 1-го курса универа за неспособность программировать на ассемблере, и теперь ты его ненавидишь. Помни, проблема не в языке программирования, проблема в отсутствии мозгов
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35046458
ренегат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GotDotNetУнивер закончил с отличием. Ассемблера, слава всем Святым, у нас не было, хотя я его
знаю.Его знание абсолютно ни на что не влияет. Так же как и знание об ус-ве молекул и атомов, ус-ве
транзисторов, внутренней схемы процессора и т.д. и т.п.Оно и видно, что закончил ты с "отличием".
МнениЙо своЙо на всЬо имею, да вот только ничего, кроме как аппелировать к зачОтке и угадывать
чаяния начальства (преподов) - и не научилсо. Да и глупости постаешь.

Впрочем, оно вроде ничего. Или профессию сменишь, или попустит, рано или поздно.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35135549
Фотография Ukito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
..Администраторы, или модераторы создайте пожалуста роздел в "Програмирование" - "Assembler" если конешно можна.. Хочется видеть и такой подфорум.. =)
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35144510
Алена, правила хорошего тона программирования ассемблерных процедур требуют сохранения регистров в стеке перед их использованием. Это главная ошибка в вашей программе. То есть в начале функции должны быть команды push, а в конце pop.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35144654
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с большим бубномАлена, правила хорошего тона программирования ассемблерных процедур требуют сохранения регистров в стеке перед их использованием. Это главная ошибка в вашей программе. То есть в начале функции должны быть команды push, а в конце pop.

Не было никогда правил хорошего тона программирования на асме. Потому что на асме пишут умные дядьки, которые понимают даже код, сделанный компилятором языков ЯВУ. И нужно сохранять регистры или нет - зависит от степени их использования. Тем более что на асме "принято" передавать параметры через регистры.
А если не хочется задумываться об оптимальности кода и тупо сохранять все регистры, то можно юзать команды pusha и popa
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35144729
Gatman с большим бубномАлена, правила хорошего тона программирования ассемблерных процедур требуют сохранения регистров в стеке перед их использованием. Это главная ошибка в вашей программе. То есть в начале функции должны быть команды push, а в конце pop.

Не было никогда правил хорошего тона программирования на асме. Потому что на асме пишут умные дядьки, которые понимают даже код, сделанный компилятором языков ЯВУ. И нужно сохранять регистры или нет - зависит от степени их использования. Тем более что на асме "принято" передавать параметры через регистры.
А если не хочется задумываться об оптимальности кода и тупо сохранять все регистры, то можно юзать команды pusha и popa
Я вообще-то говорил об ассемблерных процедурах в делфи =)
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35144849
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35146165
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatmanа, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры

Лучше прочитать соответсвующую документацию к конкретной системе программирования.
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35146658
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
!призрак ренегата Gatmanа, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры

А потом из таких как ты - и получаются GotDonNet-ы, которые
ненавидят паскаль и ассемблер только потому, что в бытность им,
таким замечательным (вот GDN - ещё и с хроническим ЧСВ) -
влепили трояки в зачётки (и вполне заслуженно, потому что
у GDN нет той части мозга, которая отвечает за указатели и регистры).

Короче, не становись таким недоученным недотёпой как GotDotNet - учи буквари.

Чё-то не понял, при чём тут я? И с чего это ты сделал такие выводы?
К твоему сведению по Асму у меня всегда было железно 5.
Более того, я в своё время писал программу, которая могла запустившись из 3-го кольца привелегий переползти на 0-е кольцо и стабильно там работать (это под винду) без использования драйверов - такой себе минифайрвол. Кстати API из NTDLL (если знаешь зачем она) почти не использовал. Весь код по созданию дескрипторов и т.д. писал чисто на Асме.
Соответственно с архитектуром МП у меня тоже всё ок, включая работу в защищённом режиме.

Так что твои выводы мне абсолютно не понятны. Или ты так, просто, поп..ть?

По поводу сохранения регистров - когда я давным давно писал на паскале, то регистры нужно было сохранять. На С++ как-то тоже. Не знаю, может какие-то компиляторы и сохраняют их автоматом, может тот же Делфи, но я бы никогда не стал полностью полагаться на компилятор, ОСОБЕННО, когда пишешь на асме в другой среде. Попробуй как-нибудь написать пусть простой драйвер, и посмотри, как часто у тебя будет BSOD вылетать
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35146699
!проснулся
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gatman !призрак ренегата Gatmanа, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры

А потом из таких как ты - и получаются GotDonNet-ы, которые
ненавидят паскаль и ассемблер только потому, что в бытность им,
таким замечательным (вот GDN - ещё и с хроническим ЧСВ) -
влепили трояки в зачётки (и вполне заслуженно, потому что
у GDN нет той части мозга, которая отвечает за указатели и регистры).

Короче, не становись таким недоученным недотёпой как GotDotNet - учи буквари.

Чё-то не понял, при чём тут я? И с чего это ты сделал такие выводы?
К твоему сведению по Асму у меня всегда было железно 5.
Более того, я в своё время писал программу, которая могла запустившись из 3-го кольца привелегий переползти на 0-е кольцо и стабильно там работать (это под винду) без использования драйверов - такой себе минифайрвол. Кстати API из NTDLL (если знаешь зачем она) почти не использовал. Весь код по созданию дескрипторов и т.д. писал чисто на Асме.
А нафега?

Gatman
Соответственно с архитектуром МП у меня тоже всё ок, включая работу в защищённом режиме.

Так что твои выводы мне абсолютно не понятны. Или ты так, просто, поп..ть?
Не.. решить проблему термоядерного синтеза. Или первую проблему России.

GatmanПо поводу сохранения регистров - когда я давным давно писал на паскале, то регистры нужно было сохранять.
Зачем? Ну посмотри, чтоле, на пример кода на asm-е в VCL. Потом приходи и говори.

GatmanНа С++ как-то тоже. Не знаю, может какие-то компиляторы и сохраняют их автоматом, может тот же Делфи, но я бы никогда не стал полностью полагаться на компилятор, ОСОБЕННО, когда пишешь на асме в другой среде. Попробуй как-нибудь написать пусть простой драйвер, и посмотри, как часто у тебя будет BSOD вылетать
Лалалала, уронила Таня мячик....


P.S. Первый раз слушу, что драйвера пишут на паскале или на C++. Фффпрочем, если с позиции уронила Таня мячик... то нормуль, а чё?
...
Рейтинг: 0 / 0
Подпрограмма на ассемблере в Delphi
    #35146893
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
!проснулся
P.S. Первый раз слушу, что драйвера пишут на паскале или на C++. Фффпрочем, если с позиции уронила Таня мячик... то нормуль, а чё?

На паскале драйвера не пишут, а вот на С++ пишут (тока у некоторых на это ума не хватает)
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Подпрограмма на ассемблере в Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]