您的位置:首页 > 运维架构 > Linux

Linux汇编教程14:系统调用和文件处理下

2015-09-16 21:03 148 查看
紧跟着上一节,这一节我们来完成把小写变大写的功能。在开始之前,我们简单说一下寄存器存放的东西。

%eax – 缓冲区起始地址

%ebx – 缓冲区大小

%edi – 当前缓冲区偏移量

%cl – 当前正在检测的字节

具体实现如下:

# 我们搜索的下边界
.equ LOWERCASE_A, 'a'
# 我们搜索的上边界
.equ LOWERCASE_Z, 'z'
# 大小写转换
.equ UPPER_CONVERSION, 'A' - 'a'

### 栈相关 ###
.equ ST_BUFFER_LEN, 8
.equ ST_BUFFER, 12

convert_to_upper:
pushl %ebp
movl %esp, %ebp

movl ST_BUFFER(%ebp), %eax
movl ST_BUFFER_LEN(%ebp), %ebx
movl $0, %edi

cmpl $0, %eax
je end_convert_loop

convert_loop:
movb (%eax, %edi, 1), %cl

cmpb $LOWERCASE_A, %cl
jl next_byte
cmpb $LOWERCASE_Z, %cl
jg next_byte

addb $UPPER_CONVERSION, %cl
movb %cl, (%eax, %edi, 1)

next_byte:
incl %edi
cmpl %edi, %ebx

jne convert_loop

end_convert_loop:
movl %ebp, %esp
popl %ebp
ret



版权声明

Moriarty_221为本文的CSDN博客

如未注明,均为原创,转载请注明出处

转载请注明:coskimo » Linux汇编教程14:系统调用和文件处理下

版权所有 © 科斯基摩 |
本网站采用cc
by-nc-sa 3.0协议进行授权
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: