0% found this document useful (0 votes)
19 views

Lecture 5 - Defining Data and Symbolic Constants

The document discusses different data types that can be defined in assembly language like BYTE, WORD, DWORD, QWORD, REAL and strings. It explains how to declare variables of these types and initialize them. It also covers calculating size of arrays and real-address mode programming.

Uploaded by

Dudur
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
19 views

Lecture 5 - Defining Data and Symbolic Constants

The document discusses different data types that can be defined in assembly language like BYTE, WORD, DWORD, QWORD, REAL and strings. It explains how to declare variables of these types and initialize them. It also covers calculating size of arrays and real-address mode programming.

Uploaded by

Dudur
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 23

Defining Data

• Intrinsic Data Types


• Data Definition Statement
• Defining BYTE and SBYTE Data
• Defining WORD and SWORD Data
• Defining DWORD and SDWORD Data
• Defining QWORD Data
• Defining TBYTE Data
• Defining Real Number Data
• Little Endian Order
• Adding Variables to the AddSub Program
• Declaring Uninitialized Data

1
Intrinsic Data Types (1 of 2)

• BYTE, SBYTE
• 8-bit unsigned integer; 8-bit signed integer
• WORD, SWORD
• 16-bit unsigned & signed integer
• DWORD, SDWORD
• 32-bit unsigned & signed integer
• QWORD
• 64-bit integer
• TBYTE
• 80-bit integer

2
Intrinsic Data Types (2 of 2)

• REAL4
• 4-byte IEEE short real
• REAL8
• 8-byte IEEE long real
• REAL10
• 10-byte IEEE extended real

3
Data Definition Statement

• A data definition statement sets aside storage in memory for


a variable.
• May optionally assign a name (label) to the data
• Syntax:
[name] directive initializer [,initializer] . . .

value1 BYTE 10

• All initializers become binary data in memory

4
Defining BYTE and SBYTE Data
Each of the following defines a single byte of storage:

value1 BYTE 'A' ; character constant


value2 BYTE 0 ; smallest unsigned byte
value3 BYTE 255 ; largest unsigned byte
value4 SBYTE -128 ; smallest signed byte
value5 SBYTE +127 ; largest signed byte
value6 BYTE ? ; uninitialized byte

A variable name is a data label that implies an offset (an address).

5
Defining Byte Arrays

Examples that use multiple initializers:

list1 BYTE 10,20,30,40


list2 BYTE 10,20,30,40
BYTE 50,60,70,80
BYTE 81,82,83,84
list3 BYTE ?,32,41h,00100010b
list4 BYTE 0Ah,20h,‘A’,22h

6
Defining Strings (1 of
3)
• A string is implemented as an array of characters
• For convenience, it is usually enclosed in quotation
marks
• It often will be null-terminated
• Examples:

str1 BYTE "Enter your name",0


str2 BYTE 'Error: halting program',0
greeting BYTE "Welcome to the Encryption Demo program "
str3 BYTE 'A','E','I','O','U'
BYTE "created by Kip Irvine.",0

7
Defining Strings (2 of
3)
• To continue a single string across multiple lines, end
each line with a comma:

menu BYTE "Checking Account",0dh,0ah,0dh,0ah,


"1. Create a new account",0dh,0ah,
"2. Open an existing account",0dh,0ah,
"3. Credit the account",0dh,0ah,
"4. Debit the account",0dh,0ah,
"5. Exit",0ah,0ah,
"Choice> ",0

8
Defining Strings (3 of
3)
• End-of-line character sequence:
• 0Dh = carriage return
• 0Ah = line feed

str1 BYTE "Enter your name: ",0Dh,0Ah


BYTE "Enter your address: ",0

newLine BYTE 0Dh,0Ah,0

9
Using the DUP Operator
• Use DUP to allocate (create space for) an array or
string. Syntax: counter DUP ( argument )
• Counter and argument must be constants or constant
expressions
BYTE 20 DUP(0)              ;20 bytes,all equal to zero o

BYTE 20 DUP(?)               ;20 bytes,unitialized

BYTE 4 DUP(*STACK*)     ;20bytes:*STACKSTACKSTACKSTAK*

