第六章代码记录1

record_def.s

 1 .equ RECORD_FIRSTNAME, 0                    #记录数据:firstName:40字节 0~39
  2 .equ RECORD_LASTNAME, 40                    #记录数据:lastName:40字节 40~79
  3 .equ RECORD_ADDRESS, 80                     #记录数据:address:240字节 80~319
  4 .equ RECORD_AGE, 320                        #记录数据:age:4字节 320~323
  5 .equ RECORD_SIZE, 324                       #记录数据:size:324字节 0~323

linuxg.s

  1 #文件名称:linuxg。s
  2
  3 #系统调用中断号:
  4 .equ SYS_EXIT, 1
  5 .equ SYS_READ, 3
  6 .equ SYS_WRITE, 4
  7 .equ SYS_OPEN, 5
  8 .equ SYS_CLOSE, 6
  9 .equ SYS_BRK, 45
 10
 11 #调用Linux中断号:
 12 .equ LINUX_SYSCALL, 0x80
 13
 14 #标准文件描述符号
 15 .equ STDIN, 0
 16 .equ STDOUT, 1
 17 .equ STDERR, 2
 18
 19 .equ END_OF_FILE, 0  

read_record.s

  1 .include "record_def.s"
  2 .include "linuxg.s"
  3
  4 .equ ST_READ_BUFFER, 8
  5 .equ ST_FILEDES, 12
  6 .section .text
  7 .globl read_record
  8 .type read_record, @function
  9 read_record:
 10     pushl %ebp
 11     movl %esp, %ebp
 12
 13     pushl %ebx
 14     movl ST_FILEDES(%ebp), %ebx
 15     movl ST_READ_BUFFER(%ebp), %ecx
 16     movl $RECORD_SIZE, %edx
 17     movl $SYS_READ, %eax
 18     int $LINUX_SYSCALL
 19
 20     popl %ebx
 21
 22     movl %ebp, %esp
 23     popl %ebp
 24     ret  

write_record.s

  1 .include "record_def.s"
  2 .include "linuxg.s"
  3
  4 .equ ST_WRITE_BUFFER, 8
  5 .equ ST_FILEDES, 12
  6 .section .text
  7 .globl write_record
  8 .type write_record, @function
  9 write_record:
 10     pushl %ebp
 11     movl %esp, %ebp
 12
 13     pushl %ebx
 14     movl $SYS_WRITE, %eax
 15     movl ST_FILEDES(%ebp), %ebx
 16     movl ST_WRITE_BUFFER(%ebp), %ecx
 17     movl $RECORD_SIZE, %edx
 18     int $LINUX_SYSCALL
 19
 20     popl %ebx
 21
 22     movl %ebp, %esp
 23     popl %ebp
 24     ret

write_records.s

