汇编实现大写转小写函数(to_lower)
生活随笔
收集整理的這篇文章主要介紹了
汇编实现大写转小写函数(to_lower)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
這個(gè)函數(shù)跟以前的寫法,改變有如下幾點(diǎn):
用.equ偽指令,引用系統(tǒng)調(diào)用編號(hào),.equ有點(diǎn)類似c語(yǔ)言里面的宏替換
用.lcomm偽指令,聲明一塊buffer
code:
.equ?BUFFER_SIZE,?512 .equ?SYS_READ,?3 .equ?SYS_WRITE,?4 .equ?SYS_EXIT,?1 .equ?STDIN,?0 .equ?STDOUT,?1 .equ?OFFSET,?'a'?-??'A' .equ?LINUX_SYSCALL,?0x80.section?.data .section?.bss .lcomm?BUFFER,?BUFFER_SIZE .section?.text.global?_start _start:#read(0,?BUFFER,?BUFFER_SIZE)movl?$SYS_READ,?%eaxmovl?$STDIN,?%ebxmovl?$BUFFER,?%ecxmovl?$BUFFER_SIZE,?%edxint?$LINUX_SYSCALL#判斷返回值cmpl?$0,?%eaxjle?_start_end#調(diào)用to_lowerpushq?%raxpushq?$BUFFERcall?to_lower#復(fù)位rspaddq?$16,?%rsp#打印到屏幕上movl?$SYS_WRITE,?%eaxmovl?$STDOUT,?%ebxmovl?$BUFFER,?%ecxmovl?$BUFFER_SIZE,?%edxint?$LINUX_SYSCALL_start_end:#調(diào)用exitmovl?$SYS_EXIT,?%eaxxorl?%ebx,?%ebxint?$LINUX_SYSCALL.type?to_lower,?@function to_lower:pushq?%rbpmovq?%rsp,?%rbp#獲取第一個(gè)參數(shù)movl?16(%rbp),?%edi#獲取第二個(gè)參數(shù)movl?24(%rbp),?%esi#edi為下標(biāo)xorl?%edx,?%edxto_lower_begin:#esi?下標(biāo)等于長(zhǎng)度時(shí)退出循環(huán)cmpl?%edx,?%esijle?to_lower_end#取出當(dāng)前字節(jié)movb?(%edi,?%edx,?1),?%clincl?%edx#如果是'A'?~?'Z'?改變buffer里面的值cmpb?$'A',?%cljl?to_lower_begincmpb?$'Z',?%cljg?to_lower_beginaddb?$OFFSET,?%clmovb?%cl,?-1(%edi,?%edx,?1)jmp?to_lower_beginto_lower_end:movq?%rbp,?%rsppopq?%rbpret編譯命令:
gcc?-g?-c?to_lower.s?&&?ld?./to_lower.o?&&?./a.out效果:
在終端輸入大寫字母,這時(shí),這時(shí)屏幕會(huì)輸出小寫字母
轉(zhuǎn)載于:https://my.oschina.net/guonaihong/blog/493121
總結(jié)
以上是生活随笔為你收集整理的汇编实现大写转小写函数(to_lower)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 控制反转IOC与依赖注入DI
- 下一篇: vmware后台运行