[MASM] Вывод значения переменной (или содержимого регистра) на экран

Извините за надоедливость, но

во-первых:

Если 2-я функция 21-го прерывания выводит значение загруженное в dl, то получается число не может быть более 255. А что если оно более 255-ти?

во вторых:

Попробовал ввести такой код:

mov ax, 1000
add ax, 657
mov y, ax
mov ah, 9h
add y, 30h
mov dx, offset string
int 21h
int 20h
string db "Сумма = "
y dw ?, "$"

Вместо результата 1657 в десятичной или 679 в шестнадцатеричной - появилась буква "й" и карточный значок "пики". Ведь команда add y, 30h изменила код с 679 на 06A9. Как же быть?

и в третьих:

Объясните пожалуйста как же мне вычесть из 32 - 121. В отладчике появляется невесть что и результат -89 не получается.

Спасибо за терпение!