Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пт окт 19, 2018 12:49 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 14 сообщений ] 
Автор Сообщение
 Заголовок сообщения: Помощь german'у
СообщениеДобавлено: Вс июн 05, 2005 8:11 pm 
Подскажите, кто может, как конвертировать строку текста в числовую
переменную. Н-р text db '640' в nmbr dd 640. Пожалуйста помогите ассемблерному ламеру.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 06, 2005 8:28 am 
Это не возможно, если ты не укажешь длину строки. Есть два способа - переменная с длиной и завершающий ноль.
Переменная с длиной:
Код:
  xor eax,eax
  mov ebx,text
  mov ecx,[len]
  jecxz .endloop
.loop:
  shl eax,1
  lea eax,[eax+4*eax]
  add eax,byte [ebx]
  sub eax,'0'
  inc ebx
  loop .loop
.endloop:

Завершающий ноль (text db '640',0):
Код:
  xor eax,eax
  mov ebx,text
.loop:
  cmp byte [ebx],0
  jz  .endloop
  shl eax,1
  lea eax,[eax+4*eax]
  add eax,byte [ebx]
  inc ebx
  sub eax,'0'
  jmp .loop
.endloop:

Результат в eax.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 06, 2005 2:24 pm 
на строке

Код:
add eax,byte [ebx]


Fasm 1.60 выдает ошибку:
Error: operand sizes do not match


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 06, 2005 2:55 pm 
Мда... Кое-чего не учел...
Правильные варианты:
Код:
  xor eax,eax 
  mov ebx,text
  mov ecx,[len]
  xor edx,edx
  jecxz .endloop
.loop:
  mov dl,byte [ebx]
  shl eax,1
  lea eax,[eax+4*eax]
  add eax,edx
  sub eax,'0'
  inc ebx
  loop .loop
.endloop:

и
Код:
  xor eax,eax 
  mov ebx,text
  xor edx,edx
.loop:
  cmp byte [ebx],0
  jz  .endloop
  mov dl,byte [ebx]
  shl eax,1
  lea eax,[eax+4*eax]
  add eax,edx
  inc ebx
  sub eax,'0'
  jmp .loop
.endloop:


;----------------------------------------
Это сообщение составил halyavin.
;----------------------------------------


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 06, 2005 3:16 pm 
Не в сети
Site Founder
Аватара пользователя

Зарегистрирован: Вс авг 08, 2004 8:55 am
Сообщения: 689
http://board.flatassembler.net/topic.php?t=3516

_________________
in code we trust


Вернуться к началу
 Заголовок сообщения: Помощь German'у-2
СообщениеДобавлено: Ср июн 15, 2005 6:32 pm 
Пишу без лирики сразу переходя к вопросу:

есть строка string db ?
две переменные pos2 dd ? и pos dd ?
данный код перемещает участок памяти,
по адресам указанным в переменных,
в строку string.

Код:
mov esi,[pos2]    ;перемещение строки адрес [pos2]:[pos]
mov edi,[pos]     ;в переменную strng
mov edi,strng
movsd


Но код не работает перемещая только 4 байта
начиная с позиции pos2.

Помогите пожалуйста, товорищи ассемблирующие!!!


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 15, 2005 6:54 pm 
Что код-то должен делать непонятно...
С pos2 по pos в стиринг или что?
Ты явно неправильно используешь edi ибо записываешь в него подряд вторую переменную
Этот код берет вещь из esi и перемещает в edi, movsd - перемащает 1 dword - 4 байта, если строка нулем кончается
можно сделать rep movsb - скопирует побайтно пока не найдет 0


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 15, 2005 7:03 pm 
Нужно rep movsd писать и ecx = pos2-pos1, кто-нибудь дополните меня...


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 16, 2005 1:29 pm 
Не в сети

Зарегистрирован: Ср май 25, 2005 8:52 am
Сообщения: 147
Код:
mov  ecx,[pos2]
mov  esi,[pos]
sub   ecx,esi
mov  edi,string
rep   movsb


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 16, 2005 2:15 pm 
вобщем надо в ecx указать количество перемещаемых байт если мне не изменяет память...
ну или делать repnz пока не встретится нуль в строке... что то типа этого...


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 16, 2005 3:22 pm 
и не забыть настроить es \ ds, а не то может злая шутка случиться :lol:


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 16, 2005 5:44 pm 
Спасибо и опятьв вопрос: Не подскажет ли мне кто-нибудь где найти пример применение IPC в MenuetOS


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 16, 2005 7:25 pm 
Был такой пример IPC , но я точно не помню есть ли в сорцах Колибри 4....


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 16, 2005 8:02 pm 
Я проверил, нашёл всем спасибо


Вернуться к началу
   
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 14 сообщений ] 

Часовой пояс: UTC+03:00


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB