![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Объединение строк в ASM
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 для начинающих,
Лучше купить книгу..