Задать вопрос
Kezzya
@Kezzya

Как найти длину массива?

InBuff    label  byte
   MaxSymb   Db  9
    RealSymb  Db  ?
  StringT db 1 dup (' ')

После вызова 10й функции 21 прерывания должна записываться длина массива в RealSymb, однако мне почему-то при любой длине строки выдаётся число 1.
Также использовал len StringT - тоже 1 выдаёт... хотя я ввёл 3 символа туда
Вопрос, как я могу найти длину этого массива ( то что пользователь ввёл?)
  • Вопрос задан
  • 247 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
MaxSymb Db 9
RealSymb Db ?
StringT db 1 dup (' ')

Здесь должно быть StringT db 9 dup (' '), иначе ввод затрёт то что там дальше в памяти лежит.

я пытался и делать так mov cx, InBuff[0] , mov cx, InBuff[1] без разницы.

Эти инструкции загружают 16-битный регистр из памяти, а значение длины -- 8-битное. Правильно было бы как-нибудь так: mov cl, [RealSymb]

len equ $ - StringT - не выходит, тоже 1 выдаёт

Это вообще определяет константу, значение которой равно разности текущего адреса и адреса StringT. Если это делать в твоей программе сразу следом за определением StringT, то 1 и получится, потому что длина StringT у тебя -- 1 байт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы