What is Assembly Language?
Assembly Language (AL) is one line of code translates to one machine instruction. Every computer has a microprocessor that achieves the computer’s arithmetical, logical, and control actions. ALs are NOT machine-independent that is each different machine or processor has a different machine languages. Any particular machine can have more than one assembly language. This is a low-level language that represents various instructions in symbolic code and a clearer form. A processor understands only machine language instructions, which are strings of 1’s and 0’s. Each set of processors has own instructions set for handling numerous operations such as getting input from keyboard, displaying information on screen and performing many works where each set of instructions are named ‘machine language instructions’.
Assembly language makes one aware of:
- How OS, processor, and BIOS programs interface mutually;
- How data is represented in memory with other devices;
- How the processor accesses and executes instruction;
- How each instruction access to process data;
- How a program accesses external device
Assembly Language Advantages:
- The language requires less memory and execution time;
- It allows hardware-specific complex jobs in an easier way;
- It is suitable for time-critical trades;
- It is most suitable for writing interrupt service routines along other memory resident programs.
A computer Hardware Basic Features
The main internal hardware of a PC consists of processor, memory, and registers. Registers are processor components where data and address are hold. To execute a program, the system copies it from the external device into the internal memory. The processor executes the program instructions.
The fundamental unit of computer storage is a bit; it could be ON (1) or OFF (0) and a group of 8 bits and makes a byte on most of the modern computers.
The parity bit is used to make the number of bits in a byte odd. If the parity is even, the system assumes that there had been a parity error (though rare), which might have been caused due to hardware fault or electrical disturbance.
The processor supports data sizes:
- Word: Contain a 2-byte data item
- Doubleword: Consist of a 4-byte (32 bit) data item
- Quadword: Contain an 8-byte (64 bit) data item
- Paragraph: Have a 16-byte (128 bit) area
- Kilobyte: Have 1024 bytes
- Megabyte: Have 1,048,576 bytes
Binary Number System
Every number system uses positional notation. Each position is power of the base, which is 2 for binary number system, and these powers begin at 0 and increase by 1.
The positional values for an 8-bit binary number, with all bits are set ‘ON’
Bit value | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Position value as a power of base 2 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
Bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
The value of a binary number is based on the presence of 1 bits and their positional value. So, the value of a given binary number is:
1 + 2 + 4 + 8 +16 + 32 + 64 + 128 = 255
which is same as 28 – 1.
Hexadecimal Number System
Hexadecimal number system uses base 16 range from 0 to 15 each digit. The letters A through F is represented corresponding to decimal values 10 through 15.
Decimal number | Binary representation | Hexadecimal representation |
0 | 0 | 0 |
1 | 1 | 1 |
2 | 10 | 2 |
3 | 11 | 3 |
4 | 100 | 4 |
5 | 101 | 5 |
6 | 110 | 6 |
7 | 111 | 7 |
8 | 1000 | 8 |
9 | 1001 | 9 |
10 | 1010 | A |
11 | 1011 | B |
12 | 1100 | C |
13 | 1101 | D |
14 | 1110 | E |
15 | 1111 | F |
To convert a binary number to its hexadecimal equivalent, break it into groups of 4 consecutive groups each, starting from the right, and write those groups over the corresponding digits of the hexadecimal number.
Example − Binary number 1000 1100 1101 0001 is equivalent to hexadecimal – 8CD1
To convert a hexadecimal number to binary, just write each hexadecimal digit into its 4-digit binary equivalent.
Example − Hexadecimal number FCD7 is equivalent to binary – 1111 1100 1101 0111
Binary Arithmetic
The following table illustrates four simple rules for binary addition −
(i) | (ii) | (iii) | (iv) |
1 | |||
0 | 1 | 1 | 1 |
+0 | +0 | +1 | +1 |
=0 | =1 | =10 | =11 |
Rules (iii) and (iv) show a carry of a 1-bit into the next left position.
Example
Decimal | Binary |
60 | 00111100 |
+42 | 00101010 |
102 | 01100110 |
A negative binary value is expressed in two’s complement notation. According to this rule, to convert a binary number to its negative value is to reverse its bit values and add 1.
Example
Number 53 | 00110101 |
Reverse the bits | 11001010 |
Add 1 | 00000001 |
Number -53 | 11001011 |
To subtract one value from another, convert the number being subtracted to two’s complement format and add the numbers.
Example
Subtract 22 from 33
Number 33 | 00100001 |
Number 22 | 00010110 |
Reverse the bits of 42 | 11101001 |
Add 1 | 00000001 |
Number -22 | 00010110 |
33 – 22 = 11 | 00001011 |
Overflow of the last 1 bit is lost.
Addressing Data in Memory
The processor which the controls process of execution of instructions is denoted as the fetch-decode-execute cycle or the execution cycle. It consists of three continuous steps:
- Fetching the instruction from memory
- Decoding or identifying the instruction
- Executing the instruction
The processor may access one or more bytes of memory at a time. Let us consider a hexadecimal number 0225H. This number will require two bytes of memory. The high-order byte or most significant byte is 02 and the low-order byte is 25. The processor stores data in reverse-byte sequence, i.e., a low-order byte is stored in a low memory address and a high-order byte in high memory address. So, if the processor brings the value 0225H from register to memory, it will transfer 25 first to the lower memory address and 02 to the next memory address.
There are two kinds of memory addresses:
- Absolute address: It is a direct reference of specific location.
- Segment address (or offset) : It is a starting address of a memory segment with the offset value.