1. Trang chủ
  2. » Công Nghệ Thông Tin

8086 assembly language programming

46 419 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 46
Dung lượng 1,5 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Assembly language programming• Learning assembly language programming will help understanding the operations of the microprocessor • To learn: – Need to know the functions of various r

Trang 1

8086 Assembly Language

Programming

Week 4 – Overview of the x86 assembly language prgoramming

Trang 2

Assembly language programming

Learning assembly language programming will

help understanding the operations of the

microprocessor

To learn:

– Need to know the functions of various registers

– Need to know how external memory is organized and how it is addressed to obtain instructions and data

(different addressing modes)

– Need to know what operations (or the instruction set)

are supported by the CPU For example, powerful CPUs support floating-point operations but simple CPUs only support integer operations

Trang 3

How to learn programming

Logic thinking – programming is problem solving

so we must think logically in order to derive a

solution

Practice – write programs

Trang 4

Assembly Program

The native language is machine language (using

0,1 to represent the operation)

A single machine instruction can take up one or

more bytes of code

Assembly language is used to write the program

using alphanumeric symbols (or mnemonic), eg

ADD, MOV, PUSH etc.

The program will then be assembled (similar to

compiled) and linked into an executable program

The executable program could be com, exe, or

.bin files

Trang 5

Flow of program development

Program

.asm Object file.obj Executable file .exe

Trang 6

When the program is executed, then the value

B400 is read from memory, decoded and carry out the task

Trang 7

Assembly Program

Each instruction is represented by one assembly

language statement

The statement must specify which operation (opcode)

is to be performed and the operands

Eg ADD AX, BX

ADD is the operation

AX is called the destination operand

BX is called the source operand

The result is AX = AX + BX

• When writing assembly language program, you need

to think in the instruction level

Trang 8

In c++, you can do A = (B+C)*100

In assembly language, only one instruction per

statement

A = B ; only one instruction - MOVE

A = A+C ; only one instruction - ADD

A = A*100 ; only one instruction - Multiply

Trang 9

Format of Assembly language

General format for an assembly language statement

Start: Mov AX, BX ; copy BX into AX

Start is a user defined name and you only put in a

label in your statement when necessary!!!!

The symbol : is used to indicate that it is a label

Trang 10

8086 Software Model

Trang 11

Software model

stack, data, and extra

• When you write your assembly language program for an

8086, theoretically you should define the different

segments!!!

register: CS (code), SS (stack), DS (data), ES (extra)

make use of the proper segment register or index register when you want to access the memory

Trang 12

In assembly programming, you cannot operate on two memory locations in the same instruction

So you usually need to store (move) value of one

location into a register and then perform your

operation

After the operation, you then put the result back

to the memory location

Therefore, one form of operation that you will use very frequent is the store (move) operation!!!

And using registers!!!!!

Trang 13

In C++ A = B+C ; A, B, C are variables

In assembly language A,B, C representing memory locations so you cannot do A = B+C

– MOV AL, B ; move value of B into AL register

– ADD, AL, C ; do the add AL = AL +C

– MOV A, AL ; put the result to A

Trang 14

Data registers

registers but each of the registers also has special function Example

– AX is called the accumulator – to store result in arithmetic

operations

destination of an operand during an arithmetic, logic,

shift, or rotate operation

assumed, eg in I/O mapped input and output operations

Trang 15

Data register

In based addressing mode, base register BX is

used as a pointer to an operand in the current

data segment

CX is used as a counter in some instructions, eg CL contains the count of the number of bits by which the contents of the operand must be rotated or

shifted by multiple-bit rotate

DX, data register, is used in all multiplication and

division, it also contains an input/output port

address for some types of input/output operations

Trang 16

Pointer and index registers

Stack – is used as a temporary storage

Data can be stored by the PUSH instruction and

extracted by the POP instruction

Stack is accessed via the SP (Stack Pointer) and BP

(Base Pointer)

The BP contains an offset address in the current

stack segment This offset address is employed when using the based addressing mode and is commonly

used by instructions in a subroutine that reference

parameters that were passed by using the stack

Trang 17

Pointer and Index Register

Source index register (SI) and Destination index

register (DI) are used to hold offset addresses for use in indexed addressing of operands in memory

When indexed type of addressing is used, then SI

refers to the current data segment and DI refers to the current extra segment

The index registers can also be used as source or

destination registers in arithmetic and logical

Trang 18

as the sign-bit (0 for positive, 1 for negative)

128-bit data

• In 8086, only integer operations are supported!!!

Trang 19

A sample program

.code ; indicate start of code segment

.startup ; indicate start of program

Trang 20

Assembly programming

In general, an assembly program must include the code segment!!

Other segments, such as stack segment, data segment are not

compulsory

There are key words to indicate the beginning of a segment as

well as the end of a segment Just like using main(){} in C++

Programming

Example

DSEG segment ‘data’ ; define the start of a data segment

DSEG ENDS ; defines the end of a data segment

Segment is the keyword DSEG is the name of the segment

Similarly key words are used to define the beginning of a program,

as well as the end.

Trang 21

Assembly language programming

Example

CSEG segment ‘code’

START PROC FAR ; define the start of a program (procedure)

START ENDP ; define the end of a procedure

CSEG ends

End start ; end of everything

Different assembler may have different syntax for the definition

of the key words !!!!!

Start is just a name it could be my_prog, ABC etc

Trang 22

More sample

Stacksg segment para ‘stack’

… ; define the stack segment

Stacksg ends

Datasg segment para

…… ; declare data inside the data segment

Datasg ends

Codesg segment para ‘code’

Main proc far ;

assume ss:stacksg, ds: datasg, cs:codesg mov ax, datasg

