Objectives:
⦁ Declare and initialize null-terminated string
⦁ Apply indirect address
⦁ Write loop
⦁ Apply Irvine.inc library functions to display a
string
Problem Description:
Write a program with a loop and indirect address that copies a
string from source to target. Revising the character order in the
process. Use the following variables:
source BYTE “This is the string that will be reversed”, 0
target BYTE SIZEOF source DUP(‘#’)
You may refer to the Programming Exercise #7 on Page 138 of the
textbook.
Hint:
You may study the book example “Copying a String” on page 127
first. However, this project has three different things from the
book’s example.
⦁ You need two index register. One for the index of
source, another for index of target. You can use Register ESI for
index of source and Register EDI for index of target
⦁ You will not copy the last character in source, which
is null character (the terminator of source string). So the initial
value of ESI shall be set as OFFSET target – 2 since the target
string is stored right after the source string in memory
⦁ After the loop, you need add null character to the
end of the target string
How to View Output:
After Chapter Five, you will be able to write statement to print
out the output on screen. So far, you need to see output in memory.
After your project can be assembled and run successfully, you may
do following things:
⦁ Click on the grey bar located on the left of side of
the “invoke ExitProcess, 0” statement to set up the Break
Point
⦁ Go to Debug and click on Start Debugging
⦁ Go to Debug -> Windows -> Memory -> Memory 1
(or: ALT + 6). You will see a window on the right side of your
code. Type 0x004068D0 in Address field and you will see the
following window (next page). If you don’t see the source string,
then your computer may store .data section in difference memory
location. You may need to search to find it. If you see the source
string but the string after it is not a reverse of source string,
then your program has logic errors.
⦁ After check the result, press F10 to continue and
finish the program execution.
Due Date:
You need to turn in YourNameProj4.asm via Blackboard. Due date will
be announced on Blackboard.
Reference > Language > Variables > Data types > String
string
[Data Types]
Description
Text strings can be represented in two ways. you can use the String data type, which is part of the core as of version 0019, or you can make a string out of an array of type char and null-terminate it. This page described the latter method. For more details on the String object, which gives you more functionality at the cost of more memory, see the String object page.
Syntax
All of the following are valid declarations for strings.
char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n',
'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o',
'\0'};
char Str4[] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";
Possibilities for declaring strings
Declare an array of chars without initializing it as in Str1
Declare an array of chars (with one extra char) and the compiler will add the required null character, as in Str2
Explicitly add the null character, Str3
Initialize with a string constant in quotation marks; the compiler will size the array to fit the string constant and a terminating null character, Str4
Initialize the array with an explicit size and string constant, Str5
Initialize the array, leaving extra space for a larger string, Str6
Null termination
Generally, strings are terminated with a null character (ASCII
code 0). This allows functions (like Serial.print()
)
to tell where the end of a string is. Otherwise, they would
continue reading subsequent bytes of memory that aren’t actually
part of the string.
This means that your string needs to have space for one more character than the text you want it to contain. That is why Str2 and Str5 need to be eight characters, even though "arduino" is only seven - the last position is automatically filled with a null character. Str4 will be automatically sized to eight characters, one for the extra null. In Str3, we’ve explicitly included the null character (written '\0') ourselves.
Note that it’s possible to have a string without a final null character (e.g. if you had specified the length of Str2 as seven instead of eight). This will break most functions that use strings, so you shouldn’t do it intentionally. If you notice something behaving strangely (operating on characters not in the string), however, this could be the problem.
Single quotes or double quotes?
Strings are always defined inside double quotes ("Abc") and characters are always defined inside single quotes('A').
Wrapping long strings
You can wrap long strings like this:
char myString[] = "This is the first line"
" this is the second line"
" etcetera";
Arrays of strings
It is often convenient, when working with large amounts of text, such as a project with an LCD display, to setup an array of strings. Because strings themselves are arrays, this is actually an example of a two-dimensional array.
In the code below, the asterisk after the datatype
char
“char*” indicates that this is an array of
“pointers”. All array names are actually pointers, so this is
required to make an array of arrays. Pointers are one of the more
esoteric parts of C++ for beginners to understand, but it isn’t
necessary to understand pointers in detail to use them effectively
here.
Example Code
char *myStrings[] = {"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5", "This is string 6"
};
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 6; i++) {
Serial.println(myStrings[i]);
delay(500);
}
}
Get Answers For Free
Most questions answered within 1 hours.