;字符串翻轉 (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的,也就是說一個棧空間可以存儲32個0,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
016.字符串逆序程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.