![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 31.03.2011
Сообщений: 2
|
![]()
привет! помогите пожалуйста, мне нужно написать процедуру, вычисляющую длину строки, ассемблер не понимаю, вот код на эту задачу(немного разбирали похожее на паре), но почему то не работает...
Код HTML:
.386 .model flat, stdcall option casemap: none includelib kernel32.lib .code strlen proc uses eax ebx ecx edi string: dword, retvail: dword cld mov ax, ds mov es, ax mov edi, string mov ecx, 2048 mov al, END_OF_STRING repne scasb ; сканирование по байтам(будет повторятьсся до тех пор, пока не встретиться ноль или другой какой то элемент, который мы запрограмировали(в отличие от rep) dec edi ; remove END_OF_STRING symbol sub edi, string ; substract addres of string from last symbol mov ebx, retval; return value mov[ebx], edi ret strlen endp main proc invoke strlen, ADDR test string, ADDR len mov eax, len invoke ExitProcess, 0 main endp end main по идее типа она(прога) выдает нам длину строки в байтах...насколько я поняла..типа адрес начала строки минус адрес конца строки... и скажите, как тут правильно код вставлять, чтобы выглядел как ассемблеровский? Спасибо! |
![]() |
![]() |
![]() |
#2 |
Адский тунеядец
Форумчанин
Регистрация: 11.06.2010
Сообщений: 164
|
![]()
Так не проще?
Код:
А на счёт твоего - я его посмотрел. Там в половине строчек смысла нет. Я попробовал исправить. В debuggere посмотрел - все работает хорошо. Получается правильно. Рассматривал на примере Hello World. Вот программа: Код:
Здесь строчку Код:
Вот эту строчку: Код:
Код:
А на счет команды lea - она загружает в первый операнд адрес второго, то есть строчки Код:
Код:
Последний раз редактировалось Ibanez Wizard; 01.04.2011 в 21:13. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
![]()
Ibanez Wizard, что бы не лезть в дебаггер раз за разом, выведи результат в окно:
Код:
|
![]() |
![]() |
![]() |
#4 |
Адский тунеядец
Форумчанин
Регистрация: 11.06.2010
Сообщений: 164
|
![]()
vadimych, если я буду выводить на экран, то я увижу только результат, да и к тому же мне бы пришлось вывод на экран потом из исходника удалять (чтобы выложить готовый вариант). В отладчике я себя увереннее чувствую.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычисление длины строки | Agafon | Microsoft Office Word | 12 | 17.11.2010 15:43 |
измерение длины строки | Agafon | Общие вопросы Delphi | 6 | 11.11.2010 15:13 |
Функция получения длины строки в C# | kloffelin | Помощь студентам | 12 | 26.10.2010 22:39 |
Поиск длины строки | beda | Microsoft Office Word | 5 | 21.06.2010 14:27 |
Строки неизвестной длины в си | abr_question | Общие вопросы C/C++ | 18 | 22.01.2010 00:26 |