Объясните пожалуйсто руским языком как, на масме под ДОС, вывести на экран результат полученый в регистре. Читал что для выведения числа на экран нужно его записать в строку. Но строка тоже ведь состоит из чисел!!!! И чем отличаеться первоначальное число, на пример скан код нажатой клавиши в возвращённый в AH от записи тогоже числа в строку сохранённого в некую область памяти? Зачем эти преобразования??
Giroch Код (Text): цифра | ASCII-код | сканкод 0 | 48 | 11 1 | 49 | 2 2 | 50 | 3 3 | 51 | 4 4 | 52 | 5 5 | 53 | 6 6 | 54 | 7 7 | 55 | 8 8 | 56 | 9 9 | 57 | 10 ASCII-код - то число, которое будучи в строке (точнее в одном байте ASCII-строки) будет изображаться на экране соответствующей цифрой. Сканкод (PS/2) — код клавиши на клавиатуре, на которой расположена указанная цифра. На самом деле он в данном случае вообще не причём и приведен просто для сравнения, т.к. Вы сами его упомянули. Надеюсь, теперь понятно, как переводить число в его строковое представление.
Есть такое понятие как код символа Например кодам 0x41 - 0x5A ответствуют символы англ. алфавита ('A' - 'Z' ), кодам 0х30 - 0х39 символы чисел ( 0 - 9 ). Подробней тут http://ru.wikibooks.org/wiki/Кодирование_текста http://microsin.ru/content/view/652/43/
Записать его в строку. Можно тупо прибавлять к каждому разряду число 30h и записывать результат в буфер, который ты позже выводишь на экран. Как ответить на остальные вопросы так, чтобы не запутать еще больше не знаю (:
Т. е. я так понял что записывая в видиобуфер "48" то на экране получаем "0"? Что тогда будет строкой а что числом??
Понятие строка/число условное, все это байты . Просто у компа есть шрифты и они задают соответствие число - картина ( та которая отображается как символ(это может быть буква,число, знак какой то)).
Giroch Именно. В каком смысле? Вопрос в том, что как называть что ли? 325 - число. "325" - строка. Последовательность (массив) чисел 51,50,53 тоже можно называть строкой. Как хотите, так и называйте. "325", например, можно тоже назвать числом, представленным в 256-ричной системе счисления. Например, если (в masm) написать mov eax,"325", то в eax попадёт 256-ричное число, равное "325" = "3"*256^2+"2"*256^1+"5"*256^0 = 51*256^2+50*256+53 = 3355189
спасибо за потраченое время это действительно кое что прояснеет, но всё же... мне нужно вывести на экран значение значение регистра AL без изменений!!! т.е. хочу малюсенькую прогу : нажал на клавишу а она тебе ASCII код и радуешся... ) и всё так блин просто 16H --- INT 21H ----- AL = ASCII код но вот КАК его увидеть блин!!!!!!!!!!!!!
Не понял, у тебя в AL находится символ, который нужно вывести на экран? Тогда так: Код (Text): mov dl, al mov ah, 02h int 21h
Пасибо, ща попробую Но как же быть с числами и стрроками??? кстати предположим преобразовали число в строку и занесли её в произвольний буфер или переменнную что как я понял одно и тоже. Дальше что? на экран как???!!!!!!!!
Х-ммммм и что будет на экране "содержимое памяти по указаному адресу" или опять что то вроде вот такой пупаницы: если (в masm) написать mov eax,"325", то в eax попадёт 256-ричное число, равное "325" = "3"*256^2+"2"*256^1+"5"*256^0 = 51*256^2+50*256+53 = 3355189
Giroch Вообще не код символа будет выведен. Будет выведен сам символ. Невнимательно прочёл Ваш вопрос. Чтобы вывести код символа, его нужно, как Вы сами в первом посте написали, преобразовать в строку (как именно, я думаю понятно: вычисляете последовательно цифры, и каждую цифру преобразуете в код её символа). А вывод строки либо посимвольно, как показал Sholar в #10, либо целой строкой, как в #12, либо прямой записью в текстовую видеопамять (по адресу 0b8000h) в каждый чётный (если я правильно помню) байт.
Так не делается. В ah заносится номер функции(09h), а dx смещение до твоей строки. Вот пример: Код (Text): CSEG segment org 100h start: mov ah,9 mov dx,offset Message int 21h int 20h Message db 'Hello, world!$' CSEG ends end start UPD Так тебе строку нужно вывести или ASCII код символа?!
KLOS: mov ah, 10h ; в AL получаем ASCII код символа int 16h ; в AH получаем расширенный скан код символа mov dl,al mov ah, 01 int 21 jmp KLOS не работает что-то ваше mov ah, 01 int 21
Giroch Мало того, что переписали неправильно, так ещё и лишний вызов int 16h добавили. Это уже Ваше, а не моё. И с учётом поправки в #14.
Простите, а можно по подробнее про вычесление? Я понимаю перевести с 16-ричной (ASCII как я понял) в 10-чную или какуюто ещё, но как вычислить так чтобы осталась в 16-ричной??!! вот в чём вопрос
вот вот ваше в моём не работает хотя вроде всё просто. нет беp поправки в #14 но не выдаёт ничего вообще