Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 01:05

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: быстрый CASE
СообщениеДобавлено: Ср июл 20, 2011 15:16 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Какие форт-системы умеют оптимизировать CASE (в табличный переход или дерево сравнений)?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Ср июл 20, 2011 16:06 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
как всегда - можно написать самому.
если в шитый код компилируется адрес перехода, можно эти адреса расположить в таблицу, при этом можно создать "гарантированный CASE" - т.е. случай, когда число - индекс таблицы никогда не превысит некоторого значения, а все прочие составляют не слишком большой диапазон - тогда можно сэкономить на DEFAULT

Кстати, гарантированный CASE - одна из "редуцирующих" идей, которые я обдумывал, но не представил


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт июл 21, 2011 23:14 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
В моей системе с прямым шитым кодом я делаю так. Создаю понятие переключатель :

: SWITCH CREATE ] DOES> SWAP CELLS + @EXECUTE ;

, где @EXECUTE эквивалентно @ EXECUTE

Пусть возможные значения параметра CASE заведомо не более 7-и, причем обработать
особым образом надо варианты 0 1 3 4 7, варианты 2 6 обработать по умолчанию, а
вариант 5 никак не обработать. Тогда создаем слова для отработки конкретных
значений параметра и соответствующий экземпляр переключателя :

: CASE_0 ... ;
: CASE_1 ... ;
: CASE_3 ... ;
: CASE_4 ... ;
: CASE_7 ... ;
: DEFAULT ... ;

