AssemblyLanguage02

advertisement
II
Prof. Muhammad Saeed
1/27/2015
Computer Architecture & Assembly
Language
2
Fundamentals (recap)
 Number System
 Binary
 Octal
 Hexa
 Conversion into one another
 Binary Operations
Addition, Subtraction and Multiplication
AND, OR, XOR
COMPLEMENT, TWO’s COMPLEMENT
Set and Reset Bits
1/27/2015
Computer Architecture & Assembly
Language
3
Interrupts
An interrupt is a signal to the processor emitted by
hardware or software indicating an event that needs
immediate attention. An interrupt alerts the
to a high-priority condition requiring the interruption
of the current code the processor is executing. The
processor responds by suspending its current
activities, saving its state, and executing
a function called an interrupt handler (or an interrupt
service routine, ISR) to deal with the event. This
interruption is temporary, and, after the interrupt
handler finishes, the processor resumes normal
activities.
1/27/2015
Computer Architecture & Assembly
Language
4
Interrupt
1/27/2015
Computer Architecture & Assembly
Language
5
Interrupts
TYPES
Hardware interrupts are used by internal or external devices to
communicate that they require attention from the operating system.
Pressing a key on the keyboard or moving the mouse triggers hardware
interrupts that cause the processor to read the keystroke or mouse
position. Unlike the software type hardware interrupts
are asynchronous and can occur in the middle of instruction execution.
A software interrupt is caused either by an exceptional condition
in the processor itself, or a special instruction in the instruction
set which causes an interrupt when it is executed. The former is often
called a trap or exception and is used for errors or events occurring
during program. For example, if the processor's arithmetic logic unit is
commanded to divide a number by zero, this impossible demand will
cause a divide-by-zero exception. Computers often use software
interrupt instructions to communicate with the device drivers.
1/27/2015
Computer Architecture & Assembly
Language
6
Interrupts
 Interrupt Service Routine (ISR) or Interrupt handler:
Code used for handling a specific interrupt.
 Interrupt priority:
In systems with more than one interrupt inputs, some interrupts
have a higher priority than other. They are serviced first if multiple
interrupts are triggered simultaneously.
 Interrupt vector:
Code loaded on the bus by the interrupting device that contains
the Address (segment and offset) of specific interrupt service
routine.
 Interrupt Masking:
Ignoring (disabling) an interrupt
 Non-Maskable Interrupt (NMI):
Interrupt that cannot be ignored (power-down)
1/27/2015
Computer Architecture & Assembly
Language
7
The Intel x86 Vector Interrupts
8088/8086 processor as well as 80386/80486/
Pentium etc. processors operating in Real Mode
(16-bit operation)
 The processor uses the interrupt vector to determine the address of the
ISR of the interrupting device.
 The interrupt vector is a pointer to the Interrupt Vector Table.
 The Interrupt Vector Table occupies the address range from
00000H to 003FFH (the first 1024 bytes in the memory map).
 Each entry in the Interrupt Vector Table is 4 bytes long:
 The first two represent the offset address and the last two the
segment address of the ISR.
 The first 5 vectors are reserved by Intel to be used by the
processor.
 The vectors 5 to 255 are free to be used by the user.
1/27/2015
Computer Architecture & Assembly
Language
8
The Intel x86 Vector Interrupts
IP
Type-0
CS
Type-1
Interrupt Vector Table
•••••
8088/8086 processor as well as
80386/80486/ Pentium etc. processors
operating in Real Mode (16-bit
operation)
Type-255
003FFH
1/27/2015
Computer Architecture & Assembly
Language
9
Interrupt Vector Table – Real Mode
 Using the Interrupt Vector Table shown below, determine the address of
the ISR of a device with interrupt vector 42H.
 Answer: Address in table = 4 X 42H = 108H
 Offset Low = [108] = 2A,
Offset High = [109] = 33
 Segment Low = [10A] = 3C,