1 .include "linuxg.s"
  2 .include "record_def.s"
  3
  4 .section .data
  5
  6 record1:
  7     .ascii "Fredrick\0"
  8     .rept 31                                                #填充到40字节
  9     .byte 0
 10     .endr
 11
 12     .ascii "Bartlett\0"
 13     .rept 31
 14     .byte 0
 15     .endr
 16
 17     .ascii "4242 S Prairie\nTulsa, OK 55555\0"
 18     .rept 209                                               #填充到240字节
 19     .byte 0
 20     .endr
 21
 22     .long 45
 23
 24 record2:
 25     .ascii "Marilyn\0"
 26     .rept 32                                                #填充到40字节
 27     .byte 0
 28     .endr
 29
 30     .ascii "Taylor\0"
 31     .rept 33
 32     .byte 0
 33     .endr
 34
 35     .ascii "2224 S Johannan St\nChicago, IL 12345\0"
 36     .rept 203                                               #填充到240字节
 37     .byte 0
 38     .endr
 39
 40     .long 29
 41
 42 record3:
 43     .ascii "Derrick\0"
 44     .rept 32                                                #填充到40字节
 45     .byte 0
 46     .endr
 47
 48     .ascii "McIntire\0"
 49     .rept 31
 50     .byte 0
 51     .endr
 52
 53     .ascii "500 W Oakland\nSan Diego, CA 54321\0"
 54     .rept 206                                               #填充到240字节
 55     .byte 0
 56     .endr
 57
 58     .long 36
 59
 60     fileName:                                               #书上代码错误,另外添加
 61     .ascii "test.dat\0"
 62     .equ ST_FILE_DESCRIPTOR, -4
 63     .globl _start
 64 _start:
 65     movl %esp, %ebp
 66     subl $4, %esp
 67
 68 #打开文件
 69     movl $SYS_OPEN, %eax
 70     movl $fileName, %ebx
 71     movl $0101, %ecx
 72     movl $0666, %edx
 73     int $LINUX_SYSCALL
 74
 75     movl %eax, ST_FILE_DESCRIPTOR(%ebp)
 76
 77 #写入第一条记录
 78     pushl ST_FILE_DESCRIPTOR(%ebp)
 79     pushl $record1
 80     call write_record
 81     addl $8, %esp
 82
 83 #写入第二条记录
 84     pushl ST_FILE_DESCRIPTOR(%ebp)
 85     pushl $record2
 86     call write_record
 87     addl $8, %esp
 88
 89 #写入第三条记录
 90     pushl ST_FILE_DESCRIPTOR(%ebp)
 91     pushl $record3
 92     call write_record
 93     addl $8, %esp
 94
 95 #关闭文件
 96     movl $SYS_CLOSE, %eax
 97     movl ST_FILE_DESCRIPTOR(%ebp), %ebx
 98     int $LINUX_SYSCALL
 99
100 #退出文件
101     movl $SYS_EXIT, %eax
102     movl $0, %ebx
103     int $LINUX_SYSCALL       

原文地址:https://www.cnblogs.com/guochaoxxl/p/11224739.html

时间: 2024-08-28 01:57:52

第六章代码记录1的相关文章

20190902 On Java8 第十六章 代码校验

第十六章 代码校验 你永远不能保证你的代码是正确的,你只能证明它是错的. 测试 测试覆盖率的幻觉 测试覆盖率,同样也称为代码覆盖率,度量代码的测试百分比.百分比越高,测试的覆盖率越大. 当分析一个未知的代码库时,测试覆盖率作为一个粗略的度量是有用的.如果覆盖率工具报告的值特别低(比如,少于百分之40),则说明覆盖不够充分.然而,一个非常高的值也同样值得怀疑,这表明对编程领域了解不足的人迫使团队做出了武断的决定.覆盖工具的最佳用途是发现代码库中未测试的部分.但是,不要依赖覆盖率来得到测试质量的任何

20190903 On Java8 第十六章 代码校验

第十七章 文件 在Java7中对 文件的操作 引入了巨大的改进.这些新元素被放在 java.nio.file 包下面,过去人们通常把nio中的n理解为new即新的io,现在更应该当成是non-blocking非阻塞io(io就是input/output输入/输出). 文件操作的两个基本组件: 文件或者目录的路径: 文件本身. 文件和目录路径 Paths 一个Path对象表示一个文件或者目录的路径,是一个跨操作系统(OS)和文件系统的抽象,目的是在构造路径时不必关注底层操作系统,代码可以在不进行修

OpenGL蓝宝书第六章代码疑虑:为什么使用了GL_TEXTURE_1D??纹理和顶点间的映射是如何实现?

遇到一个大问题,明明加载纹理绑定的是GL_TEXTURE_2D glUniform1i(locCloudTex, 1); //明明默认为0,参数却不是0. 可是原书中代码确是 glGenTextures(1, &uiTexture); glBindTexture(GL_TEXTURE_1D, uiTexture); // LoadTGATexture("Clouds.tga", GL_LINEAR, GL_LINEAR, GL_CLAMP_TO_EDGE); glUniform

