实验名称
串处理与通过栈传递参数的使用
实验目的
掌握串处理指令在数组中的运用。
实验要求
从键盘接收一个字符串,然后将字符串中的大写字母转为小写字母,最后将转换以后的结果输出。
实验内容
1、将字符串中的大写字母转为小写字母实现为一个过程(procedure),且通过栈来传递参数,一个参数为字符串首地址,一个参数为字符串长度。该过程(procedure)不要求字符串以0结尾。注意:传递参数不能使用MASM简化编程的版本(因为它会简化参数的使用),即不能使用下面的格式的方法:
name_Func PROC,
参数1名: 参数1类型,
参数2名: 参数2类型
2、程序中要求用到串操作指令。
3、字符串可以为任意的ASCII码可显示字符。如‘0’,逗号’,’,‘!’等。均要求能正确处理。
实验步骤
实验代码:
INCLUDE Irvine32.inc
str_array = 100
;数据段
.data
str1 BYTE "Enter string: ",0
str2 BYTE "Final string: ",0
str3 BYTE "You string: ",0
array BYTE str_array DUP(?)
strln DWORD ?
;代码段
.code
main PROC
call Clrscr
Call AarrayLength
mov edx, OFFSET str3
call WriteString
call ShowString
mov edx, OFFSET str2
call Crlf
call WriteString
call ChangeStr
main ENDP
AarrayLength:
mov edx, OFFSET str1
call WriteString
mov edx, OFFSET array
mov ecx, SIZEOF array
call ReadString
mov strln, eax
ret
ShowString:
mov edx, OFFSET array
call WriteString
ret
ChangeStr:
mov edx, OFFSET array
push edx ; push string address
call Change
call ShowString
call Crlf
exit
Change:
push ebp
mov ebp, esp
mov esi, [ebp+8]
mov edi, [ebp+8]
mov ecx, strln
chloop:
lodsb
cmp al, 'A'
jb continue
cmp al, 'Z'
ja continue
add al, 20h
continue:
stosb
loop chloop
pop ebp
ret
END main
实验测试例图:
总结
虽然在这次的实验中调试了调试花费了较长的时间,但是获益匪浅,通过书本中的内容以及查阅到的资料,自己对对栈的操作以及存储方式、作用以及栈的地址结构有了更加深入的了解!总体来说获益良多。