943,634 Members | Top Members by Rank

Ad:
  • Assembly Discussion Thread
  • Unsolved
  • Views: 850
  • Assembly RSS
Sep 29th, 2009
-1

OS dev: Procedure that ends a task.

Expand Post »
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:
asm Syntax (Toggle Plain Text)
  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.
Similar Threads
Reputation Points: 10
Solved Threads: 3
Junior Poster
Alex_ is offline Offline
175 posts
since Jun 2008
Sep 29th, 2009
0

Re: OS dev: Procedure that ends a task.

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.
Reputation Points: 36
Solved Threads: 19
Junior Poster
NotNull is offline Offline
198 posts
since Oct 2008
Sep 29th, 2009
0

Re: OS dev: Procedure that ends a task.

Assembly Syntax (Toggle Plain Text)
  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:
Assembly Syntax (Toggle Plain Text)
  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.
Reputation Points: 36
Solved Threads: 19
Junior Poster
NotNull is offline Offline
198 posts
since Oct 2008
Sep 29th, 2009
0

Re: OS dev: Procedure that ends a task.

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.
Reputation Points: 36
Solved Threads: 19
Junior Poster
NotNull is offline Offline
198 posts
since Oct 2008
Sep 29th, 2009
0

Re: OS dev: Procedure that ends a task.

Thanks very much notnull. But i still don't understad how to make from all that a procedure that ends a task.
Reputation Points: 10
Solved Threads: 3
Junior Poster
Alex_ is offline Offline
175 posts
since Jun 2008
Sep 29th, 2009
1

Re: OS dev: Procedure that ends a task.

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:
Assembly Syntax (Toggle Plain Text)
  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.
Reputation Points: 36
Solved Threads: 19
Junior Poster
NotNull is offline Offline
198 posts
since Oct 2008
Oct 29th, 2009
0
Re: OS dev: Procedure that ends a task.
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
Reputation Points: 10
Solved Threads: 3
Junior Poster
Alex_ is offline Offline
175 posts
since Jun 2008

This thread is more than three months old

No one has posted to this discussion for at least three months. Please let old threads die and do not reply to them unless you feel you have something new and valuable to contribute that absolutely must be added to make the discussion complete. Otherwise, please start a new thread in this forum instead.
Message:
Previous Thread in Assembly Forum Timeline: passing command line parameters mips
Next Thread in Assembly Forum Timeline: Flags used to test conditional jumps...





About Us | Contact Us | Advertise | Acceptable Use Policy
Forum Index | Build Custom RSS Feed


Follow us on Twitter


© 2011 DaniWeb® LLC