6.1例题的错误_2021-07-08

.include "linux.s"
 .include "record-def.s"

 .section .data

 
 
 #写入的常量数据
 #每个数据项以空字节填充到适当的长度

 #.rept用于填充每一项。.rept告诉汇编程序将.rept和.endr之间的段重复指定次数
 #在这个程序中,次指令用于将多余的空白字符增加到每一个字段末尾以将之填满
record1:
 .ascii "Fredrick\0"
 .rept 31		#填充到40字节
 .byte 0
 .endr

 .ascii "Bartlett\0"
 .rept 31
 .byte 0
 .endr

 .ascii "4242 S Prairie\nTulsa, OK 5555\0"
 .rept 209 #填充到240字节
 .byte 0
 .endr

 .long 45

record2:
 .ascii "Marilyn\0"
 .rept 32 #填充到40
 .byte 0
 .endr

 .ascii "Taylor\0"
 .rept 33
 .byte 0
 .endr

 .ascii "2224 S Johannan St\nChicago, IL 12345\0"
 .rept 203
 .byte 0
 .endr

 .long 29

record3:
 .ascii "Derrick\0"
 .rept 32
 .byte 0
 .endr

 .ascii "McIntire\0"
 .rept 31
 .byte 0
 .endr

 .ascii "500 W Oakland\nSan Diego, CA 54321\0"
 .rept 206
 .byte 0
 .endr

 .long 36

 #这是我们要写入文件的文件名:
file_name:       #原书上这个没有就直接在下面 movl $file_name, %ebx,编译时会报错
 .ascii "test.dat\0"

 .equ ST_FILE_DESCRIPTOR,	-4
 .globl _start
_start:
 #复制栈指针到ebp
 movl %esp, %ebp
 #为描述符分配空间
 subl $4, %esp

 #打开文件
 movl $SYS_OPEN, %eax
 movl $file_name, %ebx
 movl $0101, %ecx #文件不存在则创建并打开用于写入
 
 movl $0666, %edx
 int $LINUX_SYSCALL

 #存储文件描述符
 movl %eax, ST_FILE_DESCRIPTOR(%ebp) 
 
 #写入第一条记录
 pushl ST_FILE_DESCRIPTOR(%ebp)
 pushl $record1
 call write_record
 addl $8, %esp
 
 #写第二条记录
 pushl ST_FILE_DESCRIPTOR(%ebp)
 pushl $record2
 call write_record
 addl $8, %esp

 #写第三条记录
 pushl ST_FILE_DESCRIPTOR(%ebp)
 pushl $record3
 call write_record
 addl $8, %esp

 #关闭文件描述符
 movl $SYS_CLOSE, %eax
 movl ST_FILE_DESCRIPTOR(%ebp), %ebx
 int $LINUX_SYSCALL

 #退出程序
 movl $SYS_EXIT, %eax
 movl $0, %ebx
 int $LINUX_SYSCALL

原书上的 movl $file_name, %ebx,编译时会报错
在这里插入图片描述
,需要改为#这是我们要写入文件的文件名: file_name: #原书上这个没有就直接在下面 movl $file_name, %ebx,编译时会报错 .ascii "test.dat\0"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vurtual

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值