;字符串翻转 (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.字符串逆序程序
最新推荐文章于 2023-06-25 22:43:41 发布