0% found this document useful (0 votes)
42 views18 pages

Assembly Language Programming

This document provides an introduction to 8086 assembly language programming. It discusses program statements, defining and naming data, arrays, data transfer instructions like MOV, arithmetic instructions, and the segment structure of a program with code, data, and stack segments. Various directives are described for defining different data types and reserving storage locations.

Uploaded by

fishna
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
42 views18 pages

Assembly Language Programming

This document provides an introduction to 8086 assembly language programming. It discusses program statements, defining and naming data, arrays, data transfer instructions like MOV, arithmetic instructions, and the segment structure of a program with code, data, and stack segments. Various directives are described for defining different data types and reserving storage locations.

Uploaded by

fishna
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 18

Introduction to 8086 Assembly Language

Assembly Language Programming


University of Akron Dr. Tim Margush

Program Statements
name operation operand(s) comment

Operation is a predefined or reserved word


mnemonic - symbolic operation code directive - pseudo-operation code

Space or tab separates initial fields Comments begin with semicolon Most assemblers are not case sensitive

Program Data and Storage


Pseudo-ops to define data or reserve storage
DB - byte(s) DW - word(s) DD - doubleword(s) DQ - quadword(s) DT - tenbyte(s)

These directives require one or more operands


define memory contents specify amount of storage to reserve for run-time data

Defining Data
Numeric data values
100 - decimal 100B - binary 100H - hexadecimal '100' - ASCII "100" - ASCII

A list of values may be used - the following creates 4 consecutive words


DW 40CH,10B,-13,0

Use the appropriate DEFINE directive (byte, word, etc.)

A ? represents an uninitialized storage location


DB 255,?,-128,'X'

Naming Storage Locations


Names can be associated with storage locations
ANum DB -4 DW 17 ONE UNO DW 1 X DD ? These names are called variables

ANum refers to a byte storage location, initialized to FCh The next word has no associated name ONE and UNO refer to the same word X is an unitialized doubleword

Arrays
Any consecutive storage locations of the same size can be called an array
X DW 40CH,10B,-13,0 Y DB 'This is an array' Z DD -109236, FFFFFFFFH, -1, 100B Components of X are at X, X+2, X+4, X+8 Components of Y are at Y, Y+1, , Y+15 Components of Z are at Z, Z+4, Z+8, Z+12

DUP
Allows a sequence of storage locations to be defined or reserved Only used as an operand of a define directive
DB DW DB db 40 DUP (?) 10h DUP (0) 3 dup ("ABC") 4 dup(3 dup (0,1), 2 dup('$'))

Word Storage
Word, doubleword, and quadword data are stored in reverse byte order (in memory)
Directive DW 256 DD 1234567H DQ 10 X DW 35DAh Bytes in Storage 00 01 67 45 23 01 0A 00 00 00 00 00 00 00 DA 35

Low byte of X is at X, high byte of X is at X+1

Named Constants
Symbolic names associated with storage locations represent addresses Named constants are symbols created to represent specific values determined by an expression Named constants can be numeric or string Some named constants can be redefined No storage is allocated for these values

Equal Sign Directive


name = expression
expression must be numeric these symbols may be redefined at any time maxint = 7FFFh count = 1 DW count count = count * 2 DW count

EQU Directive
name EQU expression
expression can be string or numeric Use < and > to specify a string EQU these symbols cannot be redefined later in the program sample EQU 7Fh aString EQU <1.234> message EQU <This is a message>

Data Transfer Instructions


MOV target, source
reg, reg mem, reg reg, mem mem, immed reg, immed

Sizes of both operands must be the same

reg can be any nonsegment register except IP cannot be the target register MOV's between a segment register and memory or a 16-bit register are possible

Sample MOV Instructions


b db 4Fh w dw 2048 mov mov mov mov mov mov bl,dh ax,w ch,b al,255 w,-100 b,0

When a variable is created with a define directive, it is assigned a default size attribute (byte, word, etc) You can assign a size attribute using LABEL
LoByte LABEL BYTE aWord DW 97F2h

Addresses with Displacements


b db 4Fh, 20h, 3Ch w dw 2048, -100, 0 mov mov mov mov bx, w+2 b+1, ah ah, b+5 dx, w-3

The assembler computes an address based on the expression


NOTE: These are address computations done at assembly time MOV ax, b-1 will not subtract 1 from the value stored at b

Type checking is still in effect

eXCHanGe
XCHG target, source
reg, reg reg, mem mem, reg

This provides an efficient means to swap the operands


No temporary storage is needed Sorting often requires this type of operation This works only with the general registers

MOV and XCHG cannot perform memory to memory moves

Arithmetic Instructions
ADD dest, source SUB dest, source INC dest DEC dest NEG dest Operands must be of the same size source can be a general register, memory location, or constant dest can be a register or memory location
except operands cannot both be memory

Program Segment Structure


Data Segments
Storage for variables Variable addresses are computed as offsets from start of this segment

Stack Segment
used to set aside storage for the stack Stack addresses are computed as offsets into this segment

Code Segment
contains executable instructions

You might also like