|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.( |
|
Assm - ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.(
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать Код разделен на три части: 1). void setpointer()
2). void clock_p_s 3). void retpointer(). Что делается в каждой из частей? _TEXT segment byte public 'CODE' _TEXT ends DGROUP group _DATA,_BSS assume cs:_TEXT,ds:DGROUP _DATA segment word public 'DATA' _off_1ch equ 1ch*4 _maskf db 7 _position dw 0 _DATA ends _BSS segment word public 'BSS' _oldoffset1c dw ? _oldsegemnt1c dw ? _BSS ends _DATA segment word public 'DATA' _counttakts dw 0 _timeend dw 20 _oldsec dw 0 _DATA ends _TEXT segment byte public 'CODE' ; ************************************************************************ ; void setpointer() ; ************************************************************************ assume cs:_TEXT @setpointer$qv proc near cli mov ax,0 mov es,ax ;таблица находится в 0м сегменте mov bx,_off_1ch ;засылаем в bx смещение mov ax,[es:bx] ;засылаем в аккумулятор значение по ардесу es:bx смещение ;(первые 2 байта адреса системного обработчика) mov _oldoffset1c,ax ;засылаем в oldoffset1c cмещение ... mov ax,[es:bx+2] ;аналогично, только сегмент mov _oldsegemnt1c, ax ;записать новый вектор в таблицу векторов прерываний mov ax, offset @clock_p_s$qv;смещение нового обработчика в ax mov bx,_off_1ch mov [es:bx],ax push cs pop ax ;настройка ax на cs mov [es:bx+2],ax ;запись сегмента mov ax, 0b800h mov es, ax mov cx, 3838 mov ax,32+7*256 m0: mov bx, cx mov [es:bx],ax dec cx loop m0 sti ret @setpointer$qv endp ; ************************************************************************ ; void clock_p_s() ; ************************************************************************ assume cs:_TEXT @clock_p_s$qv proc near ;сохранение в стеке используемых регистров push ax push bx push dx ;dx портит imul и idiv push es push ds ; настройка ds на cs push cs pop ds inc _counttakts ;инкремент counttakts mov ax,_counttakts mov dx,10 imul dx mov bx,182 idiv bx cmp ax,_oldsec jz endprog mov _oldsec,ax sub ax,_timeout jl endprog dec _timeend mov ax,2Ah ;запись в es адреса начала видеопамяти - B800:0000 mov bx, 0b800h mov es, bx mov bx, _position ;позицию на экране - в bx mov ah, _maskf ;маску вывода - в ah mov es:[bx],ax ;вывод символа в центр экрана ;восстановление используемых регистров: inc _position inc _position endprog: pop ds pop es pop dx pop bx pop ax iret @clock_p_s$qv endp ; ************************************************************************ ; void retpointer() ; ************************************************************************ assume cs:_TEXT @retpointer$qv proc near cli ;восстановление вектора прерывания от таймера ;запрет аппаратных прерываний xor ax, ax ;снова настройка es на начало таблицы mov es, ax ;векторов прерываний mov ax, _oldoffset1c ;запись в таблицу смещения старого mov bx,_off_1ch mov [es:bx],ax ;обработчика прерывания от таймера mov ax,_oldsegemnt1c ;запись сегмента mov [es:bx+2], ax sti ;разрешение аппаратных прерываний ret @retpointer$qv endp _TEXT ends _DATA segment word public 'DATA' _DATA ends _TEXT segment byte public 'CODE' _TEXT ends public @clock_p_s$qv public @retpointer$qv public @setpointer$qv extrn _timeout:word public _oldsec public _timeend public _counttakts public _oldsegemnt1c public _oldoffset1c public _position public _maskf public _off_1ch end |
|
Отправлено: 23:25, 21-01-2014 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Assm - [решено] Помогите разобраться с программой на ассемблере | Shenochek | Программирование и базы данных | 10 | 23-12-2013 21:19 | |
HDD - [решено] Помогите пожалуйста разобраться со скоростью записи на HDD !!!! | ummc_1 | Накопители (SSD, HDD, USB Flash) | 2 | 30-03-2011 15:08 | |
Assm - Помогите решить задание на ассемблере | Wild_cat | Программирование и базы данных | 3 | 10-03-2009 09:49 | |
программа на Ассемблере | himik | Программирование и базы данных | 9 | 22-11-2003 04:40 | |
Помогите разобраться, пожалуйста | mazepkstan | Сетевые технологии | 1 | 12-04-2003 21:20 |
|