Как определить длину строки?

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
PavelA
Сообщения: 2
Зарегистрирован: 18 апр 2005, 16:41

Помогите составить функцию определения длины строки!
Спасибо.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Код: Выделить всё

mov ax, ds
mov es, ax

mov di, ofset my_string
mov cx, 0FFh
xor ax, ax
repnz cmpsb

not cx
inc cx
И того в cx - длина строки. Возможно последняя команда лишняя - проверь. У меня нет под рукой асма.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Romeo, не будет работать :) Ты же cmpsb делаешь, а si не задан. Со scasb перепутал? :)
Будет типа этого:

Код: Выделить всё

	mov di, offset my_string 
	mov cx, 0FFFFh 
	xor ax, ax 
	repnz scasb 

	not cx 
	dec cx 
Это если строка с завершающим нулем. Иначе в AL другое значение.
*provided AS IS
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Точно scasb, опечатался. Да и вообще практики нет, забывается всё :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить