Страница 2 из 2
Добавлено: 27 апр 2006, 10:31
BBB
XGarik,
Рискну предположить, что проблемная команда:
div cs
Если дело в этом, то замена на
mov bl, 10
div bl
должна помочь.
А вообще, есть ли в ассемблере команда деления на константу (а то забыл уже)? Если есть, то можно вообще вот так написать:
div bl
Кстати, когда я баловался ассемблером, то я обычно делал не EXE-шники, а COM-файлы. Ключи запуска для TLINK для этого у меня были такие:
tlink /t /l /x my_obj.obj
Добавлено: 27 апр 2006, 11:30
Oscar
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
но нужно не забывать, что если прийдётся выводить числа в которых более одной цифры,
нужно будет возвращаться к предидущему макросу.
Добавлено: 27 апр 2006, 11:53
XGarik
Еще раз спасибо товарищи! Все советы помогли!
Добавлено: 27 апр 2006, 16:25
BBB
Кстати, есть еще один вариант вывода символа на экран - через 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