Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.(

Ответить
Настройки темы
Assm - ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.(

Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить 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

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Assm - ПРограмма на ассемблере.Помогите пожалуйста разобраться в некоторых вещах.(

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход