http://people.cs.und.edu/~userid/250/
.
lab5
.
+
: string concatenation.
For example,
"abc"+"xyz" = "abcxyz"
/
: string removal.
It removes the first occurrence of the pattern from the string.
For example,
"abcxyz"/"cx" = "abyz"and
"xabyabz"/"ab" = "xyabz"
main.cpp
, which manages the stack, handles the parentheses, and calls the lab3.asm
,
lab3.h
, which is a declaration, and
lab3.asm
, which calculates a string expression without parentheses.
("abc"+"xyz")/("c"+"xy")
.
The final string is calculated as follows (the italic string with a yellow-color background is in the stack):
$("abc"+"xyz")/("c"+"xy")
$("abc"+"xyz")/("c"+"xy")
$/("c"+"xy")
"abc"+"xyz"
inside the first pair of parentheses to the Lab3 for calculation.
Push the result string "abcxyz"
back to the stack.
$"abcxyz"/("c"+"xy")
$"abcxyz"/("c"+"xy")
$"abcxyz"/
"c"+"xy"
inside the second pair of parentheses to the Lab3 for calculation.
Push the result string "cxy"
back to the stack.
$"abcxyz"/"cxy"
$
"abcxyz"/"cxy"
to the Lab3 for calculation.
Push the result string "abz"
back to the stack.
$"abz"
"abz"
.
Examples of Laboratory 5 Execution | |
---|---|
|
C:\Irvine\examples\ch12\VisualCPP\FindArray
to another folder such as c:\250\lab\5\
.
AsmFindArray.asm
to lab3.asm
and findarr.h
to lab3.h
, and remove findArr.cpp
.
op BYTE '+'will set the variable
op
to +
only at the first call from C++.
The next calls will not re-set the op
value.
str = "a "
, then strlen(str) = 2
.
str = "a"
, then strlen(str) = 3
.
stack[count++] = '\"';You have to define the double quote as a character before using it:
char dquote = '\"'; stack[count++] = dquote;
main.cpp
.
For a C/C++ tutorial, you may check Programming in C: A Tutorial.
The following C/C++ commands may be used in this lab:
No. | Command | Description |
---|---|---|
1 | char | Defining characters |
2 | cin | The standard input |
3 | const int | Defining integer constants |
4 | cout | The standard output |
5 | extern "C" | C++ linkage declaration |
6 | for | loop |
7 | if | if statement |
8 | #include <iostream> | Input/Output stream class |
9 | #include <string> | Standard C library to manipulate C strings. |
10 | return | Stops execution and returns to the calling function. |
11 | strlen( const char * string ); | Returns the number of characters in string before the terminating null-character. |
12 | unsigned int | Defining unsigned integers |
13 | using namespace std; | Uses standard namespaces. |
14 | void | If you do not want to return a value, you must use the return type void and miss out the return statement. |
15 | while | loop |
str
in place:
for ( int i=0, j=strlen(str)-1; i < j; i++, j-- ) { char c = str[i]; str[i] = str[j]; str[j] = c; }You may use an array to simulate a stack.
No. | Operators/ Directives/ Commands |
Description | Textbook Page Numbers |
---|---|---|---|
1 | .586 |
Target processor | 409 |
2 | add |
Addition | 87 – 88 |
3 | BYTE |
Directive of defining byte | 66 – 67 |
4 | cmp |
Performs an implied subtraction of a source operand from a destination operand. | 156 |
5 | .code |
Marks the beginning of the code segment. | 55 |
6 | dec |
Decrement | 87 |
7 | DWORD |
Directive of defining doubleword | 68 |
8 | END |
Marks the last line of the program to be assembled. | 59 |
9 | ENDP |
Marks the end of a procedure. | 59 |
10 | .IF |
IF statement |
184 – 186 |
11 | inc |
Increment | 87 |
12 | je |
Jump if equal | 158 – 162 |
13 | jmp |
Causes an unconditional transfer to a target location inside the code segment. | 104 |
14 | jne |
Jump if not equal | 158 – 162 |
15 | loop |
Loop. ECX is automatically used as a counter and is decremented each time the loop repeats. |
105 – 106 |
16 | .MODEL flat, C |
Uses the flat memory model and C calling conventions. | 246 – 248 |
17 | mov |
Move | 81 – 82 |
18 | OFFSET |
Returns the offset of a data label. | 94 |
19 | PROC |
Identifies the beginning of a procedure. | 59 |
20 | PROC … USES |
Lists the names of all registers modified within a procedure. | 140 – 142 |
21 | PROTO |
Creates a prototype for an existing procedure. | 253 – 255 |
22 | PTR |
Override the declared size of an operand. | 95 – 96 |
23 | ret |
Pops the return address from the stack into the instruction pointer. | 136 |
24 | sub |
Subtraction | 88 |
http://people.cs.und.edu/~userid/250/
or a CD is not submitted.
For security, perform the following operation:
gandalf> chmod 700 lab?.asm* *.cpp *.hto block all read/write accesses from others to the files
lab?.asm*
, *.cpp
, and *.h
.
Firefox will be used to download code.
Be sure your system is working on Firefox 3.0 or above.