博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汇编实现小写转大写函数(to_upper)
阅读量:6567 次
发布时间:2019-06-24

本文共 2193 字,大约阅读时间需要 7 分钟。

hot3.png

1 把代码保存为to_upper.s 然后用gcc to_upper.s 然后./a.out 输入的文件名  输出的文件名 ,基中输入的文件里面如果包含小写字母,将会在输出文件里看到

2.本程序从输入文件中读取数据,把小写字母转成大写,写到输出文件中

.section .data.section .bss.equ BUFFER_SIZE, 512.lcomm BUFFER, BUFFER_SIZE.section .text.equ SYS_READ64, 0.equ SYS_WRITE64, 1.equ SYS_OPEN64, 2.equ SYS_CLOSE64, 3.equ ST_BUFFER_SIZE, 16.equ ARGV1, 8.equ ARGV2, 16.equ ST_FD_IN, -8.equ ST_FD_OUT, -16.equ OFFSET, 'A' - 'a'.equ O_RDONLY, 00.equ O_WRONLY_CREAT_TRUNC, 01101.global mainmain:    cmpl $3, %edi    jl main_error    pushq %rbp    movq %rsp, %rbp    subq $ST_BUFFER_SIZE, %rsp    movl $-1, ST_FD_IN(%rbp)    movl $-1, ST_FD_OUT(%rbp)    pushq %rsiopen_fd_in:    movq $SYS_OPEN64, %rax    movq ARGV1(%rsi), %rdi    movl $O_RDONLY, %esi    syscall    cmpl $0, %eax    jl main_error    movl %eax, ST_FD_IN(%rbp)        popq %rsiopen_fd_out:    movq $SYS_OPEN64, %rax    movq ARGV2(%rsi), %rdi    movl $O_WRONLY_CREAT_TRUNC, %esi    movl $0644, %edx    syscall    cmpl $0, %eax    jl main_end    movl %eax, ST_FD_OUT(%rbp)read_write_begin:    movq $SYS_READ64, %rax    movl ST_FD_IN(%rbp), %edi    movq $BUFFER, %rsi    movl $BUFFER_SIZE, %edx    syscall    cmpl $0, %eax    jle main_end    movq %rax, %r8    pushq %rax    pushq $BUFFER    call to_upper    addq $16, %rsp    movq $SYS_WRITE64, %rax    movl ST_FD_OUT(%rbp), %edi    movq $BUFFER, %rsi    movq %r8, %rdx    syscall    cmpl $0, %eax    jle main_end    jmp read_write_begin    main_end:    movq $SYS_CLOSE64, %rax    movl ST_FD_IN(%rbp), %edi    syscall    movq $SYS_CLOSE64, %rax    movl ST_FD_OUT(%rbp), %edi    syscall        xorl %eax, %eax    movq %rbp, %rsp    popq %rbp    retmain_error:    movl $1, %eax    ret#小写转大写函数.type to_upper, @functionto_upper:    pushq %rbp    movq %rsp, %rbp    movq 16(%rbp), %rdi    movl 24(%rbp), %esi    cmpl $0, %esi    jle to_upper_end    xor %rcx, %rcxto_upper_begin:    cmpq %rcx, %rsi    jle to_upper_end    movb (%rdi, %rcx, 1), %bl    incq %rcx        cmpb $'a', %bl    jl to_upper_begin    cmpb $'z', %bl    jg to_upper_begin        addb $OFFSET, %bl    movb %bl, -1(%rdi, %rcx, 1)    jmp to_upper_beginto_upper_end:    movq %rbp, %rsp    popq %rbp    ret

转载于:https://my.oschina.net/guonaihong/blog/495819

你可能感兴趣的文章
unity3d-高频率面试题目
查看>>
Nancy之结合TinyFox调试备忘
查看>>
WPF MeshGeometry3D
查看>>
puppet cron 模块
查看>>
7nm处理器的优点和缺点
查看>>
Tor介绍
查看>>
pring-boot集成Springfox-Swagger2
查看>>
c#调用C++DLL类型转换
查看>>
华胜天成1.18亿美元收购美国GD公司
查看>>
<转>巧用notepad++ 批量转换ansi 和 utf8
查看>>
Spring4-HelloWorld
查看>>
55、组播配置实验之PIM Sparse Mode静态指定RP
查看>>
Windows Server 2003防黑小秘决
查看>>
证书在 Exchange 2007 Server 中的使用
查看>>
Active Directory 对象授权还原
查看>>
OSI参考模型——网络层的主要功能
查看>>
【HM】第5课:JDBC连接MySQL数据库
查看>>
Linux-什么是二进制包,源码包,RPM包,软件仓库
查看>>
使用expect实现shell自动交互
查看>>
spark 入门及集群环境搭建
查看>>