Составить процедуру выводящую число

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

Модератор: Andy

Ответить
АлексейМ
Сообщения: 4
Зарегистрирован: 12 июн 2013, 16:05

12 июн 2013, 16:09

Ребята, никак не понимаю - что требуется сделать.

Составить процедуру, выводящую на экран число заданного формата. На входе
процедуры аргумент находится в регистре AL/AX или в паре регистров DX:AX
(где в DX - старшее слово, в AX - младшее слово), в зависимости от размерности.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

13 июн 2013, 09:08

Ребята, никак не понимаю - что требуется сделать.
Тут все понятно написано - вывести на экран число, которое хранится в AX или AX :D X
It's a long way to the top if you wanna rock'n'roll
АлексейМ
Сообщения: 4
Зарегистрирован: 12 июн 2013, 16:05

13 июн 2013, 09:50

Т.е. преподаватель говорит - число 100. Я должен это число положить в АХ, а затем вывести на экран?
Процедура это не программа? Как это будет выглядеть ума не приложу.

p,s спасибо за ответ. Ассемблер дается непросто(
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

13 июн 2013, 09:55

Т.е. преподаватель говорит - число 100. Я должен это число положить в АХ, а затем вывести на экран?
Ну да
Процедура это не программа? Как это будет выглядеть ума не приложу.
Процедура - это часть программы. Перед ее вызовом в АХ должен быть агрумент, то есть нужное для вывода число.
Сам код вызова может выглядеть примерно так

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

бла-бла-бла
...
mov ax, 100
call PrintNumber
...
mov ax, 4C00h
int 21h
Саму процедуру попробуйте осилить сами. Подскажу, что принципы вывода числа на экран состоят в том, что исходное число последовательно делится на 10, а остаток от деления и есть очередная цифра.
It's a long way to the top if you wanna rock'n'roll
АлексейМ
Сообщения: 4
Зарегистрирован: 12 июн 2013, 16:05

13 июн 2013, 10:02

Да, спасибо. Как вывести число я знаю... Хм.. не пойму тогда в чем подвох этого задания. наверное, число может быть большим по размеру, чем размерность AX или меньшим (АL).

Ты мне очень помог. Единственное, что еще вызывает вопрос - как число может быть в "паре регистров DX:AX".. насколько я понимаю, мы его кладем в ах или в dх..

Дай бог тебе здоровья)))
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

13 июн 2013, 10:08

как число может быть в "паре регистров DX:AX".. насколько я понимаю, мы его кладем в ах или в dх..
Если число больше 65535, то пара регистров может расширить его до 32 бит. Если старшая часть будет в DX, тогда число 65536 будет записано как DX=1, AX=0; 65537 хранится как DX=1, AX=1;
В общих чертах требуемое число = AX + DX*65536
На процессорах 386 и выше можно использовать регистр EAX. Регистровые пары для расширения числа до 32 бит уже лет 10 как не используются. Даже для расширения до 64 бит не особо часто используются - проще использовать регистр FPU для вывода. Можете передать это преподу - думаю он будет в шоке
It's a long way to the top if you wanna rock'n'roll
АлексейМ
Сообщения: 4
Зарегистрирован: 12 июн 2013, 16:05

13 июн 2013, 10:49

Думаю, что да :)
Ответить