|
|
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Подскажите, ПОЖАЛУЙСТА, что я не так делаю. Мне надо, используя ассемблер и встроенный ассемблер, написать подпрограмму поиска максимального значения в цепочке двойных слов со знаком и продемонстрировать ее использование в 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2007, 01:00 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Alenka:-) Мне надо, используя ассемблер и встроенный ассемблер, написать подпрограмму поиска максимального значения в цепочке двойных слов со знаком и продемонстрировать ее использование в Delphi. Offtop: Вам девушка, имхо конечно, или в форум работа, или знаете-ли - есть обычно такие люди бомжеватого типа на лавочках перед корпусом местного ВУЗа, так вот они за поллитра (и выше) - вам чего хочешь слабают, вплоть до диплома. P.S. А с будущей профессией Вы не промахнулись? Кстати? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2007, 01:54 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Если не знаете, как ответить на мой вопрос, то лучше бы вообще не писали. А оскорблять не зачем (это лишь вас унизило в моих, по крайней мере, глазах), а не ошибается тот, кто ничего не делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2007, 14:16 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Alenka:-)Если не знаете, как ответить на мой вопрос, то лучше бы вообще не писали. А оскорблять не зачем (это лишь вас унизило в моих, по крайней мере, глазах), а не ошибается тот, кто ничего не делает. Аленушка, лапочка, не слушай грубиянов, а ставь Visual Basic 2005 Express. Там это делается за 5 строчек с помощью встроенных классов. А вот преподу скажи, что он быдлостарпер, который содомирует мозги бедных студенток (приравнять к изнасилованию!!!) быдлосвязками Pascal + Assembler (причем асма больше). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2008, 21:53 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Alenka:-)а не ошибается тот, кто ничего не делает. Алена, то что ты сейчас пытаешься сделать - ошибка. Генетическая. Российская. Всей образовательной системы страны. Таких преподов надо увольнять сразу же. Если выжигать эту дурь из мозгов каленым железом не получается. Правильно им копейки платят. Они это заслужили. Но зачем так издеваться над молодыми неокрепшими умами студентов и студенток? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.01.2008, 21:57 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
GotDotNet Но зачем так издеваться над молодыми неокрепшими умами студентов и студенток? Если эти неокрепшие умы не пройдут через огонь и воду (читай Ассемблер), то программисты из них получатся никакие. Alenka:-) А вы научитесь оформлять код правильно. Ничего невозможно рассмотреть в том что вы выложили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2008, 16:49 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
GatmanЕсли эти неокрепшие умы не пройдут через огонь и воду (читай Ассемблер), то программисты из них получатся никакие. «Поздравляю, гражданин соврамши». Может хватит нести подобный бред? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2008, 17:05 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Gatman Если эти неокрепшие умы не пройдут через огонь и воду (читай Ассемблер), то программисты из них получатся никакие. Если какой-нибудь быдлопрепод пудет пичкать студентов быдлосвязкой Паскакалл + Ассембер (быдло в квадрате) - то программистами они точно не станут. Они будут ненавидеть это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.01.2008, 20:03 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Ладно, ребята, пока вы там о чем-то спорили, я разобралась в чем дело, теперь все работает! Как же Вы мне помогли!!!8-) Из Вас получатся самые ПРОГРАММИСТЫЕ ПРОГРАММИСТЫ!!! Удачи Вам!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 01:38 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
GotDotNetЕсли какой-нибудь быдлопрепод пудет пичкать студентов быдлосвязкой Паскакалл + Ассембер (быдло в квадрате) - то программистами они точно не станут. Они будут ненавидеть это. Ну не знаю, именно ассемблером мне привили любовь к программированию, а так бы кто знает, может админом стал бы. Да и теперь, когда пишу только на C#, мои знания по ассемблеру мне помагают понять что на самом деле происходит в коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2008, 10:35 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Gatman GotDotNetЕсли какой-нибудь быдлопрепод пудет пичкать студентов быдлосвязкой Паскакалл + Ассембер (быдло в квадрате) - то программистами они точно не станут. Они будут ненавидеть это. Ну не знаю, именно ассемблером мне привили любовь к программированию, а так бы кто знает, может админом стал бы. Да и теперь, когда пишу только на C#, мои знания по ассемблеру мне помагают понять что на самом деле происходит в коде. Интересно, каким образом? Тебе, что, давали основы JIT-компиляции? Ты изучал ус-во JIT-тера .Net, чтобы понять "что на самом деле происходит в коде". Вообще-то лучше JIT-тера никто не знает это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2008, 16:11 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
GotDotNetВообще-то лучше JIT-тера никто не знает это. Вкусный чупачупс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2008, 16:29 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
ренегат GotDotNetВообще-то лучше JIT-тера никто не знает это. Вкусный чупачупс? Меня всегда прикалывали оправдания ассемблеристов: чтобы лучше знать, как работает программа, чтобы писать оптимальные программы, ... чтобы чувствовать себя богом Ага. Под Дос 16-битный с реальным режимом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2008, 16:34 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
GotDotNet Интересно, каким образом? Тебе, что, давали основы JIT-компиляции? Ты изучал ус-во JIT-тера .Net, чтобы понять "что на самом деле происходит в коде". Знаешь, когда я учился, у нас C# не преподавали, что не помешало мне вырости до PM за 1.5 года работы на C#. И устройство JITTERA мне знать не нужно, т.к. JITTER всего лишь транслирует MSIL код в машинный код (читай ассемблер). Т.о. я знаю как работает программа и где у неё могут возникнуть узкие места. GotDotNet Вообще-то лучше JIT-тера никто не знает это. Раньше всегда считалось, что программист должнет знать, что делает его программа. А теперь почему-то считается, что знать должны компиляторы, а программисты должны просто излогать свою мысль компилятору. Спрашивается, зачем тогда программисты? Почему бы пользователся не писать программы на каком-нибудь простом для понимания языке. P.S. У меня сложилось впечатление, что тебя отчислили с 1-го курса универа за неспособность программировать на ассемблере, и теперь ты его ненавидишь. Помни, проблема не в языке программирования, проблема в отсутствии мозгов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2008, 15:27 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
GotDotNetУнивер закончил с отличием. Ассемблера, слава всем Святым, у нас не было, хотя я его знаю.Его знание абсолютно ни на что не влияет. Так же как и знание об ус-ве молекул и атомов, ус-ве транзисторов, внутренней схемы процессора и т.д. и т.п.Оно и видно, что закончил ты с "отличием". МнениЙо своЙо на всЬо имею, да вот только ничего, кроме как аппелировать к зачОтке и угадывать чаяния начальства (преподов) - и не научилсо. Да и глупости постаешь. Впрочем, оно вроде ничего. Или профессию сменишь, или попустит, рано или поздно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2008, 16:58 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
..Администраторы, или модераторы создайте пожалуста роздел в "Програмирование" - "Assembler" если конешно можна.. Хочется видеть и такой подфорум.. =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2008, 15:47 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Алена, правила хорошего тона программирования ассемблерных процедур требуют сохранения регистров в стеке перед их использованием. Это главная ошибка в вашей программе. То есть в начале функции должны быть команды push, а в конце pop. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 14:19 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
с большим бубномАлена, правила хорошего тона программирования ассемблерных процедур требуют сохранения регистров в стеке перед их использованием. Это главная ошибка в вашей программе. То есть в начале функции должны быть команды push, а в конце pop. Не было никогда правил хорошего тона программирования на асме. Потому что на асме пишут умные дядьки, которые понимают даже код, сделанный компилятором языков ЯВУ. И нужно сохранять регистры или нет - зависит от степени их использования. Тем более что на асме "принято" передавать параметры через регистры. А если не хочется задумываться об оптимальности кода и тупо сохранять все регистры, то можно юзать команды pusha и popa ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 14:49 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Gatman с большим бубномАлена, правила хорошего тона программирования ассемблерных процедур требуют сохранения регистров в стеке перед их использованием. Это главная ошибка в вашей программе. То есть в начале функции должны быть команды push, а в конце pop. Не было никогда правил хорошего тона программирования на асме. Потому что на асме пишут умные дядьки, которые понимают даже код, сделанный компилятором языков ЯВУ. И нужно сохранять регистры или нет - зависит от степени их использования. Тем более что на асме "принято" передавать параметры через регистры. А если не хочется задумываться об оптимальности кода и тупо сохранять все регистры, то можно юзать команды pusha и popa Я вообще-то говорил об ассемблерных процедурах в делфи =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:05 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
а, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2008, 15:33 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Gatmanа, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры Лучше прочитать соответсвующую документацию к конкретной системе программирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 08:19 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
!призрак ренегата Gatmanа, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры А потом из таких как ты - и получаются GotDonNet-ы, которые ненавидят паскаль и ассемблер только потому, что в бытность им, таким замечательным (вот GDN - ещё и с хроническим ЧСВ) - влепили трояки в зачётки (и вполне заслуженно, потому что у GDN нет той части мозга, которая отвечает за указатели и регистры). Короче, не становись таким недоученным недотёпой как GotDotNet - учи буквари. Чё-то не понял, при чём тут я? И с чего это ты сделал такие выводы? К твоему сведению по Асму у меня всегда было железно 5. Более того, я в своё время писал программу, которая могла запустившись из 3-го кольца привелегий переползти на 0-е кольцо и стабильно там работать (это под винду) без использования драйверов - такой себе минифайрвол. Кстати API из NTDLL (если знаешь зачем она) почти не использовал. Весь код по созданию дескрипторов и т.д. писал чисто на Асме. Соответственно с архитектуром МП у меня тоже всё ок, включая работу в защищённом режиме. Так что твои выводы мне абсолютно не понятны. Или ты так, просто, поп..ть? По поводу сохранения регистров - когда я давным давно писал на паскале, то регистры нужно было сохранять. На С++ как-то тоже. Не знаю, может какие-то компиляторы и сохраняют их автоматом, может тот же Делфи, но я бы никогда не стал полностью полагаться на компилятор, ОСОБЕННО, когда пишешь на асме в другой среде. Попробуй как-нибудь написать пусть простой драйвер, и посмотри, как часто у тебя будет BSOD вылетать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 11:16 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
Gatman !призрак ренегата Gatmanа, ну тогда извиняюсь, конечно в ассемблерных вставках обязательно нужно сохранять\восстанавливать все регистры А потом из таких как ты - и получаются GotDonNet-ы, которые ненавидят паскаль и ассемблер только потому, что в бытность им, таким замечательным (вот GDN - ещё и с хроническим ЧСВ) - влепили трояки в зачётки (и вполне заслуженно, потому что у GDN нет той части мозга, которая отвечает за указатели и регистры). Короче, не становись таким недоученным недотёпой как GotDotNet - учи буквари. Чё-то не понял, при чём тут я? И с чего это ты сделал такие выводы? К твоему сведению по Асму у меня всегда было железно 5. Более того, я в своё время писал программу, которая могла запустившись из 3-го кольца привелегий переползти на 0-е кольцо и стабильно там работать (это под винду) без использования драйверов - такой себе минифайрвол. Кстати API из NTDLL (если знаешь зачем она) почти не использовал. Весь код по созданию дескрипторов и т.д. писал чисто на Асме. А нафега? Gatman Соответственно с архитектуром МП у меня тоже всё ок, включая работу в защищённом режиме. Так что твои выводы мне абсолютно не понятны. Или ты так, просто, поп..ть? Не.. решить проблему термоядерного синтеза. Или первую проблему России. GatmanПо поводу сохранения регистров - когда я давным давно писал на паскале, то регистры нужно было сохранять. Зачем? Ну посмотри, чтоле, на пример кода на asm-е в VCL. Потом приходи и говори. GatmanНа С++ как-то тоже. Не знаю, может какие-то компиляторы и сохраняют их автоматом, может тот же Делфи, но я бы никогда не стал полностью полагаться на компилятор, ОСОБЕННО, когда пишешь на асме в другой среде. Попробуй как-нибудь написать пусть простой драйвер, и посмотри, как часто у тебя будет BSOD вылетать Лалалала, уронила Таня мячик.... P.S. Первый раз слушу, что драйвера пишут на паскале или на C++. Фффпрочем, если с позиции уронила Таня мячик... то нормуль, а чё? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 11:22 |
|
||
|
Подпрограмма на ассемблере в Delphi
|
|||
|---|---|---|---|
|
#18+
!проснулся P.S. Первый раз слушу, что драйвера пишут на паскале или на C++. Фффпрочем, если с позиции уронила Таня мячик... то нормуль, а чё? На паскале драйвера не пишут, а вот на С++ пишут (тока у некоторых на это ума не хватает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2008, 11:56 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35044715&tid=1345484]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 520ms |

| 0 / 0 |
