OS dev: Procedure that ends a task.

Please support our Assembly advertiser: Programming Forums - DaniWeb Sister Site
Reply

Join Date: Jun 2008
Posts: 97
Reputation: Alex_ is an unknown quantity at this point 
Solved Threads: 2
Alex_'s Avatar
Alex_ Alex_ is offline Offline
Junior Poster in Training

OS dev: Procedure that ends a task.

 
-1
  #1
Sep 29th, 2009
Hello.
I have an assignment to make a procedure that will end a task. The manual from the university isn't quite clear about how this works. So mainly i have this problem: How does a procedure end a working task?
1) Does the bios call the procedure ? or,
2) Will my current operating system call my procedure? or,
3) I must make myself an os that boots, launches a task, and then after an amount of time calls the procedure to end the task and bail out.
I have no idea!
The manual does give some sort of code(which should be changed by me to work properly) that shows how it should look like. But once i don't understand the way it works, how can i know what to change?
The code with comments (translated by me) from the manual:
  1. PROC newint20h ; int 20h
  2. call _di
  3.  
  4. ;keeping back any interruptions so that the task may not be launched when the processor is taken away (me: what does "taken away" mean????)
  5. pop ax
  6. pop ax ;Extracting from stiva (me: I don't know the true translation of stiva. But one thing for sure: it's a FILO type memory acces)
  7. pop ax
  8.  
  9. ;extracting the leftovers that are left from the execution of int 20h (we don't need the CS,IP indicators any more) (me: What int 20h? Are they talking about THIS procedure or the system's one.)
  10. push cs
  11. pop ds
  12. lea di,[cs:firsttask] ; DI = Offset of TASK
  13. mov al,[cs:numtask] ; AL = Task's ID
  14. xor ah,ah ; AX = Task's ID
  15. push dx
  16. mov dx,515
  17. mul dx ; AX = the starting index of firsttask
  18. pop dx
  19. add di,ax ; DI = putting the top of the stiva in di
  20.  
  21. ;Putting a 255 value into task's ID , marking it as non-loaded.
  22. mov [Byte Ptr cs:di],255
  23. mov dx,[cs:di+3]
  24. call FreeMemory
  25. call _ei
  26. jmp int08new
  27. ; Freeing the memory, and beginning the execution of int 8;
  28. ENDP newint20
Last edited by Alex_; Sep 29th, 2009 at 6:52 am.
Fundamental law of life:
do{ ThingsToDo+=me.CompleteTask(ThingsToDo); }while(ThingsToDo); Die(me);
Law of the Spirit:
do{ Rebuke(me); }while(!me.Repented); LiveEternal(me);
PM me to know more why i wrote this or what it means.
Reply With Quote Quick reply to this message  
Join Date: Oct 2008
Posts: 137
Reputation: NotNull is an unknown quantity at this point 
Solved Threads: 14
NotNull's Avatar
NotNull NotNull is offline Offline
Junior Poster

Re: OS dev: Procedure that ends a task.

 
0
  #2
Sep 29th, 2009
It might be that the 16-bit code you have been given
pertains to when a task requests to terminate on a
single tasking operating system.

Or if it refers to multi-tasking, then it is not just an
intermediary but free's a task from a list of tasks
to execute and free's its memory, and transfers
control back to the task-scheduler.

INT 08 is called by the system clock on IBM-PCs.

I think it might be for multi-tasking.
It is possible in 16-bit assembly to multi-task applications.
Last edited by NotNull; Sep 29th, 2009 at 11:26 am.
----------------------------------------------------------
To control a mind violates a man, and all it has been used for is
hurting and afflicting. Nowonder I progam in assembly...
--->Now available http://dotcoding.netai.net/
Reply With Quote Quick reply to this message  
Join Date: Oct 2008
Posts: 137
Reputation: NotNull is an unknown quantity at this point 
Solved Threads: 14
NotNull's Avatar
NotNull NotNull is offline Offline
Junior Poster

Re: OS dev: Procedure that ends a task.

 
0
  #3
Sep 29th, 2009
  1. push cs ; if CS==DS then [firsttask] same as [cs:firsttask]
  2. pop ds
  3. lea di,[cs:firsttask] ; Offset of some array of data structures. See below
  4. mov al,[cs:numtask] ; Current task ID
  5. xor ah,ah
  6. push dx
  7. mov dx,515 ; hmmm. ID is index into 515 byte data items???
  8. mul dx
  9. pop dx
  10. add di,ax ; It must be... Because FIRSTTASK+(ID*515)
  11. mov [Byte Ptr cs:di],255 ;clears first byte of data struct to 255
  12. mov dx,[cs:di+3] ; retrieves the address of some of its memory.
  13. ; in DOS a data struct is made for each
  14. ; block of memory, for ex.
  15. call FreeMemory
  16. call _ei
  17. jmp int08new ; if int08 is on the same segment, if not jmp far

