возврат из подпрограмм

Do you have a question? Post it now! No Registration Necessary

Threaded View
                Hi, All!

    вот назрел у новоиспечённого программера такой вопросец. сейчас много
приходится писать на ассемблере. в чём же дело... а вот!

    подпрограмма выглядит так:

    sub_name:
        <всякая всячина>
    quit_sub_name:
        ret

    я так понимаю, одна подпрограмма-- один ret. но частенько бывают случаи,
когда надо, например, сделать ветвление, да ещё и не одно. и выходить по многу
раз. вместо того, чтобы лепить
        rjmp    quit_sub_name
    грамотно было бы писать просто
        ret

    и чё делать. я пишу именно переходы. мне кажется-- писать кучу ret это как
goto юзать.

    как делаете вы?


                                        oleg

возврат из подпрограмм
Привет oleg!

04 Jun 06 13:51, oleg dozhdev писал All:

 od>     и чё делать. я пишу именно переходы. мне кажется-- писать кучу ret
 od> это как goto юзать.

    Забавное мнение, ибо goto - это как раз переход...

 od>     как делаете вы?

    Я использую и переходы, и ret'ы, и goto, и все прочие известные мне
средства используемых языков в зависимости от того, что более эффективно в
каждом конкретном случае. Религиозные предпочтения среди критериев выбора стоят
на последнем месте.

    В твоем конкретном примере, увидев ret, читающий текст программы сразу
понимает, что произойдет при выполнении. В случае же перехода ему надо будет
искать метку, на которую переход выполняется. О лишних тактах процессора,
которые будут затрачены на этот переход, даже и говорить нечего. :)

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Аэроволны: ментол и эвкалипт для носа, мед и лимон для рота!

возврат из подпрограмм
Sun Jun 04 2006 20:14, Alex Mogilnikov wrote to oleg dozhdev:



 AM> увидев ret, читающий текст программы
 AM> сразу понимает, что произойдет при выполнении.

 По иннерции выполнятся еще три команды подряд из пайплайна, которые
 стоят сразу после ret. Потом регистр ret загрузится в PC.
 Наглядно и очевидно, не правда ли? Счастливого писания на ассемблере :)

 VLV

 "Клянусь всем тем, во что когда-либо верили дураки"  (с) Вальтер Скотт


Re: возврат из подпрограмм

   Kirill, ты ещё здесь сидишь?


Вторник Июнь 06 2006 21:09, Kirill Frolov wrote to Igor Havtorin:

 >> Ага, а во сколько раз у тебя на асме строк больше будет? Полагаю,
 >> что на порядок, так что шансы по ошибкам уравнялись :-), а вот время
 >> набора текста на С, соответственно в 10 раз меньше, и за то время
 >> пока на асме набрали текст на С уже отладиться успели :-).
 KF>   Это чего такое писать надо, чтоб время набора критичным было?

 Хэлловорлд, вестимо ;)


                                                   Георгий


возврат из подпрограмм
Привет Alex!

Вcк Июн 04 2006 20:14, Alex Mogilnikov пишет oleg dozhdev:

 AM> критериев выбора стоят на последнем месте.

 AM>     В твоем конкретном примере, увидев ret, читающий текст программы
 AM> сразу понимает, что произойдет при выполнении. В случае же перехода
 AM> ему надо будет искать метку, на которую переход выполняется. О лишних
 AM> тактах процессора, которые будут затрачены на этот переход, даже и
 AM> говорить нечего. :)

RET как и CALL а так же и вход в пpеpывание могут выполняться заметно дольше
JMP... да ышшо часть pегистpов надо отпpавить в стек .. а пеpед RET веpнуть
назад ...


                            С наилучшими пожеланиями Nick .


возврат из подпрограмм
Привет Nick!

05 Jun 06 18:23, Nick Barvinchenko писал Alex Mogilnikov:

 AM>>  О лишних тактах процессора, которые будут затрачены
 AM>> на этот переход, даже и говорить нечего. :)

 NB> RET как и CALL а так же и вход в пpеpывание могут выполняться заметно
 NB> дольше JMP...

    Посмотри исходное письмо Олега на предмет того, какая команда выполнится
после перехода.

 NB>  да ышшо часть pегистpов надо отпpавить в стек .. а пеpед
 NB> RET веpнуть назад ...

    Во-первых, в конкретном примере, о котором я вел речь, никакие регистры в
