4 ms·
OK. Depending on your programming background you're facing a steep learning curve. That's why I recommend a bottom up approach for you. First read "Code" by Ch
by pan69 17y ago
OK. Depending on your programming background you're facing a steep learning curve. That's why I recommend a bottom up approach for you.
First read "Code" by Charles Petzold. This book will get you "in the mood" and in the right frame of mind:
http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=sr_1_1?ie=UTF8&s=books&qid=1256345283&sr=8-1-spell http://www.amazon.com/Code-Language-Computer-Hardware-Softwa...
Then I suggest you pick up a good book on Assembler. This might be a good choice:
http://www.amazon.com/Professional-Assembly-Language-Programmer/dp/0764579010/ref=pd_sim_b_2 http://www.amazon.com/Professional-Assembly-Language-Program...
Start writing some drivers for Linux. Like a memdrive or something. Do it all in Assembler! Oh, you need to read other books on how to do this...
Then pick up the K&R book on C. Now write your memdrive driver in C.
That should get you started. I think it will take you at least up to two years before you're passed the learning curve and to be comfortable with this level of programming.
Oh, you need to be willing to do it for the love of it because it's highly unlikely that you will make a living using these sort of technologies (nowadays).
Good luck!
PS: I miss the old days...
- hilarious 17y agoSounds good, thanks bro, interesting approach ;D
- jacquesm 17y agoI wouldn't start off by writing a driver in assembler, probably better to write it in C first, then use the -S flag to get the intermediate and study that until you drop.
- pan69 17y agoI can assure you that if you want to learn C AND Assembler and you start with C, you will never ever get to the Assembler bit. A memdrive isn't that difficult and if you never solve a 'real' problem, you never learn anything because you don't have to push yourself. Just my 2 cents...
- hilarious 17y agoWriting device drivers in C, and then using the -S flag ... have you seen the output gcc -S on Linux (Ubuntu) returns for a trivial hello world program? ;)
- jacquesm 17y agoSure. And for non-trivial programs as well. Low level assembly is what you want, that presumably includes interfacing with you favorite C code. Calling conventions, stack frames and so on. Besides, the boilerplate runtime stuff has nothing to do with writing kernel code, so a 'trivial hello world' program will have a lot of cruft added to it: .file "hello.c" .section .rodata .LC0: .string "helo, world!" .text .globl main .type main, @function main: leal 4(%esp), %ecx andl $-16, %esp pushl -4(%ecx) pushl %ebp movl %esp, %ebp pushl %ecx subl $20, %esp movl $.LC0, (%esp) call puts addl $20, %esp popl %ecx popl %ebp leal -4(%ecx), %esp ret .size main, .-main .ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3" .section .note.GNU-stack,"",@progbits that's not that bad. Note the stack frame alignment trick, the fact that 'printf' was specified in the source but puts is being called!
- ismarc 17y agoThe -S flag was invaluable for me when I was moving from C to assembly. Then again, I used it in an iterative fashion, do something simple -S, do the same thing -S -O1, -S -O2, -S O3, and then a spattering of the different optimization techniques to see how it converted the C to assembly. I miss those days (did I just admit to being old?).
- jacquesm 17y agoWell I'll admit it right along with you, I miss those days too. I think I must have coded myself to the moon and back by now if you'd print it all out on fanfold paper (in C, mostly), but the joy of getting a little OS to boot up from nothing is never going to pale in comparison to installing framework X and building some web-app. No matter how successful. Web-apps make substantially more $ though...