|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 8, 2003 03:40:39 Допустим: .data mes1 db 'stroka1', 0 mes2 db 'stroka2', 0 как их склеить, чтобы вывести на экран 'stroka1stroka2' а? |
|
|
Дата: Сен 8, 2003 04:12:37 В твоем случае - убрать ноль :) |
|
|
Дата: Сен 8, 2003 05:03:49 volodya :-))) Ему программным путём надо ;-) |
|
|
Дата: Сен 8, 2003 05:10:18 Все стандартные алгоритмы (вроде тех, что реализованы в strcpy) предполагают наличие достаточного места в строке. Если это не так, тогда надо вычислить длину добавляемой строки, добавить память, занимаемую массивом и дописать ее туда. А вообще, для таких случаев есть книжка Рендалла Хайда! Давным-давно лежит! KINDER - занеси это в FAQ. |
|
|
Дата: Сен 8, 2003 06:51:06 volodya, спасиб. Качаю книжку... :) Asterix, ну чего ты зубоскалишься, жеребец? Мурзилку может обидеть каждый... |
|
|
Дата: Сен 8, 2003 07:05:24 murzilka :-))) Это предназначалось для Володи, так что не понимаю упрёка. У Вас, молодой человек, не всё в порядке с головой.. |
|
|
Дата: Сен 8, 2003 07:19:58mov esi,OFFSET mes2 mov edi,OFFSET [mes2 - 1] movsd movsd invoke MessageBox,0,OFFSET mes1,0,0 |
|
|
Дата: Сен 8, 2003 12:49:56 · Поправил: KiNDeR занеси это в FAQ. volodya уже сделано... К следущему посту(я думаю он будет в четверг) все будет готово. |
|
|
Дата: Сен 8, 2003 16:11:24 Посмотри набор строковых макросов от Four-F - там дофига приблуд для wsprintf и т.д., спасибо автору. Лежит на wasm. |
|
|
Дата: Сен 8, 2003 16:52:36 Пожалуйста. Только при чем тут склеивание строк? |
|
|
Дата: Сен 8, 2003 17:14:45 Four-F Если соврал - и для случая, когда .data mes1 db 'stroka1', 0 mes2 db 'stroka2', 0 там ничего нет, прошу прощенья, но если сразу надо вствить "stroka1", я подсел на Strings.mac, благодарен и всем рекомендую. Использование исключительно некоммерческое |
|
|
Дата: Сен 8, 2003 17:46:30 · Поправил: BaldakBatur но надо не изменяя данных.. mov edi,esp mov eax,[esp] sub edi,800h ;не знаю сколь велик стек.. mov eax,edi mov esi,offset mes1 mov ecx,7 ;длина 1-й строки rep movsb mov esi,offset mes2 mov ecx,8 ;длина 2-й строки+нуль rep movsb invoke MessageBox,0,eax,0,0 |
|
|
Дата: Сен 9, 2003 01:50:10 Большое спасибо за советы. Особенно BaldakBatur`у :). Asterix, шел бы ты работать языком в другом месте, как говорил товарищ Черномырдин. Для чего ты залез в этот топик? Позубоскалить и поострить? У тебя это плохо получается... |
|
|
Дата: Сен 9, 2003 01:51:08 · Поправил: Sk. Inc. Попробуй этот способ: invoke lstrlen, offset mes1 ; получаем длину первой строки push eax ; кладем значение длины в стек invoke lstrlen, offset mes2 ; получаем длину второй строки pop ecx ; извлекаем из стека значение длины первой строки add ecx, eax ; складываем длины строк inc ecx ; не забываем нуль-символ ;) invoke LocalAlloc,LMEM_FIXED,ecx ; выделяем под строку память invoke lstrcpy, eax, offset mes1 ; копируем строку 1 в память invoke lstrcat, ecx, offset mes2 ; приклеиваем строку 2 к строке 1 в результате в регистре eax у нас содержится адрес полученной строки, который, когда он станет уже ненужным, передается в качестве параметра функции LocalFree, для освобождения памяти |
|
|
Дата: Сен 10, 2003 01:48:56 Sk. Inc, спасибо огроменное! Для меня, человека программившего только на ПХП и только-только начавшего изучать АСМ, такие советы с комментариями на каждую инструкцию просто спасение :). |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.100 |