016.字符串逆序程序

;字符串翻轉		(RevStr.asm)
.386

.model flat,stdcall

.stack 4096

ExitProcess PROTO,dwExitCode:DWORD

.data
	aName BYTE "Abraham Lincoln",0
	nameSize=($-aName)-1

.code
	main PROC
		;將名字壓入棧
		mov ecx,nameSize		;在這裏值得注意的是,這裏藉助eax的原因,因爲aName[esi]是八位變址操作數,但是
		mov esi,0				;32bit彙編語言裏面棧的大小是32bit的,也就是說一個棧空間可以存儲320,1二進制

	L1:
		movzx eax,aName[esi]	;獲取字符 32bit零擴展傳送 對齊內存
		push eax				;壓入堆棧  壓入堆棧制後只需要在取出的時候僅僅取到最低的八位就可以得到字符串每一位的
		inc esi					;ASCII碼值,這裏實際上是藉助了大內存存儲小內容得理念,其目的是便於操作對齊內存
		loop L1

		;將每一個棧中的32bit逆序彈出堆棧,並存入aName數組
		mov ecx,nameSize
		mov esi,0
	L2:
		pop eax					;獲取字符
		mov aName[esi],al		;存入字符串
		inc esi

		loop L2

	invoke exitprocess,0
main endp
end main
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章