Python自学之旅 #新手#MacBook #《“笨办法”学Python》#第六章:常用的简易Python命令、符号、代码、格式化字符串

第六章:常用的简易Python命令.符号.代码.字符串 <“笨办法”学Python>这本书中,确实用了较多篇幅来介绍Python的一些常用简单的命令.符号.代码和字符串等,对于像我这样的自学新手,真的是非常棒,因为它们可以帮我建立接着学下去的信心和兴趣.但我在这个系列的博客当中,不打算写的这么精细,首先因为这不符合我写博的初衷和习惯,其次因为我不打算靠这写书来挣钱,最后因为我确实没有那个实力去挖掘简单东西中更深奥复杂的应用.所以,我写的这个博客,只适合像我这样的自学新手,如果想要成为大神,还是

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片:多对多关系(上)

这章介绍了怎样创建一个新的实体来管理图片,怎样使用HTML窗体来上传图片文件和使用多对多关系来使它们与产品相关,并且怎样来保存图片到文件系统中.这章也介绍了更多复杂的错误处理增加客户端错误到模型中为了把它们显示回给用户.在这章中播种数据库使用的产品图片可能在在第六章的从Apress网页站点下载代码中. 注意:如果你想遵从这章的代码,你必须完成第五章的代码或者从www.apress.com下载第五章的源代码作为一个起点. 创建实体保存图片文件名 这个项目,我们正要使用文件系统在Web项目中存储图片

语法》第六章 数组

(本文为阮一峰js标准教程的学习笔记,旨在总结该教程中涉及的知识点大纲及个人所做的一些拓展,方便作为"目录"或者"大纲"复习和查漏补缺,详细内容请参见阮一峰教程原文) 第二部分 语法 *********第六章 数组*********** 一.数组的定义1.概念:按次序排列的一组数,每个值都有编号(从0开始)整个数组用[]表示2.可以定义时赋值,也可定以后赋值.arr[0]='a';3.任何数据类型都可放入数组,[1,'1',[1,2],{},function(){}

JavaScript DOM编程艺术-学习笔记(第五章、第六章)

第五章: 1.题外话:首先大声疾呼,"js无罪",有罪的是滥用js的那些人.js的father 布兰登-艾克,当初为了应付工作,10天就赶出了这个js,事后还说人家js是c语言和self语言"约"的产物,(百度百科说的,这些).....一个可怜的孩子-js.然后命运弄"人",js此时已世人皆知.可能是因为js的毁誉参半,它老爸才不想承认它吧.如果js会说话,它可能会给它布兰登-艾克说,"你当初怎么不把*******在墙上".这

第六章整体管理、第七章范围管理--中项作业

第六章项目整体管理 1.项目整体管理的过程包括如下内容(熟练背): (1)项目启动.制定项目章程,正式授权项目或颈剐阶段的开始. (2)制定初步的项目范围说明书.编制一个初步的项目范围说明书,概要地描述项目的范围. (3)制定项目管理计划.将确定.编写.集成以及拂调所有分计划,以形成整体项目管理计划. (4)指导和管理项目的执行.执行在项强管理计划中所定义的工作以达到项目的目标. (5)监督和控制项目.监督和控制项目的启动.计划.执行和收尾过程,以达到项目管理计划所定义的项目目标. (6)整体变

增长黑客内容摘要(四五六章)

增长黑客内容摘要(四五六章) 一.第四章 4.1 职场社交巨头的用户激活秘诀 用户的数量与结成的关系网络深度直接决定了其价值的大小. 策略:1.新册用户到达“邀请好友”页面时,如果系统默认建议用户邀请的朋友数量少于4人,则他们很可能会轻易地忽略这一步骤:如果多于4人,则可能会让用户感到焦虑和麻烦:而不偏不倚刚好4人,能实现最大程度的邀请转化率.2.新注册用户源源不断地带来更多用户,同时老用户也会时不时回来看看,处理请求,或者主动发起好友邀请. 4.2 A/B测试,网站活跃率提升的法宝 备选方案模