|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 10, 2004 11:54:33 EvilsInterrupt Действительно, передача параметров в потоке кода является интересным приемом. Насколько я помню, этот способ использовался еще в ZX-Spectrum 48K, для передачи параметров в функцию калькулятора. С помощью этого метода, функция может принимать заранее неизвестное количество параметров. |
|
|
Дата: Май 10, 2004 12:14:57 · Поправил: Oleg_SK EvilsInterrupt А код слабо слабать? :))) OK. Нечего сложного не вижу. Пример: ; Задача функции: если значение Param_1 не равно нулю, то функция возвращает сумму параметров Param_2 и Param_3. Если значение Param_1 равно нулю, то функция возвращает значение параметра Param_2. Причем значение параметра Param_3 передается в функцию методом отложенного вычисления. MyProc proc Param_A:DWORD, Param_B:DWORD, Param_3:DWORD .if Param_1!=0 ; В этой ветке нам понадобится значение параметра, ; которое было передано в функцию методом ; отложенного вычисления. ; Поэтому нужно узнать значение этого параметра. mov eax, Param_3 call eax ; Здесь вызывается функция производящая длительное вычисление значения параметра Param_3. Вычисленное значение она возвращает в регистре EAX. mov ebx, Param_2 add eax, ebx .else ; В этой ветке нам не понадобится значение параметра, ; которое было передано в функцию методом отложенного вычисления. ;Поэтому мы и не будем терять время на вычисление его значения. mov eax, Param_2 .endif ret MyProc endp Как видишь, здесь нет нечего сложного... |
|
|
Дата: Май 10, 2004 12:40:08 EvilsInterrupt А лучше открой и посмотри много интересного увидишь, взять хотя бы передачу в потоке кода! Эта книжка есть не у всех =) |
|
|
Дата: Май 10, 2004 12:52:03 · Поправил: Oleg_SK Anonimka Эта книжка есть в рунете, в электронной форме :)) |
|
|
Дата: Май 10, 2004 13:00:42 · Поправил: Oleg_SK Anonimka Я тоже согласен с Black_mirror. Точно не знаю, но может быть такой подход где-то организован для связи ассемблерных вставок с ЯВУ. Можно пойти дальше и предположить, что вместо имени можно передавать индекс в некой таблице с адресами функций. IMHO, такой вариант как-то естественней для ассемблера. P.S.: Ты мое письмо получил? Может быть, даже ответил мне? Если да, ответь, пожалуйста, еще раз. Произошел сбой моего почтового ящика, и я потерял много писем... |
|
|
Дата: Май 10, 2004 13:09:21 Oleg_SK Я тоже согласен с Black_mirror. Точно не знаю, но может быть такой подход где-то организован для связи ассемблерных вставок с ЯВУ. Можно пойти дальше и предположить, что вместо имени передается индекс в некой таблице с адресами функций. Какой смысл передавать параметр индексом в таблице, а не адресом самого элемента? Не, не так: какой в этом концептуальный смысл? (Что это может быть немножко удобней где-то конкретно, мне и так ясно). P.S. На письмо давно уже ответил. Перепошлю ответ вечером. |
|
|
Дата: Май 10, 2004 13:29:50 Anonimka Что это может быть немножко удобней где-то конкретно, мне и так ясно Именно так. А особого концептуального смысла я пока не вижу. P.S.: Ну, смысл может заключаться, к примеру, в экономии памяти. К примеру, есть таблица адресов на 64 элемента. Передавая в функцию индекс элемента, мы затрачиваем только один байт, а если передаем адрес - 4 байта. Эффект от этого способа появится только в том случае, если функций, которым нужно передавать эти адреса, довольно много. Но вообще-то я над этим серьезно не думал, а пример этот сейчас высосал из пальца... |
|
|
Дата: Май 10, 2004 13:35:08 Oleg_SK К примеру, есть таблица адресов на 64 элемента. Передавая в функцию индекс элемента, мы затрачиваем только один байт, а если передаем адрес - 4 байта. Смещение в таблице в этом случае тоже уложится в байт =) |
|
|
Дата: Май 10, 2004 13:47:10 · Поправил: Oleg_SK Anonimka Точно, индекс и смещение = 1 байт, а адрес = 4 байта :) IMHO, индекс - удобнее ;) |
|
|
Дата: Май 10, 2004 20:38:54 всем спасибо буду еще думать! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057 |