стек не отправлялись. А во-вторых, по-твоему, если вместо ret поставить jmp на
ret, то ранее отправленные в стек регистры уже можно не доставать? :)

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... G8: иногда лучше дирижировать, чем говорить.

возврат из подпрограмм
                              Пpивет, Nick!

 ■ Дело было 06 Jun 06, Alex Mogilnikov писал Nick Barvinchenko

 NB> RET как и CALL а так же и вход в пpеpывание могут выполняться заметно
 NB> дольше JMP...

AM>     Посмотри исходное письмо Олега на предмет того, какая команда
AM> выполнится после перехода.

 NB>  да ышшо часть pегистpов надо отпpавить в стек .. а пеpед
 NB> RET веpнуть назад ...

AM>     Во-первых, в конкретном примере, о котором я вел речь, никакие
AM> регистры в стек не отправлялись. А во-вторых, по-твоему, если вместо ret
AM> поставить jmp на ret, то ранее отправленные в стек регистры уже можно не
AM> доставать? :)
это, я так понимаю, был утрированный пример.
Hа самом деле это выглядит примерно так (из моих работ 3летней давности)

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

Int_Serial:     clr     EA                  ; Interrups disable
                push    ACC                 ; store ACC
                mov     A, R0               ;
                push    ACC                 ; and store R0
                mov     R0, RxTx_ptr        ; R0 <- RxTx_ptr
читаем буфер
проверяем всякие разные условия
если, например, по какому нибудь из условий надо выйти...                
                ljmp    _uart_end
....   здесь ещё какие либо действия/проверки выполняются
.....  и также  ljmp _uart_end может стоять
......

_uart_end:
                mov     RxTx_ptr, R0 ; RxTx_ptr <- R0
                pop     ACC          ;
                mov     R0, A        ; restore R0
                pop     ACC          ; restore ACC
                setb    EA           ;
                reti


                                               Всего наилучшего. Пока.

возврат из подпрограмм
Привет Stas!

06 Jun 06 09:45, Stas Shilo писал Nick Barvinchenko:

 SS> Hа самом деле это выглядит примерно так (из моих работ 3летней
 SS> давности) из обработчика прерывания по последовательному порту

    [...]

    Здесь есть свои плюсы и минусы у обоих вариантов. Выбор между размером и
скоростью.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Чем ветеринары кормят своих собак? Белый фосфор. Ваша собака светится!

Re: возврат из подпрограмм

X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, oleg dozhdev!
You wrote in conference fido7.ru.embedded to All on Sun, 04 Jun 2006 12:51:02
+0400:


 od>     вот назрел у новоиспечённого программера такой вопросец.
 od> сейчас много приходится писать на ассемблере. в чём же дело...
 od> а вот!

А зачем на ассемблере писать, пиши на С и пусть у компилятора голова болит. В С
несколько return из функции - совершенно нормальное дело.

dima
http://dorlov.no-ip.com



Re: возврат из подпрограмм
Привет Vladimir!

04 Jun 06 18:53, Vladimir Vassilevsky писал Alex Mogilnikov:

 AM>> увидев ret, читающий текст программы
 AM>> сразу понимает, что произойдет при выполнении.

 VV>  По иннерции выполнятся еще три команды подряд из пайплайна, которые
 VV>  стоят сразу после ret. Потом регистр ret загрузится в PC.

    Выдыхай!

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Программисты знают, что на каждую улицу Пушкина должна быть улица Попкина.

Re: возврат из подпрограмм
,-'     Hello, Dmitry Orlov! How is your connection today?


 od>>     вот назрел у новоиспечённого программера такой вопросец.
 od>> сейчас много приходится писать на ассемблере. в чём же дело...
 od>> а вот!
 DO> А зачем на ассемблере писать, пиши на С и пусть у компилятора голова
 DO> болит. В С несколько return из функции - совершенно нормальное дело.

Микроконтроллеры тоже на си предлагаешь программить?