Segment High = [10B] = 4A
 Address = 4A3C:332A = 4A3C0 + 332A = 4D6EAH
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
00000
3C
22
10
38
6F
13
2C
2A
33
22
21
67
EE
F1
32
25
00010
.........
00100
11
...
4A
3C
...
33
32
...
3C
88
...
4A
90
...
AA
16
...
1A
44
...
1B
32
...
A2
14
...
2A
30
...
33
42
...
3C
58
...
4A
30
...
AA
36
...
1A
34
...
3E
66
...
77
00110
.........
00250
C1
...
00
58
...
10
4E
...
10
C1
...
20
4F
...
3F
11
...
26
66
...
33
F4
...
3C
C5
...
20
58
...
26
4E
...
20
20
...
C1
4F
...
3F
11
...
10
F0
...
28
F4
...
32
00260
.........
003E0
20
...
3A
4E
...
10
00
...
45
10
...
2F
50
...
4E
88
...
33
22
...
6F
38
...
90
10
...
3A
5A
...
44
38
...
37
10
...
43
4C
...
3A
55
...
54
14
...
54
54
...
7F
003F0
22
3C
80
01
3C
4F
4E
88
22
3C
50
21
49
3F
F4
65
1/27/2015
Computer Architecture & Assembly
Language
10
The Intel x86 Vector Interrupts
80386/80486/Pentium processors operating in
Protected Mode (32-bit operation)
 The interrupt vector is a pointer to the Interrupt Descriptor
Table.
 The Interrupt Descriptor Table can be located anywhere in
the memory.
 Its starting address is pointed by the Interrupt
Descriptor Table Register (IDTR).
 Each entry in the Interrupt Vector Table is 8 bytes long:
 Four bytes represent the 32-bit offset address, two
the segment selector and the rest information such as
the privilege level.
 The first 32 vectors are reserved by Intel to be used by the
processor.
 The vectors 33 to 255 are free to be used by the
user.
1/27/2015
Computer Architecture & Assembly
Language
11
The Intel x86 Vector Interrupts
The protected mode
interrupt descriptor
1/27/2015
7
Offset (A31 - A16)
6
5 PF
01110
4
00H
3
Segment Selector
2
1
Offset (A15 - A0)
0
Computer Architecture & Assembly
Language
12
Access Levels
1/27/2015
Computer Architecture & Assembly
Language
13
Language Fundamentals
† Identifiers
An identifier is a programmer-chosen name. It might
identify a variable, a constant, a procedure, or a code
label. There are a few rules on how they can be formed:
• They may contain between 1 and 247 characters.
• They are not case sensitive.
• The first character must be a letter (A..Z, a..z),
underscore (_), @ , ?, or $. Subsequent
characters may also be digits.
• An identifier cannot be the same as an assembler
reserved word.
1/27/2015
Computer Architecture & Assembly
Language
14
Language Fundamentals
† Data Types
1/27/2015
Computer Architecture & Assembly
Language
15
Language Fundamentals
† 8088 Data Type Directives
1/27/2015
Computer Architecture & Assembly
Language
16
Language Fundamentals
† Label
A label is an identifier that acts as a place marker for
instructions and data. A label placed just before an
instruction implies the instruction’s address. Similarly, a label
placed just before a variable implies the variable’s address.
There are two types of labels: Data labels and Code labels.
A data label identifies the location of a variable, providing a
convenient way to reference the variable in code.
Data Label: a1
BYTE 86 ( a1 is Data Label)
Code Label: again: mov eax, 100h (again is Code Label)
1/27/2015
Computer Architecture & Assembly
Language
17
Language Fundamentals
† Directive And Instruction
Directive instructs assembler how to assemble a
program, in other word it is an instruction for the
assembler whereas assembly Instruction is for the
processor and it is converted to machine code.
Directive is not converted to machine code.
Directives do not execute at runtime, but they let
you define variables, macros, and procedures. They
can assign names to memory segments and perform
many other housekeeping tasks related to the
assembler.
Directives: INCLUDE (INCLUDE windows.inc, INCLUDELIB
windows.lib), .MODEL,.DATA, .CODE, WORD, etc.
1/27/2015
Computer Architecture & Assembly
Language
18
Language Fundamentals
† Defining Data
a1
a2
a3
a4
a5
a6
a7
a8
quote
1/27/2015
BYTE
BYTE
BYTE
BYTE
BYTE
SBYTE
SBYTE
SBYTE
BYTE
BYTE
BYTE
86
‘K’
“Welcome to Dept. of Comp. Sc. & IT”,0
255
?
-128
127
0, 20, 50, -25, 100
“There are no tales”
“ finer than those”, 0dh, 0ah
“created by life itself”,0dh, oah,0
Computer Architecture & Assembly
Language
19
Language Fundamentals
† Defining Data (ARRAYS)
Array1
Array2
Array3
BYTE 10
WORD 20
BYTE 10
DUP(?)
DUP(0)
DUP(‘COMPUTER’)
† Segments
 Stack
 Data
 Code
