У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


аh

xor bh,bh ; в bh - номер сторінки відеопам’яті

int 10h

mov cs:buffer[di],al ; заносимо в буфер символ

inc di ; інкрементуємо індекс буфера

inc ch ;готуємо наступну координату

cmp ch, cs:kinc_x_m

jz cycle1

cmp cl, cs:kinc_y_m

jz zapus

jmp cycle2

;відкриття файлу, запис даних до нього і закриття

zapus:

push ds ;зберігаємо ds (його зміст буде змінено)

mov ax,cs ;заносимо в ах номер сегменту нашої програми

mov ds,ax ; заносимо це значення в ds(це необхідно для виконання переривання, що

;працює з файлом)

mov ah,3dh ;відкриття файлу

lea dx, cs:file_name ; в dx – адрес строки з назвою файлу

mov al,01h ;в al – режим відкриття (для запису)

int 21h

mov cs:des,ax ;зберігаємо дескриптор файлу в des

mov ah,40h ;запис даних до файлу

mov bx, cs:des ; в bx – дескриптор файлу

lea dx, cs:buffer ; в dx – адрес буферу, що містить інформацію для запису

mov cx, cs:kilk ; в cx – кількість байт, що мають бути записані

int 21h

mov ah,3eh ; закриття файлу

mov bx, cs:des ; в bx – дескриптор

int 21h

mov cs:byte_info,0000h ; обнулюємо байт характеристик

endi:

pop ds ; відновлюємо ds

popa ; відновлюємо регістри оперативного призначення

iret ; передаємо управління перерваній програмі

; функція різниці координат Х по модулю та перестановки їх в змінних

mod_x:

mov cs:poch_x_m,al

mov cs:kinc_x_m,ah

sub ah,al

jmp mod_x_ret

; функція різниці координат У по модулю та перестановки їх в змінних

mod_y:

mov cs:poch_y_m,cl

mov cs:kinc_y_m,ch

sub ch,cl

jmp mod_y_ret

real_start:

mov bx,082h ; заносимо в bx адрес комірки пам’яті, де збережені параметри запуску програми

xor di,di ; обнулюєм індекс di

next_symvol:

mov al,[bx] ;копіюємо символ в al

mov file_name[di],al ; копіюємо символ з al в змінну file_name

inc bx ;готуєм адресу нової комірки пам’яті

inc di ;готуєм нову адресу комірки змінної з іменем файла

test al,0ffh ; al=0?

jz end_name_copy ;якщо так, то перехід на кінець копіювання імені файлу

jmp next_symvol ;копіювання наступного символу

 

end_name_copy:

push es ;зберігаємо значення регістра es

mov ax,3508h ;в AH – 35h (номер функції отримання вектора)

;в AL - 08 h (номер необхідного перервання)

int 21h

mov old_int8_cs,es ;зберігаємо сегмент в змінній old_int8_cs

mov old_int8_ip,bx ;зберігаємо зміщення в змінній old_int8_ ip

lea dx,interrupt ; DS:DX – нова підпрограма обробки переривання

mov ax,2508h ; AH - 25h номер функції установки вектора

; AL – 08h номер необхідного переривання

int 21h

pop es ;відновлюєм es

lea dx,real_start ;зміщення команди, починаючи з якої пам'ять буде звільнено

int 27h ;передаємо управління DOS

end start

Використана література

Зубков С. В. Assembler для DOS? Windows, UNIX 3-е изд., стер.-М.:ДМК Пресс; СПб.:Питер, 2004.

Системное программное обеспечение. Учебник для вузов/А. Ю. Молчанов.- СПб:Питер, 2003.

Велихов А. В. Макроассемблер: Создание и отладка программ.-м.: Майор, 2001.


Сторінки: 1 2