Chapter 3 Elements of Assembly Language. 3.1 Assembly Language Statements.
Assembly language part I
-
Upload
nu-the-open-security-community -
Category
Education
-
view
1.179 -
download
2
description
Transcript of Assembly language part I
![Page 1: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/1.jpg)
Assembly Language
By Mohammed Imran
Get your hands dirty with
PART- I
@imran_naseem
![Page 2: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/2.jpg)
If I say Assembly is cool !
![Page 3: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/3.jpg)
Seriously ?
People say
![Page 4: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/4.jpg)
And some go even further..
![Page 5: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/5.jpg)
![Page 6: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/6.jpg)
But you could do some Amazing things
![Page 7: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/7.jpg)
![Page 8: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/8.jpg)
![Page 9: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/9.jpg)
![Page 10: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/10.jpg)
Create faster programsNo, you cant fly cars with assembly :)
![Page 11: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/11.jpg)
Fly these
![Page 12: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/12.jpg)
![Page 13: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/13.jpg)
Lets start
![Page 14: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/14.jpg)
![Page 15: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/15.jpg)
CPU can't understand c, java or assembly.
![Page 16: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/16.jpg)
hence we have compilers, assembers to convert high level code to machine code.
![Page 17: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/17.jpg)
![Page 18: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/18.jpg)
![Page 19: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/19.jpg)
Hello.c#include <stdio.h>#define STRING "Hello World"int main(void){/* Using a macro to print 'Hello World'*/printf(STRING);return 0;}
![Page 20: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/20.jpg)
You can see these intermediate stages using gcc command
![Page 21: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/21.jpg)
gcc commands gcc -Wall -save-temps hello.c -o hello
The above command saves temporary files generated during
creation of binary file hello in the current directory
![Page 22: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/22.jpg)
ls hello.* hello.i ; Preprocessed file
hello.s ; assembly file
hello.o ; object file
hello ; binary file
![Page 23: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/23.jpg)
Demo
![Page 24: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/24.jpg)
An assembly language is a low-level programming language for a computer, or other programmable device, in which there is a very strong (generally one-to-one) correspondence between the language and the architecture's machine code instructions.
“
”
What is Assembly language ?
![Page 25: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/25.jpg)
Assembly is easy to learn, but hard to master!“ ”
![Page 26: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/26.jpg)
Assembly acts as bridge
Machine Language High level language
Assembly Language
![Page 27: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/27.jpg)
Machine code
10110000 01100001
This is how, an instruction in machine language looks like
![Page 28: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/28.jpg)
And code is parsed like.
10110000 01100001
Instruction Register Register/Operand
![Page 29: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/29.jpg)
Machine code in hex
10110000 01100001
B0 61 (in hex)
The above machine code representedIn hexadecimal format for ease.
![Page 30: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/30.jpg)
Assembly representation
10110000 01100001
B0 61 (in hex)
MOV AL, 61h
The above machine code representedIn assembly language code
![Page 31: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/31.jpg)
MOV AL, 61h ; Load AL with 97 decimal (61 hex)
What does it mean ?
Opcodes Operands
![Page 32: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/32.jpg)
Lets see how it all fits together
![Page 33: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/33.jpg)
System organization
CPU
Memory
IO
Bus
![Page 34: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/34.jpg)
CPU contains registers, flags and ALU to do math operations.
![Page 35: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/35.jpg)
Typical CPU Contents
Arithmetic and Logical Unit
Registers
flags
Segment registers
CPU
![Page 36: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/36.jpg)
Registers are like variables in C, used to store and compute data
temporarily.
![Page 37: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/37.jpg)
Registers
SP
SI DI
AX, BX, CX, DX
IP
General-purpose registers for storing numbers.
![Page 38: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/38.jpg)
Registers
SP
SI DI
AX, BX, CX, DX
IP
General-purpose registers for storing numbers.
Source and destination data index registers. memory pointers for retrieving and storing data.
![Page 39: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/39.jpg)
Registers
SP
SI DI
AX, BX, CX, DX
IP
General-purpose registers for storing numbers.
Source and destination data index registers. memory pointers for retrieving and storing data.
Stack pointer, used to store parameters and variables on the stack.
![Page 40: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/40.jpg)
Registers
SP
SI DI
AX, BX, CX, DX
IP
General-purpose registers for storing numbers.
Source and destination data index registers. memory pointers for retrieving and storing data.
Stack pointer, used to store parameters and variables on the stack.
Instruction pointer, points to next instruction
to execute.
![Page 41: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/41.jpg)
Also depending on the cpu arch, the register name and size varies.
![Page 42: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/42.jpg)
Registers sizesAX, BX, CX, DX 16 bit CPU Architecture
32 bit CPU ArchitectureEAX, EBX, ECX, EDX
RAX, RBX, RCX, RDX 64 bit CPU Architecture
![Page 43: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/43.jpg)
For Handling special sections we have segment registers
![Page 44: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/44.jpg)
Segments Code Segment (CS)
Place where assembly code is stored
Data Segment (DS)
Stack Segment (SS)
Extra Segment (ES)
Place where initialized data is stored
Place where stack data is stored
Place kept for extra data handling
![Page 45: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/45.jpg)
Memory management
![Page 46: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/46.jpg)
Every process in memory thinks its the only process in the system
![Page 47: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/47.jpg)
Memory is laid out in physical ram according to virtual memory.
![Page 48: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/48.jpg)
Virtual memory model
1234h
4567h
1234h
4567h
Process1
Process2
Process3
![Page 49: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/49.jpg)
Process in memory
unused
heap
.bss
.data
.text
Stack
Place to store code
Place to store initialized data
Place to store un initialized data
Place to store dynamic data
Place to store func variables & params
![Page 50: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/50.jpg)
Also we need to understand how stack works
![Page 51: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/51.jpg)
Also we need to understand how stack works
![Page 52: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/52.jpg)
Stack (LIFO)
Lower Address
Higher Address
Grows DownwardsESP
0x12345678
0x12345690
![Page 53: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/53.jpg)
Stack (LIFO)- Push
Lower Address
Higher Address
Push ABCDEF00ESP
0x12345678
0x12345690
0xABCDEF00
![Page 54: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/54.jpg)
Stack (LIFO)- Push
Lower Address
Higher Address
Push ABCDEF00
ESP
0x12345678
0x12345690
0xABCDEF00ESP = ESP-1
![Page 55: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/55.jpg)
Stack (LIFO)- POP
Lower Address
Higher Address
POP
ESP
0x12345678
0x12345690
0xABCDEF00
![Page 56: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/56.jpg)
Stack (LIFO)- POP
Lower Address
Higher Address
POPESP
0x12345678
0x12345690
ESP = ESP+1
![Page 57: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/57.jpg)
Instruction set● Mov
● Add/sub/multiply/divide
● cmp
● Jmp/jne/jz/je/jnz/jg/jl
● int
![Page 58: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/58.jpg)
Move statement● Move statement moves data from one place
to another
![Page 59: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/59.jpg)
Before and After MoveBefore Move
After Move
AX=30h BX=10h
AX=10h BX=10hAX=10h BX=10h
INSTRUCTION: MOV AX,BX
![Page 60: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/60.jpg)
ExamplesMove AX, BX ; move bx content to AX
Move AL, 06h ; move 06h into AL
Move AX, [BX]; If BX=90, move content present in memory 90 to AX.
![Page 61: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/61.jpg)
Add/Sub/Multiply/Divide● Adds, subtracts, multiplies and divides the
numbers and stores it in the AX registers and these instructions can affects flags.
![Page 62: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/62.jpg)
Examples● Add AX,05h – Add 05h to AX and stores result
back in AX● Add AX,BX - Add contents of BX and AX, store
result in AX. Affects flags● Sub AX,05h – Subtract 05h from AX, store
result in AX. Affects flags
![Page 63: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/63.jpg)
Compare statement● Cmp CX,05h – Compare CX with 05h, results
will be reflected in special registers called flags.
![Page 64: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/64.jpg)
Examples● Cmp CX, 05h; if cx=2, then Negative flag is
set.
![Page 65: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/65.jpg)
Jump instructions● Jump to a different part of the code.● If label is given then jumps to label section● Conditional jump happens based on flags.
![Page 66: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/66.jpg)
Examples● Jnz loop; jump to label loop if zero flag is not
zero● Jmp loop; jump to label loop part of the code● Jz loop ; jump to label loop if zero flag is set
![Page 67: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/67.jpg)
Interrupt instruction● Interrupts the CPU and jumps to the location
given.
![Page 68: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/68.jpg)
ExamplesInt 21h; calls the 21h OS routine
![Page 69: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/69.jpg)
To be continued in part II ...Part- II will cover Instruction set and other concepts in depth. This presentation is/was a teaser for the part II
![Page 70: Assembly language part I](https://reader034.fdocuments.us/reader034/viewer/2022042714/55669719d8b42a78708b4ef1/html5/thumbnails/70.jpg)
Credits● http://www.flickr.com/photos/yacknonchalant/5411017937/sizes/o/in/photostream/● http://www.flickr.com/photos/15923063@N00/496721450● All the icons are from The noun project● Assembly language primer for hackers
securitytube.net