Инициализация строк символов


Рассмотрим теперь создание строк символов. Символы представ-ляют собой допустимые операнды директив определения данных, поэ-тому строку символов можно определить следующим образом:

String DB ‘A’, ‘B’, ‘C’, ‘D’

В Турбо Ассемблере в этом случае предусмотрена также удобная сокращенная форма:

String DB ‘ABCD’

Если вы хотите использовать вид строки, принятый в языке Си (которая заканчивается нулевым байтом), вы должны явно указать в конце строки нулевой байт. Аналогично, если вы хотите завершить строку символами возврата каретки и перевода строки, их также нужно включить в строку. В следующем примере определяется тексто-вая строка, за которой следует символ возврата каретки, символ перевода строки и нулевой байт:

HelloString DB ‘Привет!’,0dh,0ah,0

Чтобы переместиться к левому краю следующей строки, вы должны вывести пару символов «возврат каретки/перевод строки».

Например, программа:

DOSSEG

MODEL SMALL

STACK 100h

.DATA

String1 DB ‘Line1’,’$’

String2 DB ‘Line2’,’$’

String3 DB ‘Line3’,’$’

.CODE ProgramStart:

mov ax,@data

mov ds,ax

mov ah,9 ; функция DOS печати строки

mov dx,OFFSET String1 ; печатаемая строка

int 21h ; вызвать DOS для печати строки

mov dx,OFFSET String2 ; печатаемая строка

int 21h ; вызвать DOS для печати строки

mov dx,OFFSET String3 ; печатаемая строка

int 21h ; вызвать DOS для печати строки

mov ah,4ch ; функция DOS завершения

; программы

int 21h

END ProgramStart

печатает следующее:

Line1Line2Line3

Однако если в конце каждой строки вы добавите пару символов «возврат каретки/перевод строки»:

String1 DB ‘Line1’,’$’,0dh,0ah,’$’

String2 DB ‘Line2’,’$’,0dh,0ah,’$’

String3 DB ‘Line3’,’$’,0dh,0ah,’$’

то вывод будет выглядеть следующим образом:

Line1

Line2

Line3