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

在本教程中,我们将继续上一节的内容,专注于将小写字母转换为大写字母的汇编实现。文章介绍了在转换过程中寄存器的作用,如%eax用于缓冲区起始地址,%ebx存储缓冲区大小,%edi表示当前缓冲区偏移量,而%cl用作检查的字节。
摘要由CSDN通过智能技术生成

紧跟着上一节,这一节我们来完成把小写变大写的功能。在开始之前,我们简单说一下寄存器存放的东西。

  • %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协议进行授权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值