.model tiny
.386
code segment use16
ASSUME cs:Code
org 100h
start:
mov ax,3
int 10h
mov eax,fs:[1Ch*4] ;сохраняем старый вектор
mov cs:oldvector,eax
mov word ptr fs:[1Ch*4] ,offset cs:timer ;устанавливаем новый вектор
mov fs:[1Ch*4+2],cs
b:
in al,60h
dec al
je exit
jmp b
timer:
dec cs:time
jne next
and edi,0
mov cs:time,91
push 0B800h
pop es
mov di,cs:_di
mov ax,0730h
stosw
mov cs:_di,di
next:
jmp cs:oldvector ;вызываем старое прерывание
exit:
pushf
call cs:oldvector
mov eax,cs:oldvector
mov fs:[1ch*4],eax
ret
time db 91 ;таймер генерирует 18,2 сигнала в секунду 5 секунд это 91 прерывание
oldvector dd 0
_di dw 0
code ends
end start
Помогите решить задачи на ассеблере
[COLOR="white"]____[/COLOR]2[COLOR="white"]___[/COLOR]2
U = A* (X + X + 1) / (A * X)
2.Составить значимую часть программы или полную программу для 16-битового вычисления следующего выражения (программа требует ветвлений)
[COLOR="white"]_[/COLOR]2[COLOR="white"]__[/COLOR]2
X + Y , если 10 < X*Y < 20
X + Y, если X*Y > 20 или X*Y < 10
код:
org 100h
mov ax,3
int 10h
mov eax,[fs:1Ch*4] ;сохраняем старый вектор
mov [oldvector],eax
mov word[fs:1Ch*4],timer ;устанавливаем новый вектор
mov [fs:1Ch*4+2],cs
b: jmp b
timer:
dec [cs:time]
jne next
mov [cs:time],91
push 0B800h
pop es
mov di,[cs:_di]
mov ax,0730h
stosw
mov [cs:_di],di
next:
jmp dword[cs:oldvector] ;вызываем старое прерывание
time db 91 ;таймер генерирует 18,2 сигнала в секунду 5 секунд это 91 прерывание
oldvector dd 0
_di dw 0
выбивает ошибку в 10 строчке при компилировании, может кто подскажет в чем пробема, Программа должна печатать на экране "0" каждые 5 секунд
COM программы ассемблируются с ключом -t вроде как в TASM-е. 5-ом
до ошибся я с рядком
разобрался, компилировать надо было на fasm-е а не на tasm-е, кстати вод код для tasm
Туговато у нас с авторскими правами) Упомянул бы хотя бы Vadimycha, автора сего творения))
http://www.cyberforum.ru/post2389220.html, Vadimych очень помог в решении даной задачи
прошу извинить меня, вот ссылочка на решение