| Home
| Calendar
| Mail Lists
| List Archives
| Desktop SIG
| Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings Linux Cafe | Meeting Notes | Linux Links | Bling | About BLU |
On Sat, 29 Jan 2000, Derek Martin wrote:
>This might be a good time to point out that the actual purpose of
>the cat command is not to display a file, but to conCATenate
>multiple files together.
okay, so I made my assembly cat do concatenation of several
files or accept stdin. It bloated from 444 bytes to 452. :)
Only thing it lacks that I can see is command-line flags,
but I've never used them for cat, so....
as cat.s -o cat.o
ld cat.o -o cat
strip cat
(don't forget to use as ./cat)
####
BUF_LEN = 8192
O_RDONLY = 0
.lcomm buf, BUF_LEN
.text
.globl _start #entry point declared for linker (ld)
_start:
movl $0, %ebp #default stdin if no args
pop %ecx #pop argument count
dec %ecx #is there anything on command line?
pop %ecx #skip name of program
jz .read #no, use stdin
.next:
pop %ebx #pop filename
or %ebx, %ebx
jz exit #exit if no more args
movl $5, %eax #sys_open
movl $O_RDONLY, %ecx #mode
int $0x80 #call sys_open
movl %eax, %ebp #fd returned from open()
test %eax,%eax #have we opened file?
jns .read #yes, read it
jmp exit
.read:
movl $buf, %ecx #buffer
.loop:
movl $3, %eax #sys_read
movl %ebp, %ebx #fd
movl $BUF_LEN, %edx #buffer length
int $0x80 #call sys_read
test %eax, %eax
js exit
jz .next
movl %eax, %edx
movl $4, %eax #sys_write
movl $1, %ebx #fd == 1 == stdout
int $0x80
jmp .loop
exit:
movl $1, %eax
movl $0, %ebx
int $0x80
-
Subcription/unsubscription/info requests: send e-mail with
"subscribe", "unsubscribe", or "info" on the first line of the
message body to discuss-request at blu.org (Subject line is ignored).