(.stack 1024)
(.data)
(.code)
† Comments
single line comment starts with “;” and the block comment
is used as, COMMENT ! ……..
………………….. ! (! Character can be replaced by & etc.)
1/27/2015
Computer Architecture & Assembly
Language
20
Fundamentals
† Little-Endians
x86 processors store and retrieve data from
memory using little-endian order(low to high). The least
significant byte is stored at the first memory address
allocated for the data. The remaining bytes are stored in
the next consecutive memory positions. The doubleword
12345678h is stored as given in the opposite figure.
† Big-Endians
Some other computer systems use big-endian order
(high to low). Figure on the right shows the same
example of 12345678h stored in big-endian order
1/27/2015
Computer Architecture & Assembly
Language
21
Memory Addressing
1/27/2015
Computer Architecture & Assembly
Language
22
Language Fundamentals
1st Program
.586
.MODEL flat, stdcall
option casemap :none
includeD:\msaeed\academic\assemblylanguage\masm32\include\windows.inc
includeD:\msaeed\academic\assemblylanguage\masm32\include\kernel32.inc
includeD:\msaeed\academic\assemblylanguage\masm32\include\user32.inc
includelibD:\msaeed\academic\assemblylanguage\masm32\lib\kernel32.lib
includelibD:\msaeed\academic\assemblylanguage\masm32\lib\user32.lib
.DATA
WindowTitle
Message
BYTE
BYTE
“Greetings",0
“Hello, World",0
.CODE
main:
invoke MessageBox, NULL, ADDR Message, ADDR WindowTitle, MB_OK
invoke ExitProcess, eax
end main
1/27/2015
Computer Architecture & Assembly
Language
23
Language Fundamentals
† MOV
MOV
MOV
MOV
MOV
MOV
reg, reg
mem, reg
reg, mem
mem, imm
reg, imm
† MOVZX
MOVZX reg32, reg/mem8
MOVZX reg32, reg/mem16
MOVZX reg16, reg/mem8
† MOVSX
MOVSX reg32, reg/mem8
MOVSX reg32, reg/mem16
MOVSX reg16, reg/mem8
1/27/2015
Computer Architecture & Assembly
Language
24
Language Fundamentals
† XCHG
XCHG reg, reg
XCHG reg, mem
XCHG mem, reg
† INC, DEC
INC reg/mem
DEC reg/mem
The Overflow, Sign, Zero, Auxiliary Carry, and Parity
flags are changed according to the value of the
destination operand.
† ADD, SUB
ADD dest, source The Carry, Zero, Sign, Overflow, Auxiliary Carry, and
SUB dest, source Parity flags are changed according to the value that is
placed in the destination operand.
† NEG
NEG reg
NEG mem
1/27/2015
The Carry, Zero, Sign, Overflow, Auxiliary Carry, and
Parity flags are changed according to the value that is
placed in the destination operand.
Computer Architecture & Assembly
Language
25
Language Fundamentals
Data-Related Operators and Directives
 The OFFSET operator returns the distance of a variable from the
beginning of its enclosing segment.
 The PTR operator lets you override an operand’s default size.
 The TYPE operator returns the size (in bytes) of an operand or of
each element in an array.
 The LENGTHOF operator returns the number of elements in an
array.
 The SIZEOF operator returns the number of bytes used by an array
initializer.
 The LABEL directive provides a way to redefine the same variable
with different size attributes.
Language Fundamentals
Language Fundamentals
END
Download