我发现了一个名为:ProgrammingGroundUp-1-0-booksize.pdf的pdf文件,其中一个项目是制作一个汇编程序,它接收文件并将它们转换为大写,

.section .data

#######CONSTANTS########

#system call numbers

.equ SYS_OPEN, 5

.equ SYS_WRITE, 4

.equ SYS_READ, 3

.equ SYS_CLOSE, 6

.equ SYS_EXIT, 1

#options for open (look at

#/usr/include/asm/fcntl.h for

#various values. You can combine them

#by adding them or ORing them)

#This is discussed at greater length

#in "Counting Like a Computer"

.equ O_RDONLY, 0

.equ O_CREAT_WRONLY_TRUNC, 03101

#standard file descriptors

.equ STDIN, 0

.equ STDOUT, 1

.equ STDERR, 2

#system call interrupt

.equ LINUX_SYSCALL, 0x80

.equ END_OF_FILE, 0

#This is the return value

#of read which means we’ve

#hit the end of the file

.equ NUMBER_ARGUMENTS, 2

.section .bss

.equ BUFFER_SIZE, 500

.lcomm BUFFER_DATA, BUFFER_SIZE

.section .text

#STACK POSITIONS

.equ ST_SIZE_RESERVE, 8

.equ ST_FD_IN, -4

.equ ST_FD_OUT, -8

.equ ST_ARGC, 0

#Number of arguments

.equ ST_ARGV_0, 4

#Name of program

.equ ST_ARGV_1, 8

#Input file name

.equ ST_ARGV_2, 12

#Output file name

.globl _start

_start:

###INITIALIZE PROGRAM###

#save the stack pointer

movl %esp, %ebp

#Allocate space for our file descriptors

#on the stack

subl $ST_SIZE_RESERVE, %esp

open_files:

open_fd_in:

###OPEN INPUT FILE###

#open syscall

movl $SYS_OPEN, %eax

#input filename into %ebx

movl ST_ARGV_1(%ebp), %ebx

#read-only flag

movl $O_RDONLY, %ecx

#this doesn’t really matter for reading

movl $0666, %edx

#call Linux

int $LINUX_SYSCALL

store_fd_in:

#save the given file descriptor

movl %eax, ST_FD_IN(%ebp)

open_fd_out:

###OPEN OUTPUT FILE###

#open the file

movl $SYS_OPEN, %eax

#output filename into %ebx

movl ST_ARGV_2(%ebp), %ebx

#flags for writing to the file

movl $O_CREAT_WRONLY_TRUNC, %ecx

#mode for new file (if it’s created)

movl $0666, %edx

#call Linux

int

$LINUX_SYSCALL

store_fd_out:

#store the file descriptor here

movl %eax, ST_FD_OUT(%ebp)

###BEGIN MAIN LOOP###

read_loop_begin:

###READ IN A BLOCK FROM THE INPUT FILE###

movl $SYS_READ, %eax

#get the input file descriptor

movl ST_FD_IN(%ebp), %ebx

#the location to read into

movl $BUFFER_DATA, %ecx

#the size of the buffer

movl $BUFFER_SIZE, %edx

#Size of buffer read is returned in %eax

int

$LINUX_SYSCALL

###EXIT IF WE’VE REACHED THE END###

#check for end of file marker

cmpl $END_OF_FILE, %eax

#if found or on error, go to the end

jle end_loop

continue_read_loop:

###CONVERT THE BLOCK TO UPPER CASE###

pushl $BUFFER_DATA

#location of buffer

pushl %eax

#size of the buffer

call convert_to_upper

popl %eax

#get the size back

addl $4, %esp

#restore %esp

###WRITE THE BLOCK OUT TO THE OUTPUT FILE###

#size of the buffer

movl %eax, %edx

movl $SYS_WRITE, %eax

#file to use

movl ST_FD_OUT(%ebp), %ebx

#location of the buffer

movl $BUFFER_DATA, %ecx

int $LINUX_SYSCALL

###CONTINUE THE LOOP###

jmp read_loop_begin

end_loop:

###CLOSE THE FILES###

#NOTE - we don’t need to do error checking

movl $SYS_CLOSE, %eax

movl ST_FD_OUT(%ebp), %ebx

int $LINUX_SYSCALL

movl ST_FD_IN(%ebp), %ebx

movl $SYS_CLOSE, %eax

int $LINUX_SYSCALL

###EXIT###

movl $SYS_EXIT, %eax

movl $0, %ebx

int $LINUX_SYSCALL

###CONSTANTS##

#The lower boundary of our search

.equ LOWERCASE_A, ’a’

#The upper boundary of our search

.equ LOWERCASE_Z, ’z’

#Conversion between upper and lower case

.equ UPPER_CONVERSION, ’A’ - ’a’

###STACK STUFF###

.equ ST_BUFFER_LEN, 8 #Length of buffer

.equ ST_BUFFER, 12

#actual buffer

convert_to_upper:

pushl %ebp

movl %esp, %ebp

###SET UP VARIABLES###

movl ST_BUFFER(%ebp), %eax

movl ST_BUFFER_LEN(%ebp), %ebx

movl $0, %edi

#if a buffer with zero length was given

#to us, just leave

cmpl $0, %ebx

je end_convert_loop

convert_loop:

#get the current byte

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

#go to the next byte unless it is between

#’a’ and ’z’

cmpb $LOWERCASE_A, %cl

jl next_byte

cmpb $LOWERCASE_Z, %cl

jg next_byte

#otherwise convert the byte to uppercase

