Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перевести код процедуры на Fasm, Перевести код процедуры на Fasm 
:(
    Опции темы
Сергейчик
Дата 1.11.2013, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Помогите перевести код этой процедуры сравнения 2-ух строк с числами в виде ascii на Fasm
писал на PureBasic. smile  
Код

Procedure.s Sravnenie(q.s,r.s)
;если нет по адресу памяти переменной q 1 символ "-" а в переменной r стоит "-"
If Not PeekS(@q,1)="-" And PeekS(@r,1)="-":ProcedureReturn ">":EndIf
;наоборот
If Not PeekS(@r,1)="-" And PeekS(@q,1)="-":ProcedureReturn "<":EndIf;
Protected m1.i =MemoryStringLength(@q);Количество символов в уникоде
Protected n1.i =MemoryStringLength(@r)
Protected k1.i
;если в обоих переменных "-"
If PeekS(@r,1)="-" And PeekS(@q,1)="-"
  If m1>n1:ProcedureReturn "<":EndIf
  If m1<n1:ProcedureReturn ">":EndIf
   k1=@r;начальный адрес переменной r
   For i=@q+2 To @q+(m1*2) Step 2;цикл адреса через 2 байта(символы в памяти в уникоде)
   k1+2
   If PeekS(i,1)>PeekS(k1,1):ProcedureReturn "<":EndIf;сравнение по 1 (младшему)байту так как цифры как ascii 
   If PeekS(i,1)<PeekS(k1,1):ProcedureReturn ">":EndIf
   Next
  ProcedureReturn "="
EndIf
;если обе переменные без "-"
  If m1>n1:ProcedureReturn ">":EndIf
  If m1<n1:ProcedureReturn "<":EndIf
  If q="" And r=""
   ProcedureReturn "="
   Else
   k1=@r
   For i=@q To @q+(m1*2) Step 2
   If PeekS(i,1)>PeekS(k1,1):ProcedureReturn ">":EndIf
   If PeekS(i,1)<PeekS(k1,1):ProcedureReturn "<":EndIf
   k1+2
   Next
   ProcedureReturn "="
   EndIf
EndProcedure



Это сообщение отредактировал(а) Сергейчик - 1.11.2013, 23:44
PM MAIL   Вверх
Сергейчик
Дата 4.11.2013, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 16.5.2013

Репутация: нет
Всего: нет



Что то типа такого только чтоб и равно возвращала.
Код

Procedure.s  Sravnenie(q.s,r.s)
 !PUSH_REG_SIZE equ 0x14 
 !
 !PUSH   edi esi 
 !MOV edi,[p.v_q + PUSH_REG_SIZE]
 !MOV esi,[p.v_r + PUSH_REG_SIZE]
 !cld
 !repe CMPSB
 !jA menshe
 !
 !
;!BOLSHE:
 !POP   esi edi
  ProcedureReturn ">"
!menshe:
 !POP  esi edi
 ProcedureReturn "<"
EndProcedure 


Это сообщение отредактировал(а) Сергейчик - 4.11.2013, 17:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0946 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.