SWITCH CASER CASE_0 CASE_1 DEFAULT CASE_3 CASE_4 NOOP DEFAULT CASE_7 [

и когда надо вызываем экземпляр переключателя с параметром на стеке. Например

4 CASER


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Ср авг 03, 2011 15:09 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
dynamic-wind писал(а):
Какие форт-системы умеют оптимизировать CASE (в табличный переход или дерево сравнений)?

Никакие. Но можно сделать.
Только непонятно из вашего вопроса, а что сделать-то.
Табличный переход по смещению на исполняемый токен, так это просто и особого выигрыша не даст.
Причем тут дерево сравнений. Имеется ввиду, что с наличием такого на нужную ветку попасть быстрее? Это как это?
В любом случае текущее значение поступающее на вход CASE надо сравнивать с набором имеющихся значений.
Единственно, что можно это правильно походить по массиву где эти значения предварительно отсортированы и все.
Конечно, в частном случае, если эти значения в узком диапазоне, то все упрощается.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 09:22 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
chess писал(а):
Только непонятно из вашего вопроса, а что сделать-то.

А, понятно.
Тут только надо уточнить какой CASE нужен. CASE ведь может быть со статическим диапазоном значений или
с динамическим. Если со статическим, то статический диапазон изначально можно дать отсортированным или отсортировать его
на этапе компиляции, а если с динамическим, то придется отсортировывать в рантайме.
При этом критерий оптимизации будет разным.
Если для статического диапазона порог(число значений в поиске) может быть небольшим, то для динамического
диапазона этот порог будет гораздо больше. Если число значений в поиске ниже порога, то ускорения конструкции CASE не
получить. По прикидкам для статики порог где-то начинается от 32, а для динамики аж от 128. Это надо для каких-то серьезных
задач. На практике мне это было не надо. Как правило задача разбивается на куски, где в каждом небольшой CASE, в котором число значений меньше порога. И все-таки проще положить значения на стек и работать с ними как со значения в массиве(стек же это массив), а не формировать дерево сравнений. На стеке для динамики сначала отсортировать(для статики и сортировать не нужно если заранее это сделать ручками в тексте), а затем провести дихотомический поиск с выдачей смещения.
для получения доступа к адресу нужного токена из таблицы токенов процедур.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 11:11 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
chess писал(а):
По прикидкам для статики порог где-то начинается от 32, а для динамики аж от 128.
Откуда эти значения? Вон в теме про оптимизацию фортран при переходе с 4 на 5 значений даёт скачёк


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 12:36 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
вопрос писал(а):
Откуда эти значения? Вон в теме про оптимизацию фортран при переходе с 4 на 5 значений даёт скачёк

Что за скачок. При увеличении числа параметров CASE может быть только замеделение.
Из экспериментов на форте(spf4) до 32 параметров(каждый в диапазоне ячейки) классический CASE работает быстрее, чем предварительный дихотомический поиск на тех же 32 параметрах(лежат на стеке) с переходом по найденному смещению к исполнению токена( offset CELLS addr + @ EXECUTE). Я ж такую оптимизацию проверял, как наиболее простую.
Какое ускорение даст дерево сравнений, положенное в код я не проверял. Может такой вариант и быстрее будет. Но реализовать его чтобы он на автомате работал труднее.
Не знаю какую оптимизацию кода CASE проводит транслятор фортрана. Наверное компилирует дерево сравнений.
Ps. Я подразумеваю что набор параметров CASE заранее фиксирован(статический вариант).

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 12:41 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
chess писал(а):
Что за скачок.

chess писал(а):
Не знаю какую оптимизацию кода CASE проводит транслятор фортрана.

смотрим тему про редуцирующую оптимизацию - там последние сообщения...

Вообще, теоретически, важно сопоставить способ формирования набора значений (что зависит от решаемой задачи) со способом перехода по значению, которое встретилось. Скажем, Борланд решает проблему так: происходит сравнение (беззнаковое, видимо) не выходит ли значение за диапазон, если нет, обращение к таблице, где прямые адреса переходов. Однако, если значений меньше 4-5 - происходит пошаговое сравнение.
Разумеется, добросовестный программист поищет способ оптимизировать код во время компиляции, чтобы во время исполнения было как можно быстрее. Алгоритм не так сложен.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 12:53 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
вопрос писал(а):
Скажем, Борланд решает проблему так: происходит сравнение (беззнаковое, видимо) не выходит ли значение за диапазон

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 12:54 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
вопрос писал(а):
Скажем, Борланд решает проблему так: происходит сравнение (беззнаковое, видимо) не выходит ли значение за диапазон, если нет, обращение к таблице, где прямые адреса переходов. Однако, если значений меньше 4-5 - происходит пошаговое сравнение.

То же самое может сделать и фортер. Другое дело, что отдельный оператор case несколько скрывает сам механизм проверки, позволяя концентрироваться на удобном синтаксисе и не обращать внимания на детали реализации. В глобальном масштабе, при миллионах программистов и серьезной конкурентной борьбе между поставщиками средств разработки, оптимизация case "для всех" имеет смысл, потому что позволяет говорить о конкурентном преимуществе именно этого продукта.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 13:20 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
chess писал(а):
А если выходит, то что.

тогда DEFAULT
chess писал(а):
А если все пары значений друг от друга сильно отличаются, из-за чего таблицу переходов нельзя применить из-за ее огромного размера

можно посмотреть
Код:
#include <stdio.h>


int main(void)
    {
    int A,U;
   
    switch(U)
      {
      case(0): A = 100; break;
      case(10): A = 101; break;
      case(70): A = 102; break;
      case(190): A = 103; break;
      case(490): A = 104; break;
      case(1000): A = 105; break;
      case(5000): A = 106; break;
      case(100990): A = 107; break;
      case(1000000): A = 108; break;
      default: A = 0;
      }
    printf("%d",A);
    }

ассемблерный выход
Код:
   ;   int main(void)
   ;   
   push      ebp
   mov       ebp,esp
   ;   
   ;       {
   ;       int A,U;
   ;      
   ;       switch(U)
   ;   
?live1@16: ; EAX = U
@1:
   cmp       eax,490
   jg        short @13
   je        short @8
   sub       eax,1
   jb        short @12
   sub       eax,9
   je        short @11
   sub       eax,60
   je        short @10
   sub       eax,120
   je        short @9
   jmp       short @2
@13:
   sub       eax,1000
   je        short @7
   sub       eax,4000
   je        short @6
   sub       eax,95990
   je        short @5
   sub       eax,899010
   je        short @4
   jmp       short @2
   ;   
   ;         {
   ;         case(0): A = 100; break;
   ;   
?live1@32: ;
@12:
   mov       eax,100
   jmp       short @14
   ;   
   ;         case(10): A = 101; break;
   ;   
@11:
   mov       eax,101
   jmp       short @14
   ;   
   ;         case(70): A = 102; break;
   ;   
@10:
   mov       eax,102
   jmp       short @14
   ;   
   ;         case(190): A = 103; break;
   ;   
@9:
   mov       eax,103
   jmp       short @14
   ;   
   ;         case(490): A = 104; break;
   ;   
@8:
   mov       eax,104
   jmp       short @14
   ;   
   ;         case(1000): A = 105; break;
   ;   
@7:
   mov       eax,105
   jmp       short @14
   ;   
   ;         case(5000): A = 106; break;
   ;   
@6:
   mov       eax,106
   jmp       short @14
   ;   
   ;         case(100990): A = 107; break;
   ;   
@5:
   mov       eax,107
   jmp       short @14
   ;   
   ;         case(1000000): A = 108; break;
   ;   
@4:
   mov       eax,108
   jmp       short @14
   ;   
   ;         default: A = 0;
   ;   
@2:
   xor       eax,eax
   ;   
   ;         }
   ;       printf("%d",A);
   ;   


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 14:52 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
вопрос писал(а):
можно посмотреть

Всего было 9 значений в CASE,
разделили диапазон значений на 5-ки,
получилось два поддиапазона 5 и 4, проанализировали в какой диапазон идти,
в каждом из поддиапазонов сделали последовательный перебор.
Критерий деления - 5 штук значений.
Значит если значений меньше пяти делить диапазон не надо.
Ну в маш. коде может и так, а в форт-коде, будет не так.
Правда при таком подходе при стандартной структуре CASE в форте наверно
надо будет делить где-то от 12 до 16 штук.
Никакой 'крутой' оптимизации тут нет.
Можно с натяжкой это назвать формированием кода дихотомического поиска с ограничением интервала поиска снизу(до 5),

1. Вот если расположить параметры CASE не в отсортированном виде, а в произвольном,
интересно проведет сортировку или нет?
2. И если число параметров в CASE превысит 5-ть хотя-бы в 4 раза, то произойдет-ли формирование иерархии или будет
последовательный просмотр кусков по 5-ть параметров?

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 16:22 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Код:
    switch(U)
      {
      case(0): A = 100; break;
      case(10): A = 101; break;
      case(70): A = 102; break;
      case(190): A = 103; break;
      case(490): A = 104; break;
      case(1000): A = 105; break;
      case(5000): A = 106; break;
      case(100990): A = 107; break;
      case(1000000): A = 108; break;
      case(20): A = 100; break;
      case(210): A = 101; break;
      case(270): A = 102; break;
      case(2190): A = 103; break;
      case(2490): A = 104; break;
      case(21000): A = 105; break;
      case(25000): A = 106; break;
      case(2100990): A = 107; break;
      case(21000000): A = 108; break;
      default: A = 0;
      }

Код:
?live1@16: ; EAX = U
@1:
   cmp       eax,2190
   jg        short @22
   je        @12
   cmp       eax,190
   jg        short @23
   je        @17
   sub       eax,1
   jb        @21
   sub       eax,9
   je        @20
   sub       eax,10
   je        @19
   sub       eax,50
   je        @18
   jmp       @2
@23:
   sub       eax,210
   je        @16
   sub       eax,60
   je        @15
   sub       eax,220
   je        short @14
   sub       eax,510
   je        short @13
   jmp       @2
@22:
   cmp       eax,100990
   jg        short @24
   je        short @7
   sub       eax,2490
   je        @11
   sub       eax,2510
   je        short @10
   sub       eax,16000
   je        @9
   sub       eax,4000
   je        @8
   jmp       @2
@24:
   sub       eax,1000000
   je        short @6
   sub       eax,1100990
   je        short @5
   sub       eax,18899010
   je        short @4
   jmp       short @2
   ;   
   ;         {
   ;         case(0): A = 100; break;
   ;   
?live1@32: ;
@21:
   mov       eax,100
   jmp       short @25
   ;   
   ;         case(10): A = 101; break;
   ;   
@20:
   mov       eax,101
   jmp       short @25
   ;   
   ;         case(70): A = 102; break;
   ;   
@18:
   mov       eax,102
   jmp       short @25
   ;   
   ;         case(190): A = 103; break;
   ;   
@17:
   mov       eax,103
   jmp       short @25
   ;   
   ;         case(490): A = 104; break;
   ;   
@14:
   mov       eax,104
   jmp       short @25
   ;   
   ;         case(1000): A = 105; break;
   ;   
@13:
   mov       eax,105
   jmp       short @25
   ;   
   ;         case(5000): A = 106; break;
   ;   
@10:
   mov       eax,106
   jmp       short @25
   ;   
   ;         case(100990): A = 107; break;
   ;   
@7:
   mov       eax,107
   jmp       short @25
   ;   
   ;         case(1000000): A = 108; break;
   ;   
@6:
   mov       eax,108
   jmp       short @25
   ;   
   ;         case(20): A = 100; break;
   ;   
@19:
   mov       eax,100
   jmp       short @25
   ;   
   ;         case(210): A = 101; break;
   ;   
@16:
   mov       eax,101
   jmp       short @25
   ;   
   ;         case(270): A = 102; break;
   ;   
@15:
   mov       eax,102
   jmp       short @25
   ;   
   ;         case(2190): A = 103; break;
   ;   
@12:
   mov       eax,103
   jmp       short @25
   ;   
   ;         case(2490): A = 104; break;
   ;   
@11:
   mov       eax,104
   jmp       short @25
   ;   
   ;         case(21000): A = 105; break;
   ;   
@9:
   mov       eax,105
   jmp       short @25
   ;   
   ;         case(25000): A = 106; break;
   ;   
@8:
   mov       eax,106
   jmp       short @25
   ;   
   ;         case(2100990): A = 107; break;
   ;   
@5:
   mov       eax,107
   jmp       short @25
   ;   
   ;         case(21000000): A = 108; break;
   ;   
@4:
   mov       eax,108
   jmp       short @25
   ;   
   ;         default: A = 0;
   ;   
@2:
   xor       eax,eax
   ;   
   ;         }


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 16:41 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Что-то иерархии не видно, и все-таки непонятно насчет предварительной сортировки.

Сделайте вот так. Для прояснения картины:
Код:
      {
      case(0):        A = 100; break;
      case(21000000): A = 101; break;
      case(70):       A = 102; break;
      case(2100990):  A = 103; break;
      case(10):       A = 104; break;
      case(490):      A = 105; break;
      case(21000):    A = 106; break;
      case(190):      A = 107; break;
      case(5000):     A = 108; break;
      case(20):       A = 109; break;
      case(100990):   A = 110; break;
      case(1000):     A = 111; break;
      case(1000000):  A = 112; break;
      case(2190):     A = 113; break;
      case(210):      A = 114; break;
      case(2490):     A = 115; break;
      case(270):      A = 116; break;
      case(225000):   A = 117; break;
      case(25):       A = 118; break;
      case(5):        A = 119; break;
      case(50002):    A = 120; break;
      default: A = 0;
      }

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: быстрый CASE
СообщениеДобавлено: Чт авг 04, 2011 16:47 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Код:
   ;       switch(U)
   ;   
?live1@16: ; EAX = U
   cmp       eax,1000
   jg        short @25
   je        @14
   cmp       eax,70
   jg        short @26
   je        @19
   cmp       eax,10
   jg        short @27
   je        @22
   sub       eax,1
   jb        @24
   sub       eax,4
   je        @23
   jmp       @2
@27:
   sub       eax,20
   je        @21
   sub       eax,5
   je        @20
   jmp       @2
@26:
   sub       eax,190
   je        @18
   sub       eax,20
   je        @17
   sub       eax,60
   je        @16
   sub       eax,220
   je        @15
   jmp       @2
@25:
   cmp       eax,100990
   jg        short @28
   je        @8
   cmp       eax,5000
   jg        short @29
   je        @11
   sub       eax,2190
   je        @13
   sub       eax,300
   je        @12
   jmp       @2
@29:
   sub       eax,21000
   je        short @10
   sub       eax,29002
   je        @9
   jmp       @2
@28:
   sub       eax,225000
   je        @7
   sub       eax,775000
   je        short @6
   sub       eax,1100990
   je        short @5
   sub       eax,18899010
   je        short @4
   jmp       @2
   ;   
   ;         {
   ;         
   ;         case(0):        A = 100; break;
   ;   
?live1@32: ;
@24:
   mov       eax,100
   jmp       @30
   ;   
   ;         case(21000000): A = 101; break;
   ;   
@4:
   mov       eax,101
   jmp       @30
   ;   
   ;         case(70):       A = 102; break;
   ;   
@19:
   mov       eax,102
   jmp       @30
   ;   
   ;         case(2100990):  A = 103; break;
   ;   
@5:
   mov       eax,103
   jmp       short @30
   ;   
   ;         case(10):       A = 104; break;
   ;   
@22:
   mov       eax,104
   jmp       short @30
   ;   
   ;         case(490):      A = 105; break;
   ;   
@15:
   mov       eax,105
   jmp       short @30
   ;   
   ;         case(21000):    A = 106; break;
   ;   
@10:
   mov       eax,106
   jmp       short @30
   ;   
   ;         case(190):      A = 107; break;
   ;   
@18:
   mov       eax,107
   jmp       short @30
   ;   
   ;         case(5000):     A = 108; break;
   ;   
@11:
   mov       eax,108
   jmp       short @30
   ;   
   ;         case(20):       A = 109; break;
   ;   
@21:
   mov       eax,109
   jmp       short @30
   ;   
   ;         case(100990):   A = 110; break;
   ;   
@8:
   mov       eax,110
   jmp       short @30
   ;   
   ;         case(1000):     A = 111; break;
   ;   
@14:
   mov       eax,111
   jmp       short @30
   ;   
   ;         case(1000000):  A = 112; break;
   ;   
@6:
   mov       eax,112
   jmp       short @30
   ;   
   ;         case(2190):     A = 113; break;
   ;   
@13:
   mov       eax,113
   jmp       short @30
   ;   
   ;         case(210):      A = 114; break;
   ;   
@17:
   mov       eax,114
   jmp       short @30
   ;   
   ;         case(2490):     A = 115; break;
   ;   
@12:
   mov       eax,115
   jmp       short @30
   ;   
   ;         case(270):      A = 116; break;
   ;   
@16:
   mov       eax,116
   jmp       short @30
   ;   
   ;         case(225000):   A = 117; break;
   ;   
@7:
   mov       eax,117
   jmp       short @30
   ;   
   ;         case(25):       A = 118; break;
   ;   
@20:
   mov       eax,118
   jmp       short @30
   ;   
   ;         case(5):        A = 119; break;
   ;   
@23:
   mov       eax,119
   jmp       short @30
   ;   
   ;         case(50002):    A = 120; break;
   ;   
@9:
   mov       eax,120
   jmp       short @30
   ;   
   ;         default: A = 0;
   ;   
@2:
   xor       eax,eax
   ;   
   ;         }


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB