Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите решить задачи на ассеблере

78K
04 января 2012 года
kiberfunk
1 / / 04.01.2012
1.Составить значимую часть программы или полную программу для 16-битового вычисления следующего выражения
[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
68K
15 января 2012 года
7777777Miki
4 / / 06.02.2011
файл *.asm
код:
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 секунд

14
15 января 2012 года
Phodopus
3.3K / / 19.06.2008
Где ты там увидел 10-ю строчку?
COM программы ассемблируются с ключом -t вроде как в TASM-е. 5-ом
68K
15 января 2012 года
7777777Miki
4 / / 06.02.2011
до ошибся я с рядком
68K
15 января 2012 года
7777777Miki
4 / / 06.02.2011
разобрался, компилировать надо было на fasm-е а не на tasm-е, кстати вод код для tasm
Код:
.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
79K
15 января 2012 года
vital792
5 / / 15.01.2012
оффтоп:
Туговато у нас с авторскими правами) Упомянул бы хотя бы Vadimycha, автора сего творения))
68K
15 января 2012 года
7777777Miki
4 / / 06.02.2011
прошу извинить меня, вот ссылочка на решение http://www.cyberforum.ru/post2389220.html, Vadimych очень помог в решении даной задачи

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог