![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() ![]() |
![]() |
krolik |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Реальное имя: prostoy Репутация: ![]() ![]() ![]() |
Задание:
Написать на ассемблере IBM PC программу простейшего планировщика, обеспечивающего параллельное выполнение нескольких процессов. В качестве процессов использовать циклически работающие процедуры, включенные в текст программы планировщика. Для демонстрации своей работы процессы должны выполнять какие-либо преобразования в видеопамяти с использованием прямого доступа к ней (не используя сервис прерываний). При выполнении работы руководствоваться требованиями: 1.Планировщик с добровольным переключением(использовать прерывание 60h 2.Циклическая очередь без приоритетов 3.Количество процессов - 3 Программа вроде работает, пожалуйста прокомментируйте каждую сточку, а то что то не могу в ней разобраться 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
Сообщение отредактировано: Lapp - 31.05.2011 11:24 |
Lapp |
![]()
Сообщение
#2
|
|||
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Задание: Написать на ассемблере IBM PC программу простейшего планировщика, обеспечивающего параллельное выполнение нескольких процессов. В качестве процессов использовать циклически работающие процедуры, включенные в текст программы планировщика. Для демонстрации своей работы процессы должны выполнять какие-либо преобразования в видеопамяти с использованием прямого доступа к ней (не используя сервис прерываний). При выполнении работы руководствоваться требованиями: 1.Планировщик с добровольным переключением(использовать прерывание 60h 2.Циклическая очередь без приоритетов 3.Количество процессов - 3 Программа вроде работает, пожалуйста прокомментируйте каждую сточку, а то что то не могу в ней разобраться 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
Погоди, а как это так - написал, работает, а разобраться не можешь? Что-то я не въезжаю в ситуацию.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
|||
krolik |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 2 Пол: Мужской Реальное имя: prostoy Репутация: ![]() ![]() ![]() |
эту работу я скачал с этого форума, осталось только в ней разобраться, а с комментариями было бы легче разобраться, помоги пожалуйста если сможешь
|
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
эту работу я скачал с этого форума, осталось только в ней разобраться, а с комментариями было бы легче разобраться, помоги пожалуйста если сможешь Так и пиши, откуда взял, хотя бы.. Нет, с ассемблером возиться никакого желания нет, уже несколько лет не прикасался к нему. Может, кто-то еще.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
TarasBer |
![]()
Сообщение
#5
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
Асм такая штука...
Легче самому с нуля написать. Неплохая разминка для ума, да. Правда, практического применения способности писать на асме такие простыни я придумать не могу. -------------------- |
leone.incognito |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 57 Пол: Мужской Реальное имя: Левон Репутация: ![]() ![]() ![]() |
"mov ax,65535" заменил бы на "xor ax,ax и dec ax"
![]() а лучше инвертировать. Сообщение отредактировано: leone.incognito - 11.06.2011 19:41 -------------------- "Непросто тем,кто полагается на истину авторитета,вместо того,чтобы полагаться на авторитет истины"
Джэрольд Мэсси |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 6:07 |