`-._                                         ---  Alexander Kocharin  ---

возврат из подпрограмм
Mon Jun 05 2006 00:54, Alex Kocharin wrote to Dmitry Orlov:

 od>>>     вот назрел у новоиспечённого программера такой вопросец.
 od>>> сейчас много приходится писать на ассемблере. в чём же дело...
 od>>> а вот!
 DO>> А зачем на ассемблере писать, пиши на С и пусть у компилятора голова
 DO>> болит. В С несколько return из функции - совершенно нормальное дело.

 AK> Микроконтроллеры тоже на си предлагаешь программить?

Логичней на С++, но в крайнем случае можно и на С.
Если важен результат, а не процесс. :-)

"Всякий градоправитель да будет добросердечен"


возврат из подпрограмм
,-'     Hello, Yuriy K! How is your connection today?


 AK>> Микроконтроллеры тоже на си предлагаешь программить?
 YK> Логичней на С++, но в крайнем случае можно и на С.

Микроконтроллеры? Насколько я помню, это такие штуки с частотой меньше
мегагерца... На них тормозить сишный код не будет? Насколько я помню, они на
асме программируются, иногда вообще в машинных кодах... :-)

И есть ли сишные компиляторы под них? Что-то не видел...

 YK> Если важен результат, а не процесс. :-)

Если бы мне был важен процесс, я бы писал сейчас в фипсе, запущеной через wine
под Linux 0.01... ;-)

`-._                                         ---  Alexander Kocharin  ---

Re: возврат из подпрограмм

X-Virus-Scanned: amavisd-new at bezeqint.net

Hello, Alex Kocharin!
You wrote in conference fido7.ru.embedded to Yuriy K on Mon, 05 Jun 2006
13:18:50
+0400:


 AK>>> Микроконтроллеры тоже на си предлагаешь программить?
 YK>> Логичней на С++, но в крайнем случае можно и на С.

 AK> Микроконтроллеры?

Именно.

 AK> Насколько я помню, это такие штуки с частотой меньше мегагерца... На

Можно и меньше, но обычно больше и существенно.

AK> них тормозить сишный код не будет?

Код выполняется в них машинный, а не сишный.

AK>  Насколько я помню, они на асме  программируются, иногда вообще в
машинных кодах... :-)

Программируются они программатором или бутлоадером.

 AK> И есть ли сишные компиляторы под них? Что-то не видел...

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

 YK>> Если важен результат, а не процесс. :-)

 AK> Если бы мне был важен процесс, я бы писал сейчас в фипсе, запущеной
 AK> через wine под Linux 0.01... ;-)

Кому какое дело в чем ты сейчас пишешь?

dima
http://www.dorlov.no-ip.com
http://dimorlus.dynalias.com




возврат из подпрограмм
Привет!

Mon Jun 05 2006 14:18, Alex Kocharin wrote to Yuriy K:

 AK>>> Микроконтроллеры тоже на си предлагаешь программить?
 YK>> Логичней на С++, но в крайнем случае можно и на С.
 AK> Микроконтроллеры?
 AK> асколько я помню, это такие штуки с частотой меньше мегагерца...
 AK> а них тормозить сишный код не будет?

Для микроконтроллеров семейства AVR я использую превосходный компилятор
gcc (например, в пакете WinAVR). Он порождает вполне качественный машинный
код. Вручную можно, конечно, съэкономить чуток, но игра не стоит свеч, т.к.
выигрыш получается где-то в районе 10-20% кода. Право не стоит жертвовать
качеством и временем разработки ради такой малости :-)

 AK> асколько я помню, они на асме программируются, иногда вообще в машинных
 AK> кодах... :-)

Hу, если точно, то на Ассемблере (это же и есть язык машинных команд, только
облаченный в понятную мнемоническую форму). Однако, эти времена (когда был
_обязательно_ нужен Ассемблер) давно прошли. В нечастых особо критических
случаях можно написать маленький кусочек на Ассемблере, а все остальное на
C/C++ (это чаще всего относится к обработке прерываний).

 AK> И есть ли сишные компиляторы под них? Что-то не видел...

Упомянутый мною gcc очень хорош. Кроме того имеется выбор и коммерческих
компиляторов. В общем, ЯВУ - рулез :-)

Юргис


Re: возврат из подпрограмм
Hello, Alex!
You wrote to Yuriy K on Mon, 05 Jun 2006 13:18:50 +0400:

 AK> ,-'     Hello, Yuriy K! How is your connection today?


 AK>>> Микроконтроллеры тоже на си предлагаешь программить?
 YK>> Логичней на С++, но в крайнем случае можно и на С.

 AK> Микроконтроллеры? Насколько я помню, это такие штуки с частотой
 AK> меньше мегагерца...


