-
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:
-
Student being forced to learn assembly.
-
Student who wants to learn assembly for fun.
-
You are just exploring this stuff.
-
You have interest in learning assembly.
-
You want to become hacker, cracker, computer scientist, computer engineer, computer architect, computer technician.
-
Assembly is hard to learn, read, understand, write, maintain, debug and explain to others.
-
It is different for different hardware & architecture.
-
For speed & efficiency, we use better algorithms & improved compiler technology.
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:
-
You will understand how computers work.
-
You wlll understand how operating system, CPU, memory, cache, register, instruction works.
-
You will understand the computer architecture.
-
You want to write efficient code.
-
You want complete control of your computer.
-
You love binary (you are not human).
This repository would not be possible without the help of the following people:
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)
If you want to write assembly language for MIPS architecture, you can use the following assemblers:
-
The offical/notes documentation of MIPS assembly language is available here.
-
MARS (MIPS Assembler and Runtime Simulator)
-
QtSpim (QtSpim is a graphical user interface for the MIPS R2000 simulator SPIM.)
-
SPIM (SPIM is a MIPS32 simulator written in C by John E. Stone.)
-
QtMips (QtMips is a graphical user interface for the MIPS R2000 simulator SPIM.)
If you want to write assembly language for ARM architecture, you can use the following assemblers:
-
The offical documentation of ARM assembly language is available here.
-
ARMKeil (Keil is a software development environment for embedded software development.)
-
ARM GCC (The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages (libstdc++, libgcj, libobjc, libgfortran, libgo, libada, libffi, and libjava)).
-
ARM DS-5 (ARM Development Studio is a software development environment for embedded software development.)
If you want to write assembly language for RISC-V architecture, you can use the following assemblers:
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.
-
Belal Hashmi video lectures available here.
-
Video lectures of Mohammad Nauman availabe here.
-
Video lectures by Malik Shahzaib available here.
- Handbook of Belal Hashmi available here.
- Assembly Language for x86 Processors by Kip R. Irvine.
- Assembly language step by step by Jeff Duntemann.
- 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:
-
On debian based linux distributions like
ubuntu
, you can install theDOSBOX
using the following command:sudo apt install dosbox
- Or, you can install the fork of
DOSBOX
projectDOSBox-X
, (which was mainatined by Snapcrafters community) using the following command:sudo apt install dosbox-x
- Or, you can install the fork of
-
If you are on
Windows
, then you can install theDOSBOX
using the following command fromPowerShell
orCommand Prompt
asAdministrator
using Chocolatey package manager:choco install dosbox
- Or you can use winget-cli package manager:
winget install -e --id DOSBox.DOSBox
- Or you can use winget-cli package manager:
-
If you are on
MacOS
, then you can install theDOSBOX
using the following command fromTerminal
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:
-
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
-
Or, you can download the zip file from the GitHub repository main page.
-
Extract the zip file.
-
Open the extracted folder.
-
Open the
folder
. -
Open the
8088 Assembler and Simulator
folder. -
Now, you can use the 8088 Assembler and Simulator
DOSBOX
.
-
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.
-
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
orC/C++
and then convert it into assembly language. -
If you are unable to convert that
high level langauge
code intoassembly language
code, then use the compiler explorer to convert it into assembly language code.
-
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.
-
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.
- This project is licensed under the MIT License