addb $UPPER_CONVERSION, %cl

#and store it back

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

next_byte:

incl %edi

#next byte

cmpl %edi, %ebx

#continue unless

#we’ve reached the

#end

jne convert_loop

end_convert_loop:

#no return value, just leave

movl %ebp, %esp

popl %ebp

ret

`

汇编程序被称为“as”,代码在文件的第87页,如果你在谷歌上查找它你很容易得到,也因为某些原因代码没有正确复制和粘贴,所以你有时可能会看到像:

JMP

to_another_point

我试图摆脱尽可能多的那些,但仍然可能有一些,并且一些评论可能在此过程中丢失,所以我建议打开原始的pdf文件.

我正在运行Ubuntu linux版本10.04.1,我使用的是版本2.20.1,问题是它创建了文件,但文件始终为空.

怎么将文件转换成linux文件,你如何在linux中创建一个将文件转换为大写...相关推荐

  1. lin通信ldf文件解析_详细步骤讲解如何在CANoe中创建一个LIN通讯工程(多图+详解)...

    本文首发自微信公众号"汽车技术馆"! CANoe可以实现基于CAN通讯的通讯测试和仿真,同时也可以支持基于LIN通讯的通讯测试和仿真,如何在CANoe中建立一个基于LIN通讯的工程 ...

  2. android创建一个新文件,如何在android中创建一个新文件夹DCIM

    张贴在评论,我想你的代码,并它为我工作. MainActivity.java public class MainActivity extends Activity { private final st ...

  3. 将py文件转换成html,(2条消息)自制 Python小工具 将markdown文件转换成Html文件

    今天看到了一个Python库,名为markdown.瞬间就给了我一个灵感,那就是制作一个将markdown文件转换成html文件的小工具. 我的实验环境操作系统: Windows 7 64位 旗舰版 ...

  4. linux如何转汇编,你如何在linux中创建一个将文件转换为大写的x86汇编程序?

    我发现了一个名为:ProgrammingGroundUp-1-0-booksize.pdf的pdf文件,其中一个项目是制作一个汇编程序,它接收文件并将它们转换为大写, .section .data # ...

  5. java创建临时文件夹_如何在Java中创建一个临时目录/文件夹?

    有没有在Java应用程序内部创建临时目录的标准可靠方法? Java的问题数据库中有一个条目,注释中包含一些代码,但是我想知道在一个常用的库(Apache Commons等)中是否找到标准解决方案? # ...

  6. 如何在matlab中打开一个.dat文件,并载入数据

    方法一:fscanf函数 fid=fopen('data.dat','r');       %打开数据文件 x=fscanf(fid,'%g');                 %读取文件数据 %得 ...

  7. python创建一个csv文件_python如何写入csv

    在使用python对文件操作的过程中,你肯定碰到过对csv文件的操作,下面就python对csv文件的操作进行详述. CSV(Comma-Separated Values)逗号分隔符,也就是每条记录中 ...

  8. 怎样将WPS文件转换成Word文档

    相关统计表示,办公室中将WPS文件转换成Word的需要越来越多.很多人直接将文件后缀名修改,造成文件损失的案例不计可数,今天要分享的是利用第三方工具将WPS文件转换成Word文档的操作方法,具体要怎么 ...

  9. 如何将PDF文件转换成清晰的图片

    将PDF文件转换成图片文件的时候,有些人就是直接用截图的方法,截图虽然简单,但是所截取的图片往往没有原来文件那么清楚,并且对多个页面操作时也会很慢.那如何将PDF文件转换成清晰的图片呢? 打开转换器选 ...

最新文章

  1. HighCharts基本使用
  2. Stimulsoft reports .net中创建变量
  3. 谈身份管理之基础篇 - 保障云上安全,从[规范账号使用]开始
  4. 年末技术总结,你也参加吧!
  5. 共享白板程序源代码_[源码和文档分享]QT实现的基于TCP Socket的共享白板
  6. EIGRP的扩展实验
  7. python机器学习库xgboost——xgboost算法
  8. Java异常处理机制(基础知识)
  9. 强化物联网连接 Silicon Labs收购Micrium
  10. CET UTC GMT CST 各种时区区别
  11. 预编译头.pch文件详解
  12. String Shifting
  13. Chrome浏览器网页保存成图片
  14. windows7 文件夹提示“您当前无权访问该文件夹”的解决方法
  15. 丅rust是什么意思_rust是什么意思_rust的翻译_音标_读音_用法_例句_爱词霸在线词典...
  16. 利用有限元数值模拟技术辅助静电场学习
  17. LaTeX 插图总结
  18. 笔记-项目整体管理-制定项目章程
  19. ADI Blackfin DSP处理器-BF533的开发详解31:汉字/ASIC II 字库(含源代码)
  20. Python基础(2.3w字,无一废话)---最新更新2021.7.18

热门文章

  1. mysql数据库备份还原表_MySQL数据库及表的备份与还原_MySQL
  2. 对无线编码缓存的一些理解
  3. Python3实现汉诺塔问题
  4. java http请求 工具类_java模拟http请求调用远程接口工具类
  5. ubuntu保存_Arch与Ubuntu安装软件对比
  6. equalwith java_java中==与equal()方法的区别
  7. php音频转换接口,PHP实现chrome表单请求数据转换为接口使用的json数据
  8. 鸿蒙设备开发环境搭建-2021-3
  9. 机器学习集成模型学习——Stacking集成学习(五)
  10. Flink Java 使用map reduce实现wordcount