彙編實驗————實驗四:串處理與通過棧傳遞引數的使用
實驗名稱
串處理與通過棧傳遞引數的使用
實驗目的
掌握串處理指令在陣列中的運用。
實驗要求
從鍵盤接收一個字串,然後將字串中的大寫字母轉為小寫字母,最後將轉換以後的結果輸出。
實驗內容
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
實驗測試例圖:
總結
雖然在這次的實驗中除錯了除錯花費了較長的時間,但是獲益匪淺,通過書本中的內容以及查閱到的資料,自己對對棧的操作以及儲存方式、作用以及棧的地址結構有了更加深入的瞭解!總體來說獲益良多。