10
Defining WORD and SWORD Data

• Define storage for 16-bit integers


• or double characters
• single value or multiple values

word1 WORD 65535 ; largest unsigned value


word2 SWORD –32768 ; smallest signed value
word3 WORD ? ; uninitialized, unsigned
word4 WORD "AB" ; double characters
myList WORD 1,2,3,4,5 ; array of words
array WORD 5 DUP(?) ; uninitialized array

11
Defining DWORD and SDWORD Data

Storage definitions for signed and unsigned 32-bit


integers:

val1 DWORD 12345678h ; unsigned


val2 SDWORD –2147483648 ; signed
val3 DWORD 20 DUP(?) ; unsigned array
val4 SDWORD –3,–2,–1,0,1 ; signed array

12
Defining QWORD, TBYTE, Real Data

Storage definitions for quadwords, tenbyte values,


and real numbers:

quad1 QWORD 1234567812345678h


val1 TBYTE 1000000000123456789Ah
rVal1 REAL4 -2.1
rVal2 REAL8 3.2E-260
rVal3 REAL10 4.6E+4096
ShortArray REAL4 20 DUP(0.0)

13
Little Endian Order

• All data types larger than a byte store their individual


bytes in reverse order. The least significant byte occurs
at the first (lowest) memory address.

• Example:
val1 DWORD 12345678h

14
Adding Variables to AddSub
TITLE Add and Subtract, Version 2 (AddSub2.asm)
; This program adds and subtracts 32-bit unsigned
; integers and stores the sum in a variable.
INCLUDE Irvine32.inc
.data
val1 DWORD 10000h
val2 DWORD 40000h
val3 DWORD 20000h
finalVal DWORD ?
.code
main PROC
mov eax,val1 ; start with 10000h
add eax,val2 ; add 40000h
sub eax,val3 ; subtract 20000h
mov finalVal,eax ; store the result (30000h)
call DumpRegs ; display the registers
exit
main ENDP
END main

15
Declaring Unitialized Data

• Use the .data? directive to declare an unintialized


data segment:
.data?
• Within the segment, declare variables with "?"
initializers:
smallArray DWORD 10 DUP(?)

Advantage: the program's EXE file size is reduced.

16
Equal-Sign Directive
• name = expression
• expression is a 32-bit integer (expression or constant)
• may be redefined
• name is called a symbolic constant
• good programming style to use symbols

COUNT = 500
.
.
mov al,COUNT

17
Calculating the Size of a Byte Array

• current location counter: $


• subtract address of list
• difference is the number of bytes

list BYTE 10,20,30,40


ListSize = ($ - list)

18
Calculating the Size of a Word Array

Divide total number of bytes by 2 (the size of a word)

list WORD 1000h,2000h,3000h,4000h


ListSize = ($ - list) / 2

19
Calculating the Size of a Doubleword Array

Divide total number of bytes by 4 (the size of a


doubleword)

list DWORD 1,2,3,4


ListSize = ($ - list) /
4

20
Real-Address Mode Programming (1 of 2)

• Generate 16-bit MS-DOS Programs


• Advantages
• enables calling of MS-DOS and BIOS functions
• no memory access restrictions
• Disadvantages
• must be aware of both segments and offsets
• cannot call Win32 functions (Windows 95 onward)
• limited to 640K program memory

21
Real-Address Mode Programming (2 of 2)

• Requirements
• INCLUDE Irvine16.inc
• Initialize DS to the data segment:
mov ax,@data
mov ds,ax

22
Add and Subtract, 16-Bit Version
TITLE Add and Subtract, Version 2 (AddSub2r.asm)
INCLUDE Irvine16.inc
.data
val1 DWORD 10000h
val2 DWORD 40000h
val3 DWORD 20000h
finalVal DWORD ?
.code
main PROC
mov ax,@data ; initialize DS
mov ds,ax
mov eax,val1 ; get first value
add eax,val2 ; add second value
sub eax,val3 ; subtract third value
mov finalVal,eax ; store the result
call DumpRegs ; display registers
exit
main ENDP
END main

23

You might also like