文档章节

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

guonaihong
 guonaihong
发布于 2015/08/16 13:21
字数 323
阅读 144
收藏 3

这个函数跟以前的写法,改变有如下几点:

  1. 用.equ伪指令,引用系统调用编号,.equ有点类似c语言里面的宏替换

  2. 用.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, %eax
    movl $STDIN, %ebx
    movl $BUFFER, %ecx
    movl $BUFFER_SIZE, %edx
    int $LINUX_SYSCALL

    #判断返回值
    cmpl $0, %eax
    jle _start_end

    #调用to_lower
    pushq %rax
    pushq $BUFFER
    call to_lower
    #复位rsp
    addq $16, %rsp

    #打印到屏幕上
    movl $SYS_WRITE, %eax
    movl $STDOUT, %ebx
    movl $BUFFER, %ecx
    movl $BUFFER_SIZE, %edx
    int $LINUX_SYSCALL

_start_end:
    #调用exit
    movl $SYS_EXIT, %eax
    xorl %ebx, %ebx
    int $LINUX_SYSCALL


.type to_lower, @function
to_lower:
    pushq %rbp
    movq %rsp, %rbp
    #获取第一个参数
    movl 16(%rbp), %edi
    #获取第二个参数
    movl 24(%rbp), %esi
    
    #edi为下标
    xorl %edx, %edx

to_lower_begin:
    #esi 下标等于长度时退出循环
    cmpl %edx, %esi
    jle to_lower_end

    #取出当前字节
    movb (%edi, %edx, 1), %cl
    incl %edx
    #如果是'A' ~ 'Z' 改变buffer里面的值
    cmpb $'A', %cl
    jl to_lower_begin
    cmpb $'Z', %cl
    jg to_lower_begin
    
    addb $OFFSET, %cl
    movb %cl, -1(%edi, %edx, 1)
    jmp to_lower_begin

to_lower_end:
    movq %rbp, %rsp
    popq %rbp
    ret

编译命令:

gcc -g -c to_lower.s && ld ./to_lower.o && ./a.out

效果:

在终端输入大写字母,这时,这时屏幕会输出小写字母

© 著作权归作者所有

guonaihong

guonaihong

粉丝 6
博文 83
码字总数 27591
作品 1
徐汇
程序员
私信 提问
709. To Lower Case - LeetCode

Question 709. To Lower Case Sollution 题目大意:字符串大写转小写 思路: 直接调用Java API函数 字符串转char数组,遍历数组,判断如果大写就转小写 Java实现:...

yysue
2018/08/21
128
0
Smarty学习篇之变量调解器

Smarty常见变量调节器 1、首字母大写capitalize 示例:{$articleTitle|capitalize} 2、字符串连接cat 示例:{$articleTitle|cat:”yesterday.”} 3、日期格式化date_format 示例:{$yesterd...

Debug客栈
2018/05/18
0
0
Leetcode#709. To Lower Case(转换成小写字母)

题目描述 实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。 示例 1: 示例 2: 示例 3: 思路 字符串转char数组,遍历数...

武培轩
2018/08/27
0
0
Oracle查询忽略大小写的实现方法

转自:http://database.51cto.com/art/201010/231561.htm Oracle查询有时候要受到一些条件的制约,比如大小写。下面为您介绍了一个实现Oracle查询忽略大小写的方法,如果您对Oracle查询方面感...

巴顿
2015/02/10
60
0
Python天天美味(11) - 可爱的大小写

转换大小写和其他语言一样,Python为string对象提供了转换大小写的方法:upper() 和 lower()。还不止这些,Python还为我们提供了首字母大写,其余小写的capitalize()方法,以及所有单词首字母...

zting科技
2017/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Elasticsearch系列---索引管理

概要 Elasticsearch让索引创建变得非常简单,只要索引一条新的数据,索引会自动创建出来,但随着数据量的增加,我们开始有了索引优化和搜索优化的需求之后,就会发现自动创建的索引在某些方面...

清茶豆奶
21分钟前
4
0
MAMP Pro for Mac(PHP/MySQL开发环境)

[名称]:MAMP Pro for Mac [大小]: 11.14 MB [语言]:英文 [测试环境]: Mac OS 10.15.x [下载链接]:https://www.macdown.com/mac/1676.html 简介 一款包含Macintosh、Apache、MySQL和PHP...

麦克虾仔
24分钟前
1
0
Numpy处理图片方法

在进行图像领域的深度学习的时候经常需要对图片进行处理,包括图像的翻转,压缩,截取等,一般都是用Numpy来处理。处理起来也很方便。 In[3] # 导入需要的包 import numpy as np import matp...

北方的郎
今天
18
0
AMD集中擢升高管:从Intel挖了个高手

  1 月 17 日,AMD 官方宣布多项人事升迁、新人任命,擢升了四位高级副总裁:   AMD 同时还宣布, 聘请行业资深人士 Daniel McNamara 出任高级副总裁兼服务器业务部总经理,负责在第二代...

水果黄瓜
今天
10
0
什么是泛型?

一、泛型的概念 泛型是 Java SE5 出现的新特性,泛型的本质是类型参数化或参数化类型,在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。 二、泛型的意义 一般的...

hncboy
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部