2013-06-26 3 views
0

Я делаю проект для университета и оказался в ситуации, когда было бы полезно определить строку со всеми $ в качестве стартовых значений.Объявляет строку, полную «плохой» практики?

Это служит иллюстрацией подобной ситуации:

string DB 22 dup('$') ; I declare the string with dollar signs 
; Input to string 
lea dx, string 
mov ah, 0Ah 
int 21h      
mov bx, dx 
mov ah, 0 
mov al, ds:[bx+1] 

Затем, если напечатать строку она закончится в правильный символ, без необходимости добавить «$» в конце вручную.

Я в ситуации, когда это бесконечно легче сделать так, но я боюсь, что учитель может указать, что это плохая практика или аргумент против нее. Я действительно не хочу сталкиваться с такой ситуацией только для того, чтобы быть практичным. Есть ли причина, по которой это плохая практика?

+3

Не более, чем инициализация выделения C 'char *' с помощью NUL. –

ответ

1

Ну ... это будет полезно, если вы печатаете строку с помощью int 21h/9. Если вы использовали его в качестве имени файла для открытия, например, вы хотите, чтобы он был завершен с нулем.

Для int21h/0Ah, первый байт является «максимальной длиной» для ввода. Но «$» позволит больше ввода, чем у вас есть буфер для его хранения. Я бы подумал, что это «плохая практика»! После возврата прерывания (пользователь нажал «enter»), второй байт - это фактическая введенная длина. Насколько я помню, это включает CR (13 десятичных или 0Dh hex), и dos всегда ставит CR там. (Linux делает это по-другому, что на самом деле может вызвать проблему). Фактический ввод текста начинается с string + 2 (который вы, похоже, выяснили). Если вы начнете печатать (с int 21h/9) в string, то dos, вероятно, увидит ваш первый «$» как «конец строки» и ничего не напечатает. (Попробуйте! Мне пришлось бы перезагрузиться, чтобы попробовать dos.)

Будет ли ваш учитель считать, что это «плохая практика» будет зависеть от вашего учителя. Как процессоры, операционные системы и ассемблеры ... они не все одинаковые! :)