IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

> Создание простейшего планировщика процессов, Подскажите почему программа не работает
Neon6868
сообщение 3.05.2008 19:47
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Задание:
Написать на ассемблере IBM PC программу простейшего планировщика, обеспечивающего параллельное выполнение нескольких процессов.
В качестве процессов использовать циклически работающие процедуры, включенные в текст программы планировщика.
Для демонстрации своей работы процессы должны выполнять какие-либо преобразования в видеопамяти с использованием прямого доступа к ней (не используя сервис прерываний).
При выполнении работы руководствоваться требованиями:
1.Планировщик с добровольным переключением(использовать прерывание 60h
2.Циклическая очередь без приоритетов
3.Количество процессов - 3

У меня в программе 1 процедура выводит символ '1' на экран, 2 и 3 процедуры пока что ничего не делают. Когда запускаю программу, выводится сообщение: "Процессор обнаружил недопустимую инструкцию" и вылетает из командной строки. Подскажите плиз что не правильно и как исправить.

Программа:

model small
stack 100h
.286
.data
  nomer db 0
  max dw 101
  smesh dw 0
  segm dw 0
  st1 db 256 dup(0)
  st2 db 256 dup(0)
  st3 db 256 dup(0)
  save_ss dw 0
          dw 0
          dw 0
          dw 0
  save_sp dw 0
          dw 0
          dw 0 
          dw 0
  stek dw 2  
.code
  
my_proc proc
  mov cl,nomer
  cmp cx,0
  je first
  pusha
povtor:
  mov si,stek   
  cmp si,8
  je m2
  mov si,2
m2:
  mov ax,[save_ss+si]
  mov ss,ax
  mov bx,[save_sp+si]
  mov sp,bx
  add si,2
  mov stek,si
  mov al,nomer
  inc ax
  cmp ax,max
  je vixod
  mov nomer,al

  popa
  iret
  
first:
  pusha 
  mov [save_ss],ss
  mov [save_sp],sp
  
  
  mov sp,offset st1+256
  pushf
  push cs
  push offset proc1
  pusha  
  mov [save_SS+2],ss 
  mov [save_sp+2],sp

  mov sp,offset st2+256
  pushf
  push cs
  push offset proc2
  pusha  
  mov [save_SS+4],ss
  mov [save_sp+4],sp

  mov sp,offset st3+256
  pushf
  push cs
  push offset proc3
  pusha  
  mov [save_SS+6],ss
  mov [save_sp+6],sp

  jmp povtor

vixod:
  mov ax,[save_ss]
  mov ss,ax
  mov bx,[save_sp]
  mov sp,bx
  popa
  iret

my_proc endp

proc1 proc
  mov ax,0B800h
  mov es,ax
  mov di,0
  mov al,'1'
  mov es:[di],al
  int 60h

  iret
proc1 endp

proc2 proc
 int 60h
  iret
proc2 endp

proc3 proc
   int 60h
  iret
proc3 endp
  
start:
  mov ax,@data
  mov ds,ax
  mov ax,3		
  int 10h
  mov ah,35h
  mov al,60h
  int 21h
  mov cs:[smesh],bx
  mov cs:[segm],es
  mov ah,25h
  mov al,60h
  mov dx,offset my_proc
  push cs
  pop ds
  int 21h

  int 60h

  mov ah,25h
  mov al,60h
  mov dx,cs:[smesh]
  mov ds,cs:[segm]
  int 21h

  mov ax,4c00h
  int 21h
  end start



Сообщение отредактировано: Neon6868 - 4.05.2008 0:54
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
Neon6868
сообщение 4.05.2008 0:57
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Написал в программе все правильно, но не понимаю почему не работает! Плиз ответьте кто-нибудь, а то что-то форум совсем умер. wink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
boba
сообщение 13.05.2008 9:50
Сообщение #3


Гость






а где ты ето писал
 К началу страницы 
+ Ответить 
Neon6868
сообщение 18.05.2008 21:15
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Цитата(boba @ 13.05.2008 10:50) *

а где ты ето писал


Писал в обычном блокноте, а потом компилировал с помощью TASM.

Добавлено через 10 мин.
Вот работающая программа:

model small
stack 100h
.286
.data
  nomer db 0
  max db 200
  smesh dw 0
  segm dw 0
  st1 db 256 dup(0)
  st2 db 256 dup(0)
  st3 db 256 dup(0)
  save_ss dw 0
          dw 0
          dw 0
          dw 0
  save_sp dw 0
          dw 0
          dw 0 
          dw 0
  stek dw 2  
.code
  
my_proc proc
  mov ax,65535
cikl: 
  mov cx,10000 
c2:
  loop c2
  dec ax
  cmp ax,0
  jne cikl
  mov cl,nomer
  cmp cx,0
  je first
  pusha
povtor:
  mov si,stek   
  cmp si,8
  jne m2
  mov si,2
m2:
  mov ax,[save_ss+si]
  mov bx,[save_sp+si]
  mov ss,ax
  mov sp,bx
  add si,2
  mov stek,si
  mov al,nomer
  inc al
  cmp al,max
  je vixod
  mov nomer,al

  popa
  iret
  
first:
  pusha 
  mov [save_ss],ss
  mov [save_sp],sp
  
  mov ax,ds
  mov ss,ax
  
  mov sp,offset st1+256
  pushf
  push cs
  push offset proc1
  mov di,0
  pusha  
  mov [save_SS+2],ss 
  mov [save_sp+2],sp

  mov sp,offset st2+256
  pushf
  push cs
  push offset proc2
  mov di,0
  mov bh,0
  pusha  
  mov [save_SS+4],ss
  mov [save_sp+4],sp

  mov sp,offset st3+256
  pushf
  push cs
  push offset proc3
  mov di,0
  mov bh,0
  pusha  
  mov [save_SS+6],ss
  mov [save_sp+6],sp

  jmp povtor

vixod:
  mov ax,[save_ss]
  mov bx,[save_sp]
  mov ss,ax
  mov sp,bx
  popa
  iret

my_proc endp

proc1 proc
  mov ax,0B800h
  mov es,ax
  mov al,'A'
  mov es:[di],al
  add di,2
  int 60h
  jmp proc1
proc1 endp

proc2 proc
  mov ax,0B800h
  mov es,ax
  mov bl,es:[di]
  inc bh
  cmp bh,00001000b
  jne m1
  mov bh,00000001b
m1:
  mov es:[di],bx
  add di,2
 int 60h
 jmp proc2
proc2 endp

proc3 proc
  mov ax,0B800h
  mov es,ax
  mov bx,es:[di]
  add bh,10000000b
  mov es:[di],bx
  mov  bh,0
  add di,2
  int 60h
  jmp proc3
proc3 endp
  
start:
  mov ax,@data
  mov ds,ax
  mov ah,35h
  mov al,60h
  int 21h
  mov cs:[smesh],bx
  mov cs:[segm],es
  mov ah,25h
  mov al,60h
  mov dx,offset my_proc
  push ds
  push cs
  pop ds
  int 21h
  pop ds
  int 60h

  mov ah,25h
  mov al,60h
  mov dx,cs:[smesh]
  mov ds,cs:[segm]
  int 21h

  mov ax,4c00h
  int 21h
  end start



Можно 1 вопрос (мне препод задал): "Как в этой программе организована циклическая очередь без приоритетов и показать строки в программе, где это делается." Я ему 3 разных ответа дал, но всё не то. Подскажите плиз ответ, а то я видимо вопроса не понимаю.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Neon6868
сообщение 27.05.2008 14:58
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Я все никак эту лабу не могу сдать. sad.gif Мне надо нарисовать как будет выглядеть стек в этой точке программы:

first:
  pusha 
  mov [save_ss],ss
  mov [save_sp],sp

Вот здесь!



Скажите плиз что я нарисовал не так, картинка ниже!


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 7:01
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"