mov ds, ax

….

mov ax, 4c00H int 21H

Main endp

Codesg ends

end main

Trang 23

To declare a segment, the syntax is:

segment_name SEGMENT alignment class

Example Stacksg segment PARA (this statement is used in previous slide)

PARA – define the alignment of the segment base address, the segment with a starting addressing that is evenly Divisible by 16 But the default value is also base address divisible

by 16 so the key word PARA can be ignored!

Trang 24

‘data’, ‘code’ – class entry Is used to group related segments when linking The linker automatically

groups segments of the same class in memory

PROC – define procedures (similar to a function)

inside the code segment Each procedure must be identified by an unique name At the end of the

procedure, you must include the ENDP

Trang 25

FAR – is related to program execution When you request execution

of a program, the program loader uses this procedure as the entry

point for the first instruction to execute

Assume – to associate, or to assign, the name of a segment with a segment register

In some assembler, you need to move the base address of a segment directly into the

segment register!!!

END – ends the entire program and appears as the last statement Usually the name of the first or only PROC designated as FAR is put after END

Trang 26

Syntax of a simple assembly

Trang 27

mov DL, 0H ; move 0H to DL

mov CL, op1 ; move op1 to CL

mov AL, data ; move data to AL

step:

cmp AL, op1 ; compare AL and op1

jc label1 ; if carry =1 jump to label1

sub AL, op1 ; AL = AL –op1

Trang 28

Assembler for 8086

Emu8086 (http:// www.emu8086.com) – there is a trial version but

it does not support all the features such as interrupt

The emu8086 consists of a tutorial and the reference for a

complete instruction set

Keil – www.keil.com

Trang 29

Defining data in a program

Data is usually stored in the data segment

You can define constants, work areas (a chunk of memory )

Data can be defined in different length (8-bit, 16-bit)

8-bit then use DB 16-bit then use DW

The definition for data:

[name] Dn expression ; Dn is either DB or DW

Name – a program that references a data item by means of a name

The name of an item is otherwise optional

Dn – this is called the directives It defines length of the data

Expression – define the values (content) for the data

Trang 30

Examples for data

FLDA DB ? ; define an uninitialized item called FLDA 8-bit

FLDB DB 25 ; initialize a data to 25

Define multiple data under the same name (like an array)

FLDC DB 21, 22, 23, 34 ; the data are stored in adjacent bytes

FLDC stores the first value

FLDC + 1 stores the second value

You can do mov AL, FLDC+3

Trang 31

Example for data definition

DUP – duplicate

DUP can be used to define multiple storages

DB 10 DUP (?) ; defines 10 bytes not initialize

DB 5 DUP (12) ; 5 data all initialized to 12

String :

DB ‘this is a test’

EQU – this directive does not define a data item; instead, it defines

a value that the assembler can use to substitute in other instructions

(similar to defining a constant in C programming or using the #define )

factor EQU 12

mov CX, factor

Trang 32

Assembly Program

Assembly language should be more effective and

it will take up less memory space and run faster

In real-time application, the use of assembly

program is required because program that is

written in a high-level language probably could

not respond quickly enough

You can also put assembly codes into your C++

program in order to reduce the execution time!!!!

Trang 33

Assembly language programming

The syntax for different microprocessor may be

different but the concept is the same so once you

learn the assembly programming for one

microprocessor, you can easily program other kinds

of system

For example, programming the 8051 series is very

similar to the 8086

Trang 34

Addressing Modes

Function of the addressing modes is to access the

operands

Available modes (9 modes): register addressing,

immediate addressing, direct addressing, register indirect addressing, based addressing, indexed

addressing, based indexed addressing, string

addressing, and port addressing

Addressing modes provide different ways of

computing the address of an operand

Trang 35

Why addressing mode is important?

In c++, you can define an array, or a variable

How this can be done using assembly language

programming? This is via different addressing

modes!!!!

Trang 36

Register addressing mode

The operand to be accessed is specified as residing

in an internal register of the 8086

Eg MOV AX, BX

Move (MOV) contents of BX (the source operand),

to AX (the destination operand)

Both operands are in the internal registers

Trang 39

Immediate addressing modeSource operand is part of the instruction

Usually immediate operands represent constant data

The operands can be either a byte or word

e.g MOV AL, 15

15 is a byte wide immediate source operand

Or it could be MOV AL, #15

The immediate operand is stored in program storage memory (i.e the code segment)

This value is also fetched into the instruction queue

in the BIU

Trang 42

Direct addressing mode

Move a byte or word between a memory location

and a register

the locations following the instruction opcode hold

an effective memory address (EA) instead of data

The address is a 16-bit offset of the storage

location of the operand from the current value in

the data segment register

• Physcial address = DS + offset

The instruction set does not support a

memory-to-memory transfer!

Trang 43

Direct addressing

Data is assumed to be stored in the data segment

so DS is used in calculating the physical address!!!

External memory bus cycle is needed to do the

read

Example of direct addressing: mov AL, var1

• Where Var1 can be regarded as a variable

Trang 44

Register indirect addressing mode

location addressed by an index or base register

– Example MOV AL, [SI]

– SI – index register

– The symbol [] always refer to an indirect addressing

The effective address (EA) is stored either in a pointer

register or an index register

pointer register BP

The index register can be source index register SI, or

destination index register DI

Trang 45

Register indirect addressing

• Value stored in the SI register is used as the offset address

memory location : DS + SI to the AX register

address) is a variable and depends on the index, or base

register value

Trang 46

If CL = 88 and BX = 1233H and DS =0H Physical address = DS + BX = 01233H

Ngày đăng: 23/10/2014, 16:34

TỪ KHÓA LIÊN QUAN