How a computer works?
Hello Folks.
In your opinion which one of below books is good for learning how a computer works really : 1- Digital Design and Computer Architecture, Second Edition by David Harris and Sarah Harris 2- Inside the Machine: An Illustrated Introduction to Microprocessors and Computer Architecture by Jon Stokes 3- Structured Computer Organization (5th Edition) by Andrew S. Tanenbaum Thank you. |
Edit
|
All of these books, while very excellent books, are all very intense. Indeed, we'd all like to know what your objective is. (And a worthy objective it is!) :) Have you explored The World Wide Web for introductory material?
|
Code, by Charles Petzold.
|
I would recommend the 3rd one, Structured Computer Organization. I read it for my semesters, Good book.
|
I'd like to join sundialsvcs and ask just what the goal is. We could explay up to any technical level how the thing works, but...will that answer your question? :)
|
Quote:
Thanks very much for your guidance. I want to know how a computer works really and my goal is learning assembly language. In your opinion, is "Digital Design and Computer Architecture" good? |
Edit
|
If you want to learn assembly lang then start with 8085 or may be 8086 microprocessors books.
|
Quote:
|
Quote:
Experts don't try to understand how something like a computer really works. An expert really understands a narrow sub topic within that, then has a general grasp of the surrounding sub topics and some vague idea about the challenges and results of the distant sub topics. Quote:
How you learn assembly language depends a lot on why you want to learn it. If you are (or intend to be) a software engineer, a very good reason to learn assembly language is to improve your abilities at designing and debugging software in high level languages. Even if you will never include any assembly source code in a final project, knowing how you could do that is very valuable for developing high level language code (especially C++). If that is your purpose for leaning assembly language, then you should focus on learning a current CPU architecture (almost certainly X86-64) and on learning assembly programming in the form of functions called via a C interface. Most books, tutorials, online advise, etc. on learning assembly focus on 1) Obsolete architectures, in theory because they are simpler, but really because they author's skills are obsolete. 2) Either whole programs in assembly or even stand-alone (from boot) code in assembly without benefit of an OS. Many combine a little of (1) and (2) to focus on assembly programs in 16-bit x86 code to run under an MS-DOS emulator. If you want to learn assembly in order to better understand current high level language software development, all the above is a massive waste. For some other purposes for learning assembly, some of the above isn't as totally wasted, but it still isn't necessarily a good place to start. For almost any reason for learning assembly, starting with a focus on assembly functions callable from C is a more gentle introduction without wasting time of useless side topics. Quote:
You learn to program by programming, not by reading about it. A good online tutorial would help, but I don't know of one. As I said above, most focus on a really stupid way of introducing assembly. Quote:
When you (a beginner) write a program, be prepared to get the program wrong many times, including sometimes hanging it in a way that needs a task manager or kill command (etc.) to stop it. But that is just the program, not the session. MS-DOS is obsolete. A real OS protects the rest of your session from almost all programming accidents and protects itself from all of them (unless you abuse root privileges). Quote:
I tried to get my sons (while they were in Boy Scouts) to learn to start a camp fire with a flint. I also taught them quite a bit of computer programming and never any 16-bit x86 (much less 8085). Starting a camp fire with a flint is more worthwhile to learn today than 16-bit x86 asm. |
Quote:
Hello. I'm grateful really for your useful guidance. I want to Learn assembly langauge for Reverse engineering, Do you have any idea? |
Edit
|
Quote:
|
Quote:
In a real OS, such as Linux, the OS portion of each process's address space is protected against access. Whether you are using C or asm, you could execute an instruction telling the CPU to overwrite a byte of the OS, and that instruction would seg fault without actually overwriting any of the OS. |
Quote:
If you still want to learn asm for reverse engineering, then the choice of architecture is determined by what you want to reverse engineer. Also the choice of what approach you take to asm is influenced by what you want to reverse engineer. If you want to reverse engineer any kind of ordinary programs, then you need to start with learning how to write asm functions callable from C (as I suggested earlier). Some asm tutorials start from boot code, which is a very specialized topic and useless if you want to reverse engineer anything other than boot code. Most other asm tutorials start with tiny whole programs, which also involves a lot of specialized, but otherwise useless, information. Before you understand those topics, you might imagine reverse engineering whole programs requires that knowledge. But it actually doesn't. The techniques used when the whole program must be asm don't appear anywhere in the compiled code when the main program is in a high level language. Something similar might appear in the compiled code of the basic system .so or .a files (.lib or .dll in Windows) the executable was linked against. But you don't need to reverse engineer those. You have their C source code. I did a quick search for my previous replies to related questions that I think are relevant for you. I found this post http://www.linuxquestions.org/questi...9/#post4661549 I found a whole lot of useful posts in this thread http://www.linuxquestions.org/questi...rn-asm-793174/ |
Quote:
|
Quote:
If you learn x86-64 quickly, you can go back and learn the differences between that and 32-bit. Both are still relevant for malware analysis if you learn a lot soon. Beyond that, what I said earlier still applies. For understanding most malware the first and most important aspect of asm to understand is the mechanism by which one function calls another, including how parameters are passed, how local variables are allocated by the new function, what registers are preserved, how results are returned, and how everything unwinds correctly (or not) during the return. |
Reverse engineering? I haven't read this book, but gets its fair share of recommendations: http://www.amazon.com/dp/0764574817
|
Edited stuff out - irrelevant ranting, not usefull for OP, sorry gang... :)
(excusing myself from this thread...) |
Thank you So much
|
Oh, heck ... maybe I'm just an old mainframe-junkie at heart who learned IBM Assembler early-on and did a lot of work with it ... if your brain is "wire"d the right way, computer hardware architecture (seen from software's point-of-view) can be interesting.
Especially since pocket-protectors come in lots of sexy colors! (So do nerdy glasses.) (what? what? why of course there is a "pocketprotectors.com"!) :hattip: |
Impossible Programs: a great lecture on some of computer science's most important subjects - Boing Boing
Quote:
|
All times are GMT -5. The time now is 12:08 AM. |