Вывод числа не более FFFF (65535)

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

XGarik,
Рискну предположить, что проблемная команда:
div cs :p

Если дело в этом, то замена на
mov bl, 10
div bl

должна помочь.

А вообще, есть ли в ассемблере команда деления на константу (а то забыл уже)? Если есть, то можно вообще вот так написать:
div bl

Кстати, когда я баловался ассемблером, то я обычно делал не EXE-шники, а COM-файлы. Ключи запуска для TLINK для этого у меня были такие:

tlink /t /l /x my_obj.obj
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

XGarik,

я тут подумал .. макрос, что я тебе дал - он для общего случая.
А поскольку у тебя всё равно число может быть только от 0 до 9 (то есть всего одна цифра),
то все эти jne и loop не нужны.

Можно написать просто так:

Код: Выделить всё

cprintN macro num
	push	es

	mov dl, num ; set dl to digit of number
	add dl, 30h ; convert digit to ASCII
	mov ah, 02h ; init DOS Fn 02h: display output
	int 21h

	pop	es
endm
но нужно не забывать, что если прийдётся выводить числа в которых более одной цифры,
нужно будет возвращаться к предидущему макросу.
XGarik
Сообщения: 10
Зарегистрирован: 20 апр 2006, 12:59

Еще раз спасибо товарищи! Все советы помогли!
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Кстати, есть еще один вариант вывода символа на экран - через Int 10h:

Код: Выделить всё

Mov Ah, 0Eh
Mov Al, '1'
Int 10h
На экран в позицию курсора выводится символ, записанный в Al (в данном случае - '1').
Ah = 0Eh - номер функции

Вот описание из Interrupt list:
------------------------------------------
Int 10/AH=0Eh

VIDEO - TELETYPE OUTPUT
AH = 0Eh
AL = character to write
BH = page number
BL = foreground color (graphics modes only)
Return:Nothing

Desc: Display a character on the screen, advancing the cursor and scrolling the screen as necessary

Notes: Characters 07h (BEL), 08h (BS), 0Ah (LF), and 0Dh (CR) are interpreted and do the expected things. IBM PC ROMs dated 4/24/81 and 10/19/81 require that BH be the same as the current active page

See Also: AH=02h - AH=0Ah
Ответить