a = 1;
b = 2;
c = "values are: " + a + " and " + b ;
Эти данные примерно переводятся в:
a db 1
b db 2
c db "values are: ? and ?$"
Ваши переменные a и b являются числами.Вам необходимо преобразовать их в текст, прежде чем вставлять их в строку, которая в этом упрощенном примере использует символ вопросительного знака (? ) в качестве заполнителя из одного символа.
mov al, [a] ;AL becomes 1
add al, '0' ;AL becomes "1"
mov [c + 12], al ;12 is offset of the first '?'
mov al, [b] ;AL becomes 2
add al, '0' ;AL becomes "2"
mov [c + 18], al ;18 is offset of the second '?'
mov dx, c ;Address of the string
mov ah, 09h
int 21h ;Print with DOS
Это альтернатива приведенному выше коду.Это на несколько инструкций короче, но имеет недостаток, заключающийся в том, что его нельзя использовать повторно!(Поскольку add
зависит от заполнителей, оставшихся нулем)
a db 1
b db 2
c db "values are: 0 and 0$"
mov al, [a] ;AL becomes 1
add [c + 12], al ;12 is offset of the first '0'
mov al, [b] ;AL becomes 2
add [c + 18], al ;18 is offset of the second '0'
mov dx, c ;Address of the string
mov ah, 09h
int 21h ;Print with DOS