汇编实验————实验四:串处理与通过栈传递参数的使用

实验名称

串处理与通过栈传递参数的使用

实验目的

掌握串处理指令在数组中的运用。

实验要求

从键盘接收一个字符串,然后将字符串中的大写字母转为小写字母,最后将转换以后的结果输出。

实验内容

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

实验测试例图:

汇编实验————实验四:串处理与通过栈传递参数的使用_第1张图片

总结

虽然在这次的实验中调试了调试花费了较长的时间,但是获益匪浅,通过书本中的内容以及查阅到的资料,自己对对栈的操作以及存储方式、作用以及栈的地址结构有了更加深入的了解!总体来说获益良多。

 

 

 

 

 

你可能感兴趣的:(【基础编程】,———Assembly)