assembly
Synopsis
Assembly language is a low-level programming language for a computer, or other programmable device, in which there is a very strong (but often not one-to-one) correspondence between the language and the architecture’s machine code instructions. Each assembly language is specific to a particular computer architecture in use. In contrast, most high-level programming languages are generally portable across multiple architectures but require interpreting or compiling.
Assembly Language Instructions
Instruction | Description |
---|
ADD | Adds two operands |
ADC | Adds two operands with carry |
AND | Performs bitwise AND on two operands |
CALL | Calls a subroutine |
CBW | Converts byte to word |
CLC | Clears carry flag |
CMC | Complements carry flag |
CMP | Compares two operands |
CWD | Converts word to double word |
DAA | Adjusts after addition |
DAS | Adjusts after subtraction |
DEC | Decrements operand by 1 |
DIV | Divides two operands |
HLT | Halts the processor |
IDIV | Divides two signed operands |
IMUL | Multiplies two signed operands |
IN | Inputs a byte from a port into accumulator |
INC | Increments operand by 1 |
INT | Performs interrupt |
IRET | Returns from interrupt |
JA | Jumps if above (CF=0 and ZF=0) |
JAE | Jumps if above or equal (CF=0) |
JB | Jumps if below (CF=1) |
JBE | Jumps if below or equal (CF=1 or ZF=1) |
JC | Jumps if carry (CF=1) |
JCXZ | Jumps if CX register is 0 |
JE | Jumps if equal (ZF=1) |
Assembly Language Registers
Register | Description |
---|
AX | Accumulator |
BX | Base |
CX | Count |
DX | Data |
SI | Source Index |
DI | Destination Index |
BP | Base Pointer |
SP | Stack Pointer |
CS | Code Segment |
DS | Data Segment |
SS | Stack Segment |
ES | Extra Segment |
IP | Instruction Pointer |
FLAGS | Flags |
Assembly Language Directives
Directive | Description |
---|
DB | Defines a byte |
DW | Defines a word |
DD | Defines a double word |
DQ | Defines a quad word |
DT | Defines a ten byte |
DO | Defines a double quad word |
DDQ | Defines a double double quad word |
DDT | Defines a double ten byte |
EQU | Defines a constant |
END | Ends a program |
EXTERN | Declares an external variable |
GLOBAL | Declares a global variable |
INCLUDE | Includes a file |
INCBIN | Includes a binary file |
LABEL | Defines a label |
ORG | Defines an origin |
PROC | Defines a procedure |
REPT | Repeats a block of code |
SEGMENT | Defines a segment |
STRUC | Defines a structure |
SUBSTRUC | Defines a substructure |
ENDS | Ends a structure |
Assembly Language Macros
Macro | Description |
---|
%define | Defines a macro |
%macro | Defines a macro |
%endmacro | Ends a macro |
%rept | Repeats a block of code |
%endrept | Ends a repeat block |
%if | Defines an if statement |
%else | Defines an else statement |
%endif | Ends an if statement |
%include | Includes a file |
%error | Displays an error message |
%warning | Displays a warning message |
%line | Defines a line number |
%local | Defines a local variable |
%exitmacro | Exits a macro |
%exitrep | Exits a repeat block |
%exit | Exits a macro or repeat block |
%assign | Assigns a value to a variable |
%eval | Evaluates an expression |
%strlen | Returns the length of a string |
%substr | Returns a substring |
%substrcount | Returns the number of substrings |
%substrindex | Returns the index of a substring |
%substrreplace | Replaces a substring |
%substrsplit | Splits a string into substrings |
%substrtrim | Trims a string |
%substrtrimleft | Trims the left side of a string |
%substrtrimright | Trims the right side of a string |
Assembly Language Data Types
Data Type | Description |
---|
BYTE | 8-bit unsigned integer |
WORD | 16-bit unsigned integer |
DWORD | 32-bit unsigned integer |
QWORD | 64-bit unsigned integer |
TBYTE | 80-bit unsigned integer |
OWORD | 128-bit unsigned integer |
YWORD | 256-bit unsigned integer |
ZWORD | 512-bit unsigned integer |
Assembly Language Operators
Operator | Description |
---|
+ | Addition |
- | Subtraction |
* | Multiplication |
/ | Division |
& | Bitwise AND |
| | Bitwise OR |
^ | Bitwise XOR |
~ | Bitwise NOT |
<< | Bitwise left shift |
>> | Bitwise right shift |
== | Equality |
!= | Inequality |
< | Less than |
<= | Less than or equal |
> | Greater than |
>= | Greater than or equal |
&& | Logical AND |
|| | Logical OR |
! | Logical NOT |
? | Ternary operator |
Comment | Description |
---|
; | Comment |
// | Comment |
/* | Comment |
*/ | Comment |
Assembly Language Examples
Example | Description |
---|
MOV AX, 0x1234 | Moves 0x1234 into AX |
MOV [0x1234], 0x5678 | Moves 0x5678 into memory location 0x1234 |
ADD AX, BX | Adds the contents of BX to AX |
SUB AX, BX | Subtracts the contents of BX from AX |
INC AX | Increments AX by 1 |
DEC AX | Decrements AX by 1 |
MUL BX | Multiplies AX by BX |
DIV BX | Divides AX by BX |
AND AX, BX | Performs a bitwise AND on AX and BX |
OR AX, BX | Performs a bitwise OR on AX and BX |
XOR AX, BX | Performs a bitwise XOR on AX and BX |
NOT AX | Performs a bitwise NOT on AX |
SHL AX, 1 | Shifts AX left by 1 bit |
SHR AX, 1 | Shifts AX right by 1 bit |
CMP AX, BX | Compares AX and BX |
JZ 0x1234 | Jumps to 0x1234 if the zero flag is set |
JNZ 0x1234 | Jumps to 0x1234 if the zero flag is not set |
JA 0x1234 | Jumps to 0x1234 if the carry flag is set |