С чего вдруг?  Многие  микроконтроллеры работают на еденицах и десятках
мегагерц.

 AK> На них тормозить сишный код не будет? Насколько я помню, они на асме
 AK> программируются, иногда вообще в машинных кодах... :-)

Машинные коды - работают внутри процессора. на чем они написаны - процессору
голубоко наплевать!

 AK> И есть ли сишные компиляторы под них? Что-то не видел...

Разумеется есть.


With best regards, Alexandr Torres.

[ Бомжей любить - не эхи модерить! ]

2:461/28, E-mail: snipped-for-privacy@yahoo.com
http://altor.sytes.net



возвpат из подпpогpамм
  Пpивет, Alex.

  Вот что Alex Kocharin wrote to Yuriy K:

 AK>>> Микpоконтpоллеpы тоже на си пpедлагаешь пpогpаммить?
 YK>> Логичней на С++, но в кpайнем слyчае можно и на С.

 AK> Микpоконтpоллеpы? Hасколько я помню, это такие штyки с частотой меньше
 AK> мегагеpца...

  Меньше сотни мегагеpц. Я нынче, напpимеp, pаботаю
с ATMEGA8, y котоpой тактовая до 16 МГц.

 AK> Hа них тоpмозить сишный код не бyдет? Hасколько я помню,
 AK> они на асме пpогpаммиpyются, иногда вообще в машинных кодах... :-)

  В мышиных кодах я пpогpаммиpовал только 8080 в 1982-м
годy. Hа ассемблеpе - до сих поp для MCS-51. Для тех же
AVR-ов (к коим относится и yпомянyтая атмега) - только
на Си. Ибо то yбожество, что называется мнемокодами
команд, дyша не пpиемлет.

 AK> И есть ли сишные компилятоpы под них? Что-то не видел...

  К пpимеpy, IAR - для AVR, Keil - для 51. Для PICов -
своё есть, но не подскажy, ибо с ними не pаботаю.

  Michael G. Belousoff
mickbell(dog)r66(dot)ru
http://web.ur.ru/mickbell

... ==== Пpоблемy надо pешать до того, как она появится. ====

возвpат из подпpогpамм
Привет Michael!

05 Jun 06 22:32, Michael Belousoff писал Alex Kocharin:

 AK>> Микpоконтpоллеpы? Hасколько я помню, это такие штyки с частотой
 AK>> меньше мегагеpца...

 MB>   Меньше сотни мегагеpц. Я нынче, напpимеp, pаботаю
 MB> с ATMEGA8, y котоpой тактовая до 16 МГц.

    Есть и больше. Есть до 250 МГц, и, наверное, еще больше. Hе интересовался
за ненадобностью. Я реально использую максимум на 50 МГц.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Дареному письму в клуджи не смотрят.

возвpат из подпpогpамм
Hi Michael !

 Совсем недавно 05 Jun 06 22:32, Michael Belousoff писал к  Alex Kocharin:

 AK>> Микpоконтpоллеpы? Hасколько я помню, это такие штyки с частотой
 AK>> меньше мегагеpца...

 MB>   Меньше сотни мегагеpц. Я нынче, напpимеp, pаботаю
 MB> с ATMEGA8, y котоpой тактовая до 16 МГц.
Ты тоже отстал от жизни. Теперь - меньше гигагерца (но пиковая скорость больше
гигасемпла :)

         WBRgrds
                   Ruslan


возвpат из подпpогpамм
Hello Michael Belousoff!

 AK>> Hа них тоpмозить сишный код не бyдет? Hасколько я помню,
 AK>> они на асме пpогpаммиpyются, иногда вообще в машинных кодах... :-)

 MB>   В мышиных кодах я пpогpаммиpовал только 8080 в 1982-м
 MB> годy. Hа ассемблеpе - до сих поp для MCS-51. Для тех же
 MB> AVR-ов (к коим относится и yпомянyтая атмега) - только
 MB> на Си. Ибо то yбожество, что называется мнемокодами
 MB> команд, дyша не пpиемлет.

Вот только без закатывания глаз к потолку и театрального же
заламывания рук, pls ! Кому надо - берёт нечто вроде NASM'а
и делает удовлетворяющие его слух и нюх ;-) макро ...


Site Timeline