Номер печати сборки больше 9

Мне нужно напечатать число больше 9 в сборке, и мне удалось написать этот код, но для меня он печатает «_ _» в качестве ответа. Что случилось?

xor ax,ax
mov al,bl
mov bl,0Ah
div bl

mov bl,ah
add bl,48

mov ah,2h
mov dh,offset bl
int 21h

mov bl,al
add bl,48   

mov ah,2h
mov dh,offset bl
int 21h

person Deividas Bražėnas    schedule 27.09.2017    source источник
comment
Начать можно с документации для int 21. Символ для печати помещается в регистр, который вы не используете. Кроме того, как вы думаете, что должен делать mov dh,offset bl?   -  person David Wohlferd    schedule 27.09.2017
comment
вы не печатаете числа, вы печатаете ascii-символы (поэтому вы добавляете 48 перед печатью, понимаете?). для чисел › 9 вам нужно преобразовать его в строку и вместо этого напечатать это. Google поможет вам найти одно из сотен готовых решений для этого.   -  person Tommylee2k    schedule 27.09.2017
comment
Итак, я должен сделать mov ah,9h? Я новичок в ассемблере, поэтому могу думать неправильно, но, на мой взгляд, mov dh, offset bl и int 21h должны выводить строку. Извините за мои маленькие познания...   -  person Deividas Bražėnas    schedule 27.09.2017
comment
bl - это 8-битный регистр, у него нет адреса памяти, поэтому у него не может быть никакого смещения. Итак, вы неправильно поняли, что делает директива offset. Меня даже удивляет, почему TASM скомпилировал его без ошибок. mov dh,bl скопирует значение из bl в dh. ... Проверьте ссылку от Дэвида для описания int 21h службыs (!) и правильных аргументов, с ah=2 содержание dh не важно.   -  person Ped7g    schedule 27.09.2017
comment
Спасибо @Ped7g, я попробую, когда вернусь домой.   -  person Deividas Bražėnas    schedule 27.09.2017