1. 程式人生 > >彙編實驗————實驗四:串處理與通過棧傳遞引數的使用

彙編實驗————實驗四:串處理與通過棧傳遞引數的使用

實驗名稱

串處理與通過棧傳遞引數的使用

實驗目的

掌握串處理指令在陣列中的運用。

實驗要求

從鍵盤接收一個字串,然後將字串中的大寫字母轉為小寫字母,最後將轉換以後的結果輸出。

實驗內容

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

實驗測試例圖:

總結

雖然在這次的實驗中除錯了除錯花費了較長的時間,但是獲益匪淺,通過書本中的內容以及查閱到的資料,自己對對棧的操作以及儲存方式、作用以及棧的地址結構有了更加深入的瞭解!總體來說獲益良多。