日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编实现大写转小写函数(to_lower)

發布時間:2024/4/13 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编实现大写转小写函数(to_lower) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

這個函數跟以前的寫法,改變有如下幾點:

  • 用.equ偽指令,引用系統調用編號,.equ有點類似c語言里面的宏替換

  • 用.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#調用to_lowerpushq?%raxpushq?$BUFFERcall?to_lower#復位rspaddq?$16,?%rsp#打印到屏幕上movl?$SYS_WRITE,?%eaxmovl?$STDOUT,?%ebxmovl?$BUFFER,?%ecxmovl?$BUFFER_SIZE,?%edxint?$LINUX_SYSCALL_start_end:#調用exitmovl?$SYS_EXIT,?%eaxxorl?%ebx,?%ebxint?$LINUX_SYSCALL.type?to_lower,?@function to_lower:pushq?%rbpmovq?%rsp,?%rbp#獲取第一個參數movl?16(%rbp),?%edi#獲取第二個參數movl?24(%rbp),?%esi#edi為下標xorl?%edx,?%edxto_lower_begin:#esi?下標等于長度時退出循環cmpl?%edx,?%esijle?to_lower_end#取出當前字節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

    效果:

    在終端輸入大寫字母,這時,這時屏幕會輸出小寫字母

    轉載于:https://my.oschina.net/guonaihong/blog/493121

    總結

    以上是生活随笔為你收集整理的汇编实现大写转小写函数(to_lower)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。