![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 17.05.2011
Сообщений: 2
|
![]()
model small ; Тип модели памяти
.stack 100h ; Выделяем сегмент под стек размером 255 байт .data ; Сегмент данных hours db ? ; Переменная для хранения часов minuts db ? ; Переменная для хранения минут seconds db ? ; Переменная для хранения секунд .386 ; Используем инструкции 386-го процессора .code ; Сегмент кода Begin: ; Метка начала программы mov ah, 02h ; 02 - ф-ция прерывания 1Ah для получения текущего времени int 1Ah ; Вызываем прерывание ; Данная ф-ция этого прерывания заполнит ряд регистров показанием часов, а именно: ; В регистре CH будут часы ; В регистре CL будут минуты ; В регистре DH будут секунды mov [hours], ch ; Сохраним в переменной показание часов mov [minuts], cl ; Сохраним в переменной показание минут mov [seconds], dh ; Сохраним в переменной показание секунд ; Теперь надо вывести все это на экран, предварительно преобразовав в ASCII форму mov ah, [hours] ; Помещаем в регистр ah значение переменной hours (часы) call print_ah ; Вызываем процедуру вывода значения регистра на экран ; Выведем разделитель ":", чтоб было что-то вроде "23:00:01" mov al, ':' ; В регистр al помещаем символ для вывода int 29h ; И выводим его на экран. int 29h - это недокументированое прерывание ДОСа. ; Оно выводит на экран символ, что находиться в регистре al в формате ASCII ; Аналогично поступаем для минут и секунд: mov ah, [minuts] call print_ah mov al, ':' int 29h mov ah, [seconds] call print_ah mov ax, 0 ; 00 - функция прерывания 16h: ожидание нажатия любой клавиши int 16h mov ax, 4C00h int 21h ; Выходим в ДОС ; Процедура по выводу значения регистра на экран (старшей части регистра ax) print_ah proc ; Процедура вывода на экран содержимого регистра ah в hex-форме xchg dx, ax ; DX = AX mov cx, 2 ; Число цифр для вывода (Если поставить 4 - выведет содержимое всего регистра) shift_ax: shld ax, dx, 4 ; Получить в AL очередную цифру rol dx, 4 ; Удалить ее из DX and al, 0Fh ; Оставить в AL только эту цифру cmp al, 0Ah ; Три команды, переводящие sbb al, 69h ; Шестнадцатеричную цифру в AL das ; В соответствующий ASCII-код int 29h ; Вывод на экран loop shift_ax ; Повторить для всех цифр ret print_ah endp end Begin ; Конец программы |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 17.05.2011
Сообщений: 2
|
![]()
нужна схема этой строчки
print_ah proc ; Процедура вывода на экран содержимого регистра ah в hex-форме xchg dx, ax ; DX = AX mov cx, 2 ; Число цифр для вывода (Если поставить 4 - выведет содержимое всего регистра) shift_ax: shld ax, dx, 4 ; Получить в AL очередную цифру rol dx, 4 ; Удалить ее из DX and al, 0Fh ; Оставить в AL только эту цифру cmp al, 0Ah ; Три команды, переводящие sbb al, 69h ; Шестнадцатеричную цифру в AL das ; В соответствующий ASCII-код int 29h ; Вывод на экран loop shift_ax ; Повторить для всех цифр ret print_ah endp end Begin ; Конец программы Последний раз редактировалось andrey_06_06; 17.05.2011 в 18:54. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
блок схема к программе | emin313gs | Помощь студентам | 0 | 11.10.2010 17:35 |
нужна блок-схема к программе | solisoul | Помощь студентам | 3 | 26.08.2010 08:44 |
блок схема алгоритма программы (Ассемблер) | Sokolova91 | Помощь студентам | 0 | 30.03.2010 23:40 |
Блок схема к программе | NeGaTiVe | Помощь студентам | 2 | 02.11.2009 15:18 |
Нужна блок схема к готовой программе. | BioVis | Фриланс | 8 | 11.05.2009 18:03 |