zoukankan      html  css  js  c++  java
  • 第六章代码记录1

    record_def.s

     1 .equ RECORD_FIRSTNAME, 0                    #记录数据:firstName:40字节 039                                                             
      2 .equ RECORD_LASTNAME, 40                    #记录数据:lastName:40字节 4079
      3 .equ RECORD_ADDRESS, 80                     #记录数据:address:240字节 80319
      4 .equ RECORD_AGE, 320                        #记录数据:age:4字节 320323
      5 .equ RECORD_SIZE, 324                       #记录数据:size:324字节 0323

    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"
      8     .rept 31                                                #填充到40字节
      9     .byte 0
     10     .endr
     11 
     12     .ascii "Bartlett"
     13     .rept 31
     14     .byte 0
     15     .endr
     16 
     17     .ascii "4242 S Prairie
    Tulsa, OK 55555"
     18     .rept 209                                               #填充到240字节
     19     .byte 0
     20     .endr
     21 
     22     .long 45
     23 
     24 record2:
     25     .ascii "Marilyn"
     26     .rept 32                                                #填充到40字节
     27     .byte 0
     28     .endr
     29 
     30     .ascii "Taylor"
     31     .rept 33
     32     .byte 0
     33     .endr
     34 
     35     .ascii "2224 S Johannan St
    Chicago, IL 12345"
     36     .rept 203                                               #填充到240字节
     37     .byte 0
     38     .endr
     39 
     40     .long 29
     41 
     42 record3:
     43     .ascii "Derrick"
     44     .rept 32                                                #填充到40字节
     45     .byte 0
     46     .endr
     47 
     48     .ascii "McIntire"
     49     .rept 31
     50     .byte 0
     51     .endr
     52 
     53     .ascii "500 W Oakland
    San Diego, CA 54321"
     54     .rept 206                                               #填充到240字节
     55     .byte 0
     56     .endr
     57 
     58     .long 36
     59 
     60     fileName:                                               #书上代码错误,另外添加
     61     .ascii "test.dat"
     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       
  • 相关阅读:
    【Networking】(转)一个非常好的epoll+线程池服务器Demo
    【算法】Logistic regression (逻辑回归) 概述
    【Linux】/dev/null 2>&1 详解
    单点登录与联合登录
    web项目报outmemory错误解决方案
    hadoop学习之HDFS
    ELK日志分析系统
    基于cookie共享的SSO中的遇到的问题
    oracle的隐式游标
    mysql截取字符串与reverse函数
  • 原文地址:https://www.cnblogs.com/guochaoxxl/p/11224739.html
Copyright © 2011-2022 走看看