Same thing happens when you index into an array of
words:
  1. lea di, [myarr]
  2. mov bx, index
  3. shl bx, 1
  4. mov word [myarr+bx], 1234h
Last edited by NotNull; Sep 29th, 2009 at 11:44 am.
----------------------------------------------------------
To control a mind violates a man, and all it has been used for is
hurting and afflicting. Nowonder I progam in assembly...
--->Now available http://dotcoding.netai.net/
Reply With Quote Quick reply to this message  
Join Date: Oct 2008
Posts: 137
Reputation: NotNull is an unknown quantity at this point 
Solved Threads: 14
NotNull's Avatar
NotNull NotNull is offline Offline
Junior Poster

Re: OS dev: Procedure that ends a task.

 
0
  #4
Sep 29th, 2009
Since its getting rid of FLAGS, CS, and IP on the stack [SP=SP+6],
I would assume this doesn't pertain to multi-tasking but
a procedure of similar function to the INT 20h DOS interrupt.
This would mean the TASK calls the procedure in order to terminate.
It looks like its just keeping information about each task in a
large contiguous array of data structures, and keeping track of
the task that was currently yeilding system resources, instead
of using a PSP (like DOS), so it doesn't need the caller's CS value.
Last edited by NotNull; Sep 29th, 2009 at 11:42 am.
----------------------------------------------------------
To control a mind violates a man, and all it has been used for is
hurting and afflicting. Nowonder I progam in assembly...
--->Now available http://dotcoding.netai.net/
Reply With Quote Quick reply to this message  
Join Date: Jun 2008
Posts: 97
Reputation: Alex_ is an unknown quantity at this point 
Solved Threads: 2
Alex_'s Avatar
Alex_ Alex_ is offline Offline
Junior Poster in Training

Re: OS dev: Procedure that ends a task.

 
0
  #5
Sep 29th, 2009
Thanks very much notnull. But i still don't understad how to make from all that a procedure that ends a task.
Fundamental law of life:
do{ ThingsToDo+=me.CompleteTask(ThingsToDo); }while(ThingsToDo); Die(me);
Law of the Spirit:
do{ Rebuke(me); }while(!me.Repented); LiveEternal(me);
PM me to know more why i wrote this or what it means.
Reply With Quote Quick reply to this message  
Join Date: Oct 2008
Posts: 137
Reputation: NotNull is an unknown quantity at this point 
Solved Threads: 14
NotNull's Avatar
NotNull NotNull is offline Offline
Junior Poster

Re: OS dev: Procedure that ends a task.

 
1
  #6
Sep 29th, 2009
Let's see.
Does it have to be based on the code you showed?
Does it have to be a working program?
Does it have to manage multiple tasks?

If all else fails try making a program that loads a binary image
as an overlay, and set up an interrupt handler
for termination that points into your loading program.

INT 21/48-4A Memory Management
INT 21/4B03 Load Overlay
INT 21/25 SetIVT

You'll have to allocate the block of memory for the
overlay yourself.
Use a indirect far jump into the overlay, starting at whatever
offset is the entry point:
  1. push es
  2. xor ax, ax
  3. push ax
  4. retf
  5. ;or
  6. push es
  7. xor ax, ax
  8. push ax
  9. mov bp, sp
  10. jmp far [bp]
Make sure to include a call to your termination interrupt within
the overlay.
----------------------------------------------------------
To control a mind violates a man, and all it has been used for is
hurting and afflicting. Nowonder I progam in assembly...
--->Now available http://dotcoding.netai.net/
Reply With Quote Quick reply to this message  
Join Date: Jun 2008
Posts: 97
Reputation: Alex_ is an unknown quantity at this point 
Solved Threads: 2
Alex_'s Avatar
Alex_ Alex_ is offline Offline
Junior Poster in Training
 
0
  #7
Oct 29th, 2009
Uhm. I'm confused.
I actually understood my assignment wrong. So i don't have to do that anymore... I'm sorry for bothering. But i appreciate your help! Thanx
Fundamental law of life:
do{ ThingsToDo+=me.CompleteTask(ThingsToDo); }while(ThingsToDo); Die(me);
Law of the Spirit:
do{ Rebuke(me); }while(!me.Repented); LiveEternal(me);
PM me to know more why i wrote this or what it means.
Reply With Quote Quick reply to this message  
Reply

Tags
endtask, osdevelopment

Message:


Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC