Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объединение строк в ASM


Страницы:   1 2

Gydvin ©   (2006-02-25 20:26:00) 

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

короче
в двух регистрах находся по слову, например
eax  =  'Hello'
edx = 'world'
как бы мне в eax или еще где, получить 'Hello world'.

чур только больно небить.

Зы. Может есть линки, на литературу по ASM для начинающих, где б доступным языком были б описаны основы.


Defunct   (2006-02-27 12:02:00) [21]

zzz теперь уже я гоню, насмотревшись на ваш код.. извиняюсь.

sub   esp, 50    
mov   edi, esp   ; адрес начала строки
mov   al, 'a'
stosb
stosb
stosb
mov   eax, [esp]  
add  esp, 50       ; восстановить указатель стека
ret


Defunct   (2006-02-27 11:58:00) [22]

Ну дык понятно, а что ж вы хотели?

push  ebp
mov   ebp, esp   ; <-- ebp указывает на вершину стека ( начало строки)
sub    esp, 50
mov   al, 'a'
mov   edi, ebp ; адрес начала строки
stosb
stosb
stosb
mov  eax, [ebp]   ; не надо адресовать ds через ebp, оставьте ss для ebp
add  esp, 50       ; восстановить указатель стека!!
ret


Gydvin   (2006-02-27 11:50:00) [23]

что-то немогу вьехать что я тут неправильно сделал

PUSH EBP
MOV EBP,ESP
SUB ESP,50 ; резервирую место в стеке
MOV AL,61    ; Символ 'a'
MOV EDI,DWORD PTR DS:[ebp-50]
STOS BYTE PTR ES:[EDI] ; уже здесь  "Ошибка записи по адресу 00000000"
STOS BYTE PTR ES:[EDI]
STOS BYTE PTR ES:[EDI]
MOV EAX,DWORD PTR DS:[ebp-50]
LEAVE
RETN


Defunct   (2006-02-25 21:11:00) [24]

> Может какую конкретно посоветуете
Новых книг для начинающих - не знаю, из старых - "Ассемблер для IBM PC и программирования", П. Абель.

> я уже со всем разобрался вот только проблемы с s:=s+
ну например так:

 mov  al, <символ который надо добавить к строке>
 mov  edi, <адрес строки + текущая длина строки >
 stosb  // <добавление символа в конец строки и автоинкремент edi >
 
только память под строку должна быть выделена с запасом!


Gydvin   (2006-02-25 21:04:00) [25]

Defunct ©   (25.02.06 20:50) [1]
Лучше купить книгу..

Может какую конкретно посоветуете

movs, lods, stos
Ага понятно.

А вобще стоит такая задача:
Вот аналог в делфях

r:array of integer;
for x:=0 to 100 do begin

  if r[x]=0 then s:=s+'0' else s:=s+'1';
end;

где '1' и '0' хранится по некому адресу

я уже со всем разобрался вот только проблемы с s:=s+


Defunct   (2006-02-25 20:50:00) [26]

ну во превых, в регистрах слов быть не может, в регистрах указатель на строку...

Чтобы строки можно воспользоваться строковыми командами: movs, lods, stos. Только необходимо выделить память под третью строку, куда будет помещен результат объединения строк.

> Зы. Может есть линки, на литературу по ASM для начинающих,
Лучше купить книгу..


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо