954,479 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

using in out for file io assembly

hi I have been looking around for a good file io tutorial and I cant find any. It is simple enough to me the process, mov dx,043h mov al,54 out dx,al etc. but i have no idea which ports go to where or how to write to a hard disk or floppy drive etc. how do i find out which ports map to where?

maf5693
Newbie Poster
15 posts since Jan 2010
Reputation Points: 35
Solved Threads: 0
 

You're using 80x86 assembly language, and I'm assuming you're using a PC as a target platform.

Under DOS the ports are accessible, under Win32, pretty much not, unless Win98 or earlier.

Web Search PC bios, DOS interrupts, etc.

I wouldn't just be throwing values and random ports. I know one very early computer (though I think it was an 8080) that used I/O ports to control the high voltage circuit on the built in monitor, and the wrong value would blow the circuitry! But I digress.

You have the basic idea of value to port.


forms:

; OUT #8, AL/AX,EAX,RAX
  out 045h,al

; OUT DX,AL/AX/EAX/RAX
  out dx,al

; String based
; these are only efficient for repeat counts of 64 or more.

;  OUTSX
  outsb           ; Output 8 bits    
  outsw           ; Output 16 bits   
  outsd           ; Output 32 bits   

  mov ecx,5
rep outsb


; these are similar to a LODS (String Load) instruction
  outs dx,byte ptr ds:[esi]
  outs dx,word ptr ds:[esi]
  outs dx,dword ptr ds:[esi]
wildgoose
Practically a Posting Shark
896 posts since Jun 2009
Reputation Points: 546
Solved Threads: 99
 

alright but the problem is I am trying to make a new Operating system(as a learning experience) and I have began work on a filesystem and file structure which I have mapped out on paper. The problem is, I have no idea which i/o ports map to where or where I can find that out-i have looked anywhere. So I guess my question is, how can I figure out which i/o ports go to where?

maf5693
Newbie Poster
15 posts since Jan 2010
Reputation Points: 35
Solved Threads: 0
 

You could install Windows and go through the device manager and view the Input Output port mappings. Device manufacturers know how they've mapped their ports and so do their drivers.

You can also get the IRQ's.

Or use old hardware, and review the original PC Bios as well as peripheral cards such as RS-232, video, etc.

wildgoose
Practically a Posting Shark
896 posts since Jun 2009
Reputation Points: 546
Solved Threads: 99
 

what are IRQ's? and also I downloaded Ralf Wolf's interrupt list from 2000 im not sure how up to date it is but it is VERY complete and thorough, and includes memory-mapped i/o as well as actual port maps---However, this has led me to a fork in my OS creating career-should I use BIOS interrupts(which seem uniform from bios to bios) or i/o ports(which may or may not be, I'm not entirely sure at this point?). I/O ports have seemed to be faster on all the accounts I have seen, but much more complicated

maf5693
Newbie Poster
15 posts since Jan 2010
Reputation Points: 35
Solved Threads: 0
 

IRQ Interrupt Request

IRQ 0...F are reserved on a PC Bios and typically shared by multiple devices.

wildgoose
Practically a Posting Shark
896 posts since Jun 2009
Reputation Points: 546
Solved Threads: 99
 

thank you, you have been extremely helpful! Also, I was wondering, could you point to a good tutorial for writing hardware interrupt handlers in assembly?(preferably in fasm or nasm syntax) Thanks!

maf5693
Newbie Poster
15 posts since Jan 2010
Reputation Points: 35
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You
View similar articles that have also been tagged: