Другие языки программирования и технологии

ассемблер, проверка длины строки

Вообщем вот отрезок кода:

str1 db 10, ?,
str2 db 10, ?,
; это как, я понимаю, мы заявили две пустые строки размером на 10 символов

; далее мы их вручную вводим в консоли, при этом не обязательно 10, но возможно и меньше символов, однако не больше 10

mov al, str1+1
mov ah, str2+1
cmp ah,al
jg error
; вот тут, закинув каждую из строк в регистры, мы их сравниваем и если во второй строке введенных символов больше, то выдаем ошибку

внимание вопрос: как именно (и пожалуйста, как можно конкретнее) в ассемблере определяется или если можно так выразиться регистрируется эта самая длина строки, относительно какой величины (размера, адреса или чего то еще) определяется что одна строка больше другой.. ведь по логике не заполнив всю строку данными, в пустых ячейках остаются эти неопределенные символы, то есть вопросы, а значит относительно количества символов это определить нельзя. Очень хотелось бы услышать какой-нибудь умный совет или ответ)
Можно твою строку представить в виде буфера:
buf1 db 20 dup(0) ;буфер 10 байт, заполненных 0
buf12 db 20 dup(0) ;второй такой же буфер.

mov buf1[0], 10D ;Определим размер 1 буфера (пишем в max)
; Так выглядит буфер в памяти: max¦len¦T¦E¦X¦T¦0Dh

mov buf2[0], 10D ;Тоже самое делаем со вторым буфером

;После этого при чтении в с консоли в буфер твоя строка будет длины не больше max, а ;действительная длина строки будет в len

;Далее, что бы прочитать в какой-нибудь буфер делаешь так:

lea dx, buf1;Записываем в DX адрес буфера 1
call scan

lea dx, buf2;Записываем в DX адрес буфера 2
call scan

;Процедура scan:
scan proc near ;Процедура считывания строки из консоли и записывающая результат в буфер, ;адрес которого в DX
push ax
mov ah,0Ah
int 21h
pop ax
ret
scan endp

;Чтобы сравнить эти 2 строки делаешь цикл, от 2 до len (не важно какого буфера)
;И посимвольно сравниваешь 2 строки и выходишь из цикла, когда счетчик цикла >= len или в буфере обнаружен символ 0Dh (нажатие Enter)

Это для intel 8086 (16-ти разрядный) , поняв логику, переделаешь и под любую другую размерность, если надо.
Денис Хасанов
Денис Хасанов
630
Лучший ответ
Орлан Ооржак Какую размерность могут иметь элементы строк:
А) 5 байтов
Б) 6 байтов
В) 4 байта
Г) 10 байтов
вопрос к данному тесту не относиться
Какую размерность могут иметь элементы строк:
А) 5 байтов
Б) 6 байтов
В) 4 байта
Г) 10 байтов
Вячеслав М
Вячеслав М
315