Skip to content

Latest commit

 

History

History
204 lines (145 loc) · 14.3 KB

README.md

File metadata and controls

204 lines (145 loc) · 14.3 KB

views

Welcome Badge Welcome Welcome Welcome Welcome

🤔 Why Assembly?

  • Why would anyone learn that language, which is hard to learn, write, debug & maintain.

  • Why would anyone learn that language, which is different for different hardware & architecture.

  • Why would anyone learn that language, which is not used in any modern programming language, operating system, compiler.

Great! You are reading this means that you are:

  1. Student being forced to learn assembly.

  2. Student who wants to learn assembly for fun.

  3. You are just exploring this stuff.

  4. You have interest in learning assembly.

  5. You want to become hacker, cracker, computer scientist, computer engineer, computer architect, computer technician.

Drawbacks of Assembly:

  1. Assembly is hard to learn, read, understand, write, maintain, debug and explain to others.

  2. It is different for different hardware & architecture.

  3. For speed & efficiency, we use better algorithms & improved compiler technology.

Benefits of Assembly:

But on the other side, assembly language gives you more speed, space, capability and knowledge of your hardware. That the reason why GOAT programmer Chris Sawyer able to run such resource intensive game RollerCoaster Tycoon on an old processors. So, the benefits are:

  1. You will understand how computers work.

  2. You wlll understand how operating system, CPU, memory, cache, register, instruction works.

  3. You will understand the computer architecture.

  4. You want to write efficient code.

  5. You want complete control of your computer.

  6. You love binary (you are not human).


🌏 Contributors:

This repository would not be possible without the help of the following people:


🤑Resources:

Here are some resources that you can use to learn assembly language:

If you want to write assembly language for x86 architecture, you can use the following assemblers:

The offical/notes documentation of x86 assembly language is available here.

  • TASM (Turbo Assembler)

  • MASM (Microsoft Macro Assembler)

  • FASM (Flat Assembler)

  • GAS (GNU Assembler)

  • NASM (Netwide Assembler)

  • YASM (Yet Another x86 Assembler)

If you want to write assembly language for MIPS architecture, you can use the following assemblers:

If you want to write assembly language for ARM architecture, you can use the following assemblers:

If you want to write assembly language for RISC-V architecture, you can use the following assemblers:

  • The offical documentation of RISC-V assembly language is available here.

If you want to write assembly language for 8088 architecture

  • Then you can use 8088 assembly language. The offical documentation of 8088 assembly language is available here.

If you want to write assembly language for Apple ARM architecture

  • The official documentation of ARM architecture is available here.

  • Then you can use Apple ARM assembly language. The offical documentation of Apple ARM assembly language is available here.

  • There is cool GitHub repository for Apple ARM assembly language. The GitHub repository is available here.


📺 8088 Assembly Language Video Tutorials:

  • Belal Hashmi video lectures available here.

  • Video lectures of Mohammad Nauman availabe here.

  • Video lectures by Malik Shahzaib available here.


Mr Belal Hashmi

📚 Book for 8088 Assembly Language:

  1. Handbook of Belal Hashmi available here.
  2. Assembly Language for x86 Processors by Kip R. Irvine.
  3. Assembly language step by step by Jeff Duntemann.
  4. Computer organization and Architecture by William Stallings.

🛠️ Setup and Installation of 8088 Assembler and Simulator:

The procedure is same for major operating systems like Windows, Linux, MacOS, etc.

  • Download the DOSBOX from the following link:

    • DOSBOX

    • On debian based linux distributions like ubuntu, you can install the DOSBOX using the following command:

      sudo apt install dosbox
      • Or, you can install the fork of DOSBOX project DOSBox-X, (which was mainatined by Snapcrafters community) using the following command:
        sudo apt install dosbox-x
    • If you are on Windows, then you can install the DOSBOX using the following command from PowerShell or Command Prompt as Administrator using Chocolatey package manager:

      choco install dosbox
      • Or you can use winget-cli package manager:
        winget install -e --id DOSBox.DOSBox
    • If you are on MacOS, then you can install the DOSBOX using the following command from Terminal using Homebrew ( free and open-source software package management system for macOS and Linux):

      brew install dosbox

Then you can use the following procedure to use the 8088 Assembler and Simulator:

  1. 8088 Assembler and Simulator is available here.

  2. Otherwise, If you have git installed, then you can clone the repository using the following command:

    git clone https://github.com/MahadMuhammad/Learn-Assembly-The-Hard-Way.git
  3. Or, you can download the zip file from the GitHub repository main page.

  4. Extract the zip file.

  5. Open the extracted folder.

  6. Open the folder.

  7. Open the 8088 Assembler and Simulator folder.

  8. Now, you can use the 8088 Assembler and Simulator DOSBOX.


💭 Logic Building and Problem Solving with Assembly Language:

Common Mistakes:

  • Many people start writing code without thinking about the logic.

  • They just start writing code.

  • My advice is that you should first think about the logic on paper, make an algorithm and then start writing code.

Logic Building:

  • If you are completely stuck on a problem and didn't think about the logic, then first write the code in the high level language like Python or C/C++ and then convert it into assembly language.

  • If you are unable to convert that high level langauge code into assembly language code, then use the compiler explorer to convert it into assembly language code.

Resolving Errors:

  • If you get an unkown error, then first try to understand that error.

  • Use assembly language debugger to debug your code.

  • Debug your code line by line.

  • If this doesn't work, then try taking help from your friends, seniors, teachers, etc.

  • Also if you are good at this then try helping your friends, juniors in solving their problems.


💖 Sponsorship:

  • Currently, we are not accepting any sponsership. But, if you want to sponsor this project, then you can contact us at Mahad.

  • Just pray for us and my contributors. And, we will be thankful to you.


📜 License: