Консультация № 54844
09.09.2006, 19:42
0.00 руб.
0 2 2
Здравствуйте ! Подскажите пожалуйста самый простой способ вывести на экран содержимое регистра ax, без всяких там макросов.

Обсуждение

Неизвестный
09.09.2006, 20:58
общий
это ответ
Здравствуйте, Whiteman!
<PRE>
Предлагается следующий вариант:
PUSH CX
MOV CX,4
@1: ROL AX,4
CALL OutDigit
LOOP @1
POP CX
;Ввиду частого использования этого кода обычно его выносят в макрос, а лучше - в процедуру
Используемая процедура:
OutDigit PROC NEAR
PUSH AX
AND AX,000Fh
CMP AL,9
JBE @2
ADD AL,7
@2: ADD AL,30h

PUSH DX ;Теперь надо вывести символ, код которого в AL. Приведён вариант для DOS
MOV DL,AL
MOV AH,2
INT 21h
POP DX ;Этот кусок кода - единственное, требующее замены для перехода под Win

POP AX
RET
OutDigit ENDP
</PRE>

Good luck!
Неизвестный
11.09.2006, 09:38
общий
это ответ
Здравствуйте, Whiteman!

Дополнение к последней части предыдущего ответа:

;Выводим символ с заданным цветом/фоном в текстовом режиме
push 0B800h
pop es; Адрес сегдента видеопамяти текстового режима (0-я страница)
xor di,di; Сюда заносим координаты на экране по формуле: <ширина_экрана_в_символах> * y + x. В данном случае - выводим по нулевым координатам (левый верхний угол).
mov ax,0721h; AH = 07 = цвет фона (= 0 = чёрный) и символа (= 7 = светло-серый); 21 = ASCII-код символа ‘!‘ (восклицательный знак).
stosw

;То же самое для графического режима с моделью памяти Packed Pixel (Индексированный цвет), т.е. 256 цветов
push 0A000h
pop es
xor di,di
mov ax,0721h; // Два последовательных пикселя, один цвета 07, другой цвета 21h
stosw

Если нужно ещё как-то выводить (вариантов, как по смыслу, так и по коду - много), - пишите...

Успехов!
Форма ответа