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