
_init:     file format elf32-i386

Disassembly of section .text:

00000000 <main>:
char *sh_args[] = { "sh", 0 };

int
main(void)
{
   0:	8d 4c 24 04          	lea    0x4(%esp),%ecx
   4:	83 e4 f0             	and    $0xfffffff0,%esp
   7:	ff 71 fc             	pushl  0xfffffffc(%ecx)
  int pid, wpid;

  if(open("console", O_RDWR) < 0){
   a:	b8 02 00 00 00       	mov    $0x2,%eax
   f:	55                   	push   %ebp
  10:	89 e5                	mov    %esp,%ebp
  12:	53                   	push   %ebx
  13:	51                   	push   %ecx
  14:	83 ec 10             	sub    $0x10,%esp
  17:	89 44 24 04          	mov    %eax,0x4(%esp)
  1b:	c7 04 24 8a 07 00 00 	movl   $0x78a,(%esp)
  22:	e8 55 03 00 00       	call   37c <open>
  27:	85 c0                	test   %eax,%eax
  29:	0f 88 ae 00 00 00    	js     dd <main+0xdd>
    mknod("console", 1, 1);
    open("console", O_RDWR);
  }
  dup(0);  // stdout
  2f:	c7 04 24 00 00 00 00 	movl   $0x0,(%esp)
  36:	e8 79 03 00 00       	call   3b4 <dup>
  dup(0);  // stderr
  3b:	c7 04 24 00 00 00 00 	movl   $0x0,(%esp)
  42:	e8 6d 03 00 00       	call   3b4 <dup>

  for(;;){
    printf(1, "init: starting sh\n");
  47:	b8 92 07 00 00       	mov    $0x792,%eax
  4c:	89 44 24 04          	mov    %eax,0x4(%esp)
  50:	c7 04 24 01 00 00 00 	movl   $0x1,(%esp)
  57:	e8 44 04 00 00       	call   4a0 <printf>
    pid = fork();
  5c:	e8 d3 02 00 00       	call   334 <fork>
    if(pid < 0){
  61:	83 f8 00             	cmp    $0x0,%eax
  64:	89 c3                	mov    %eax,%ebx
  66:	7c 2c                	jl     94 <main+0x94>
      printf(1, "init: fork failed\n");
      exit();
    }
    if(pid == 0){
  68:	74 44                	je     ae <main+0xae>
  6a:	8d b6 00 00 00 00    	lea    0x0(%esi),%esi
      exec("sh", sh_args);
      printf(1, "init: exec sh failed\n");
      exit();
    }
    while((wpid=wait()) >= 0 && wpid != pid)
  70:	e8 cf 02 00 00       	call   344 <wait>
  75:	85 c0                	test   %eax,%eax
  77:	78 ce                	js     47 <main+0x47>
  79:	39 c3                	cmp    %eax,%ebx
  7b:	74 ca                	je     47 <main+0x47>
      printf(1, "zombie!\n");
  7d:	b8 d1 07 00 00       	mov    $0x7d1,%eax
  82:	89 44 24 04          	mov    %eax,0x4(%esp)
  86:	c7 04 24 01 00 00 00 	movl   $0x1,(%esp)
  8d:	e8 0e 04 00 00       	call   4a0 <printf>
  92:	eb dc                	jmp    70 <main+0x70>
  94:	bb a5 07 00 00       	mov    $0x7a5,%ebx
  99:	89 5c 24 04          	mov    %ebx,0x4(%esp)
  9d:	c7 04 24 01 00 00 00 	movl   $0x1,(%esp)
  a4:	e8 f7 03 00 00       	call   4a0 <printf>
  a9:	e8 8e 02 00 00       	call   33c <exit>
  ae:	b9 f4 07 00 00       	mov    $0x7f4,%ecx
  b3:	89 4c 24 04          	mov    %ecx,0x4(%esp)
  b7:	c7 04 24 b8 07 00 00 	movl   $0x7b8,(%esp)
  be:	e8 b1 02 00 00       	call   374 <exec>
  c3:	ba bb 07 00 00       	mov    $0x7bb,%edx
  c8:	89 54 24 04          	mov    %edx,0x4(%esp)
  cc:	c7 04 24 01 00 00 00 	movl   $0x1,(%esp)
  d3:	e8 c8 03 00 00       	call   4a0 <printf>
  d8:	e8 5f 02 00 00       	call   33c <exit>
  dd:	b8 01 00 00 00       	mov    $0x1,%eax
  e2:	89 44 24 08          	mov    %eax,0x8(%esp)
  e6:	b8 01 00 00 00       	mov    $0x1,%eax
  eb:	89 44 24 04          	mov    %eax,0x4(%esp)
  ef:	c7 04 24 8a 07 00 00 	movl   $0x78a,(%esp)
  f6:	e8 89 02 00 00       	call   384 <mknod>
  fb:	b8 02 00 00 00       	mov    $0x2,%eax
 100:	89 44 24 04          	mov    %eax,0x4(%esp)
 104:	c7 04 24 8a 07 00 00 	movl   $0x78a,(%esp)
 10b:	e8 6c 02 00 00       	call   37c <open>
 110:	e9 1a ff ff ff       	jmp    2f <main+0x2f>
 115:	90                   	nop    
 116:	90                   	nop    
 117:	90                   	nop    
 118:	90                   	nop    
 119:	90                   	nop    
 11a:	90                   	nop    
 11b:	90                   	nop    
 11c:	90                   	nop    
 11d:	90                   	nop    
 11e:	90                   	nop    
 11f:	90                   	nop    

00000120 <strcpy>:
#include "user.h"

char*
strcpy(char *s, char *t)
{
 120:	55                   	push   %ebp
 121:	89 e5                	mov    %esp,%ebp
 123:	53                   	push   %ebx
 124:	8b 5d 08             	mov    0x8(%ebp),%ebx
 127:	8b 4d 0c             	mov    0xc(%ebp),%ecx
 12a:	89 da                	mov    %ebx,%edx
 12c:	8d 74 26 00          	lea    0x0(%esi),%esi
  char *os;

  os = s;
  while((*s++ = *t++) != 0)
 130:	0f b6 01             	movzbl (%ecx),%eax
 133:	41                   	inc    %ecx
 134:	88 02                	mov    %al,(%edx)
 136:	42                   	inc    %edx
 137:	84 c0                	test   %al,%al
 139:	75 f5                	jne    130 <strcpy+0x10>
    ;
  return os;
}
 13b:	89 d8                	mov    %ebx,%eax
 13d:	5b                   	pop    %ebx
 13e:	5d                   	pop    %ebp
 13f:	c3                   	ret    

00000140 <strcmp>:

int
strcmp(const char *p, const char *q)
{
 140:	55                   	push   %ebp
 141:	89 e5                	mov    %esp,%ebp
 143:	8b 55 08             	mov    0x8(%ebp),%edx
 146:	8b 4d 0c             	mov    0xc(%ebp),%ecx
  while(*p && *p == *q)
 149:	0f b6 02             	movzbl (%edx),%eax
 14c:	84 c0                	test   %al,%al
 14e:	75 0c                	jne    15c <strcmp+0x1c>
 150:	eb 10                	jmp    162 <strcmp+0x22>
 152:	0f b6 42 01          	movzbl 0x1(%edx),%eax
    p++, q++;
 156:	41                   	inc    %ecx
 157:	84 c0                	test   %al,%al
 159:	74 07                	je     162 <strcmp+0x22>
 15b:	42                   	inc    %edx
 15c:	3a 01                	cmp    (%ecx),%al
 15e:	89 f6                	mov    %esi,%esi
 160:	74 f0                	je     152 <strcmp+0x12>
 162:	0f b6 11             	movzbl (%ecx),%edx
 165:	0f b6 c0             	movzbl %al,%eax
  return (uchar)*p - (uchar)*q;
}
 168:	5d                   	pop    %ebp
 169:	29 d0                	sub    %edx,%eax
 16b:	c3                   	ret    
 16c:	8d 74 26 00          	lea    0x0(%esi),%esi

00000170 <strlen>:

uint
strlen(char *s)
{
 170:	55                   	push   %ebp
  int n;

  for(n = 0; s[n]; n++)
 171:	31 c0                	xor    %eax,%eax
 173:	89 e5                	mov    %esp,%ebp
 175:	8b 55 08             	mov    0x8(%ebp),%edx
 178:	80 3a 00             	cmpb   $0x0,(%edx)
 17b:	74 0a                	je     187 <strlen+0x17>
 17d:	8d 76 00             	lea    0x0(%esi),%esi
 180:	40                   	inc    %eax
 181:	80 3c 10 00          	cmpb   $0x0,(%eax,%edx,1)
 185:	75 f9                	jne    180 <strlen+0x10>
    ;
  return n;
}
 187:	5d                   	pop    %ebp
 188:	c3                   	ret    
 189:	8d b4 26 00 00 00 00 	lea    0x0(%esi),%esi

00000190 <memset>:

void*
memset(void *dst, int c, uint n)
{
 190:	55                   	push   %ebp
 191:	89 e5                	mov    %esp,%ebp
 193:	8b 45 10             	mov    0x10(%ebp),%eax
 196:	53                   	push   %ebx
 197:	8b 5d 08             	mov    0x8(%ebp),%ebx
  char *d;
  
  d = dst;
  while(n-- > 0)
 19a:	85 c0                	test   %eax,%eax
 19c:	74 1a                	je     1b8 <memset+0x28>
 19e:	0f b6 4d 0c          	movzbl 0xc(%ebp),%ecx
 1a2:	31 d2                	xor    %edx,%edx
 1a4:	8d b6 00 00 00 00    	lea    0x0(%esi),%esi
 1aa:	8d bf 00 00 00 00    	lea    0x0(%edi),%edi
    *d++ = c;
 1b0:	88 0c 1a             	mov    %cl,(%edx,%ebx,1)
 1b3:	42                   	inc    %edx
 1b4:	39 d0                	cmp    %edx,%eax
 1b6:	75 f8                	jne    1b0 <memset+0x20>
  return dst;
}
 1b8:	89 d8                	mov    %ebx,%eax
 1ba:	5b                   	pop    %ebx
 1bb:	5d                   	pop    %ebp
 1bc:	c3                   	ret    
 1bd:	8d 76 00             	lea    0x0(%esi),%esi

000001c0 <strchr>:

char*
strchr(const char *s, char c)
{
 1c0:	55                   	push   %ebp
 1c1:	89 e5                	mov    %esp,%ebp
 1c3:	8b 45 08             	mov    0x8(%ebp),%eax
 1c6:	0f b6 4d 0c          	movzbl 0xc(%ebp),%ecx
  for(; *s; s++)
 1ca:	0f b6 10             	movzbl (%eax),%edx
 1cd:	84 d2                	test   %dl,%dl
 1cf:	74 19                	je     1ea <strchr+0x2a>
    if(*s == c)
 1d1:	38 d1                	cmp    %dl,%cl
 1d3:	75 0d                	jne    1e2 <strchr+0x22>
 1d5:	eb 15                	jmp    1ec <strchr+0x2c>
 1d7:	38 ca                	cmp    %cl,%dl
 1d9:	8d b4 26 00 00 00 00 	lea    0x0(%esi),%esi
 1e0:	74 0a                	je     1ec <strchr+0x2c>
 1e2:	40                   	inc    %eax
 1e3:	0f b6 10             	movzbl (%eax),%edx
 1e6:	84 d2                	test   %dl,%dl
 1e8:	75 ed                	jne    1d7 <strchr+0x17>
 1ea:	31 c0                	xor    %eax,%eax
      return (char*) s;
  return 0;
}
 1ec:	5d                   	pop    %ebp
 1ed:	c3                   	ret    
 1ee:	89 f6                	mov    %esi,%esi

000001f0 <atoi>:

char*
gets(char *buf, int max)
{
  int i, cc;
  char c;

  for(i=0; i+1 < max; ){
    cc = read(0, &c, 1);
    if(cc < 1)
      break;
    buf[i++] = c;
    if(c == '\n' || c == '\r')
      break;
  }
  buf[i] = '\0';
  return buf;
}

int
stat(char *n, struct stat *st)
{
  int fd;
  int r;

  fd = open(n, O_RDONLY);
  if(fd < 0)
    return -1;
  r = fstat(fd, st);
  close(fd);
  return r;
}

int
atoi(const char *s)
{
 1f0:	55                   	push   %ebp
 1f1:	89 e5                	mov    %esp,%ebp
 1f3:	8b 4d 08             	mov    0x8(%ebp),%ecx
 1f6:	53                   	push   %ebx
  int n;

  n = 0;
  while('0' <= *s && *s <= '9')
 1f7:	31 db                	xor    %ebx,%ebx
 1f9:	0f b6 11             	movzbl (%ecx),%edx
 1fc:	88 d0                	mov    %dl,%al
 1fe:	2c 30                	sub    $0x30,%al
 200:	3c 09                	cmp    $0x9,%al
 202:	77 23                	ja     227 <atoi+0x37>
 204:	8d b6 00 00 00 00    	lea    0x0(%esi),%esi
 20a:	8d bf 00 00 00 00    	lea    0x0(%edi),%edi
    n = n*10 + *s++ - '0';
 210:	8d 04 9b             	lea    (%ebx,%ebx,4),%eax
 213:	0f be d2             	movsbl %dl,%edx
 216:	8d 5c 42 d0          	lea    0xffffffd0(%edx,%eax,2),%ebx
 21a:	0f b6 51 01          	movzbl 0x1(%ecx),%edx
 21e:	41                   	inc    %ecx
 21f:	88 d0                	mov    %dl,%al
 221:	2c 30                	sub    $0x30,%al
 223:	3c 09                	cmp    $0x9,%al
 225:	76 e9                	jbe    210 <atoi+0x20>
  return n;
}
 227:	89 d8                	mov    %ebx,%eax
 229:	5b                   	pop    %ebx
 22a:	5d                   	pop    %ebp
 22b:	c3                   	ret    
 22c:	8d 74 26 00          	lea    0x0(%esi),%esi

00000230 <memmove>:

void*
memmove(void *vdst, void *vsrc, int n)
{
 230:	55                   	push   %ebp
 231:	89 e5                	mov    %esp,%ebp
 233:	8b 4d 10             	mov    0x10(%ebp),%ecx
 236:	56                   	push   %esi
 237:	8b 75 08             	mov    0x8(%ebp),%esi
 23a:	53                   	push   %ebx
 23b:	8b 5d 0c             	mov    0xc(%ebp),%ebx
  char *dst, *src;
  
  dst = vdst;
  src = vsrc;
  while(n-- > 0)
 23e:	85 c9                	test   %ecx,%ecx
 240:	7e 1a                	jle    25c <memmove+0x2c>
 242:	31 d2                	xor    %edx,%edx
 244:	8d b6 00 00 00 00    	lea    0x0(%esi),%esi
 24a:	8d bf 00 00 00 00    	lea    0x0(%edi),%edi
    *dst++ = *src++;
 250:	0f b6 04 1a          	movzbl (%edx,%ebx,1),%eax
 254:	88 04 32             	mov    %al,(%edx,%esi,1)
 257:	42                   	inc    %edx
 258:	39 ca                	cmp    %ecx,%edx
 25a:	75 f4                	jne    250 <memmove+0x20>
  return vdst;
}
 25c:	5b                   	pop    %ebx
 25d:	89 f0                	mov    %esi,%eax
 25f:	5e                   	pop    %esi
 260:	5d                   	pop    %ebp
 261:	c3                   	ret    
 262:	8d b4 26 00 00 00 00 	lea    0x0(%esi),%esi
 269:	8d bc 27 00 00 00 00 	lea    0x0(%edi),%edi

00000270 <stat>:
 270:	55                   	push   %ebp
 271:	31 c0                	xor    %eax,%eax
 273:	89 e5                	mov    %esp,%ebp
 275:	83 ec 18             	sub    $0x18,%esp
 278:	89 44 24 04          	mov    %eax,0x4(%esp)
 27c:	8b 45 08             	mov    0x8(%ebp),%eax
 27f:	89 5d f8             	mov    %ebx,0xfffffff8(%ebp)
 282:	89 75 fc             	mov    %esi,0xfffffffc(%ebp)
 285:	be ff ff ff ff       	mov    $0xffffffff,%esi
 28a:	89 04 24             	mov    %eax,(%esp)
 28d:	e8 ea 00 00 00       	call   37c <open>
 292:	85 c0                	test   %eax,%eax
 294:	89 c3                	mov    %eax,%ebx
 296:	78 19                	js     2b1 <stat+0x41>
 298:	8b 45 0c             	mov    0xc(%ebp),%eax
 29b:	89 1c 24             	mov    %ebx,(%esp)
 29e:	89 44 24 04          	mov    %eax,0x4(%esp)
 2a2:	e8 ed 00 00 00       	call   394 <fstat>
 2a7:	89 1c 24             	mov    %ebx,(%esp)
 2aa:	89 c6                	mov    %eax,%esi
 2ac:	e8 b3 00 00 00       	call   364 <close>
 2b1:	89 f0                	mov    %esi,%eax
 2b3:	8b 5d f8             	mov    0xfffffff8(%ebp),%ebx
 2b6:	8b 75 fc             	mov    0xfffffffc(%ebp),%esi
 2b9:	89 ec                	mov    %ebp,%esp
 2bb:	5d                   	pop    %ebp
 2bc:	c3                   	ret    
 2bd:	8d 76 00             	lea    0x0(%esi),%esi

000002c0 <gets>:
 2c0:	55                   	push   %ebp
 2c1:	89 e5                	mov    %esp,%ebp
 2c3:	57                   	push   %edi
 2c4:	56                   	push   %esi
 2c5:	31 f6                	xor    %esi,%esi
 2c7:	53                   	push   %ebx
 2c8:	83 ec 1c             	sub    $0x1c,%esp
 2cb:	8d 5e 01             	lea    0x1(%esi),%ebx
 2ce:	8b 7d 08             	mov    0x8(%ebp),%edi
 2d1:	3b 5d 0c             	cmp    0xc(%ebp),%ebx
 2d4:	7d 3e                	jge    314 <gets+0x54>
 2d6:	ba 01 00 00 00       	mov    $0x1,%edx
 2db:	8d 45 f3             	lea    0xfffffff3(%ebp),%eax
 2de:	89 54 24 08          	mov    %edx,0x8(%esp)
 2e2:	89 44 24 04          	mov    %eax,0x4(%esp)
 2e6:	c7 04 24 00 00 00 00 	movl   $0x0,(%esp)
 2ed:	e8 62 00 00 00       	call   354 <read>
 2f2:	85 c0                	test   %eax,%eax
 2f4:	7e 1e                	jle    314 <gets+0x54>
 2f6:	0f b6 45 f3          	movzbl 0xfffffff3(%ebp),%eax
 2fa:	88 44 3b ff          	mov    %al,0xffffffff(%ebx,%edi,1)
 2fe:	0f b6 45 f3          	movzbl 0xfffffff3(%ebp),%eax
 302:	3c 0a                	cmp    $0xa,%al
 304:	74 1c                	je     322 <gets+0x62>
 306:	3c 0d                	cmp    $0xd,%al
 308:	74 18                	je     322 <gets+0x62>
 30a:	89 de                	mov    %ebx,%esi
 30c:	8d 5e 01             	lea    0x1(%esi),%ebx
 30f:	3b 5d 0c             	cmp    0xc(%ebp),%ebx
 312:	7c c2                	jl     2d6 <gets+0x16>
 314:	c6 04 3e 00          	movb   $0x0,(%esi,%edi,1)
 318:	83 c4 1c             	add    $0x1c,%esp
 31b:	89 f8                	mov    %edi,%eax
 31d:	5b                   	pop    %ebx
 31e:	5e                   	pop    %esi
 31f:	5f                   	pop    %edi
 320:	5d                   	pop    %ebp
 321:	c3                   	ret    
 322:	89 de                	mov    %ebx,%esi
 324:	89 f8                	mov    %edi,%eax
 326:	c6 04 3e 00          	movb   $0x0,(%esi,%edi,1)
 32a:	83 c4 1c             	add    $0x1c,%esp
 32d:	5b                   	pop    %ebx
 32e:	5e                   	pop    %esi
 32f:	5f                   	pop    %edi
 330:	5d                   	pop    %ebp
 331:	c3                   	ret    
 332:	90                   	nop    
 333:	90                   	nop    

00000334 <fork>:
 334:	b8 01 00 00 00       	mov    $0x1,%eax
 339:	cd 30                	int    $0x30
 33b:	c3                   	ret    

0000033c <exit>:
 33c:	b8 02 00 00 00       	mov    $0x2,%eax
 341:	cd 30                	int    $0x30
 343:	c3                   	ret    

00000344 <wait>:
 344:	b8 03 00 00 00       	mov    $0x3,%eax
 349:	cd 30                	int    $0x30
 34b:	c3                   	ret    

0000034c <pipe>:
 34c:	b8 04 00 00 00       	mov    $0x4,%eax
 351:	cd 30                	int    $0x30
 353:	c3                   	ret    

00000354 <read>:
 354:	b8 06 00 00 00       	mov    $0x6,%eax
 359:	cd 30                	int    $0x30
 35b:	c3                   	ret    

0000035c <write>:
 35c:	b8 05 00 00 00       	mov    $0x5,%eax
 361:	cd 30                	int    $0x30
 363:	c3                   	ret    

00000364 <close>:
 364:	b8 07 00 00 00       	mov    $0x7,%eax
 369:	cd 30                	int    $0x30
 36b:	c3                   	ret    

0000036c <kill>:
 36c:	b8 08 00 00 00       	mov    $0x8,%eax
 371:	cd 30                	int    $0x30
 373:	c3                   	ret    

00000374 <exec>:
 374:	b8 09 00 00 00       	mov    $0x9,%eax
 379:	cd 30                	int    $0x30
 37b:	c3                   	ret    

0000037c <open>:
 37c:	b8 0a 00 00 00       	mov    $0xa,%eax
 381:	cd 30                	int    $0x30
 383:	c3                   	ret    

00000384 <mknod>:
 384:	b8 0b 00 00 00       	mov    $0xb,%eax
 389:	cd 30                	int    $0x30
 38b:	c3                   	ret    

0000038c <unlink>:
 38c:	b8 0c 00 00 00       	mov    $0xc,%eax
 391:	cd 30                	int    $0x30
 393:	c3                   	ret    

00000394 <fstat>:
 394:	b8 0d 00 00 00       	mov    $0xd,%eax
 399:	cd 30                	int    $0x30
 39b:	c3                   	ret    

0000039c <link>:
 39c:	b8 0e 00 00 00       	mov    $0xe,%eax
 3a1:	cd 30                	int    $0x30
 3a3:	c3                   	ret    

000003a4 <mkdir>:
 3a4:	b8 0f 00 00 00       	mov    $0xf,%eax
 3a9:	cd 30                	int    $0x30
 3ab:	c3                   	ret    

000003ac <chdir>:
 3ac:	b8 10 00 00 00       	mov    $0x10,%eax
 3b1:	cd 30                	int    $0x30
 3b3:	c3                   	ret    

000003b4 <dup>:
 3b4:	b8 11 00 00 00       	mov    $0x11,%eax
 3b9:	cd 30                	int    $0x30
 3bb:	c3                   	ret    

000003bc <getpid>:
 3bc:	b8 12 00 00 00       	mov    $0x12,%eax
 3c1:	cd 30                	int    $0x30
 3c3:	c3                   	ret    

000003c4 <sbrk>:
 3c4:	b8 13 00 00 00       	mov    $0x13,%eax
 3c9:	cd 30                	int    $0x30
 3cb:	c3                   	ret    

000003cc <sleep>:
 3cc:	b8 14 00 00 00       	mov    $0x14,%eax
 3d1:	cd 30                	int    $0x30
 3d3:	c3                   	ret    
 3d4:	90                   	nop    
 3d5:	90                   	nop    
 3d6:	90                   	nop    
 3d7:	90                   	nop    
 3d8:	90                   	nop    
 3d9:	90                   	nop    
 3da:	90                   	nop    
 3db:	90                   	nop    
 3dc:	90                   	nop    
 3dd:	90                   	nop    
 3de:	90                   	nop    
 3df:	90                   	nop    

000003e0 <putc>:
#include "user.h"

static void
putc(int fd, char c)
{
 3e0:	55                   	push   %ebp
 3e1:	89 e5                	mov    %esp,%ebp
 3e3:	83 ec 18             	sub    $0x18,%esp
 3e6:	88 55 fc             	mov    %dl,0xfffffffc(%ebp)
  write(fd, &c, 1);
 3e9:	ba 01 00 00 00       	mov    $0x1,%edx
 3ee:	89 54 24 08          	mov    %edx,0x8(%esp)
 3f2:	8d 55 fc             	lea    0xfffffffc(%ebp),%edx
 3f5:	89 54 24 04          	mov    %edx,0x4(%esp)
 3f9:	89 04 24             	mov    %eax,(%esp)
 3fc:	e8 5b ff ff ff       	call   35c <write>
}
 401:	c9                   	leave  
 402:	c3                   	ret    
 403:	8d b6 00 00 00 00    	lea    0x0(%esi),%esi
 409:	8d bc 27 00 00 00 00 	lea    0x0(%edi),%edi

00000410 <printint>:

static void
printint(int fd, int xx, int base, int sgn)
{
 410:	55                   	push   %ebp
 411:	89 e5                	mov    %esp,%ebp
 413:	57                   	push   %edi
 414:	56                   	push   %esi
 415:	89 ce                	mov    %ecx,%esi
 417:	53                   	push   %ebx
 418:	83 ec 1c             	sub    $0x1c,%esp
  static char digits[] = "0123456789ABCDEF";
  char buf[16];
  int i, neg;
  uint x;

  neg = 0;
  if(sgn && xx < 0){
 41b:	8b 5d 08             	mov    0x8(%ebp),%ebx
 41e:	89 45 dc             	mov    %eax,0xffffffdc(%ebp)
 421:	85 db                	test   %ebx,%ebx
 423:	74 04                	je     429 <printint+0x19>
 425:	85 d2                	test   %edx,%edx
 427:	78 62                	js     48b <printint+0x7b>
    neg = 1;
    x = -xx;
  } else {
    x = xx;
 429:	89 d0                	mov    %edx,%eax
 42b:	c7 45 e0 00 00 00 00 	movl   $0x0,0xffffffe0(%ebp)
 432:	31 db                	xor    %ebx,%ebx
 434:	8d 7d e4             	lea    0xffffffe4(%ebp),%edi
 437:	89 f6                	mov    %esi,%esi
 439:	8d bc 27 00 00 00 00 	lea    0x0(%edi),%edi
  }

  i = 0;
  do{
    buf[i++] = digits[x % base];
 440:	31 d2                	xor    %edx,%edx
 442:	f7 f6                	div    %esi
 444:	89 c1                	mov    %eax,%ecx
 446:	0f b6 82 e1 07 00 00 	movzbl 0x7e1(%edx),%eax
 44d:	88 04 3b             	mov    %al,(%ebx,%edi,1)
 450:	43                   	inc    %ebx
  }while((x /= base) != 0);
 451:	85 c9                	test   %ecx,%ecx
 453:	89 c8                	mov    %ecx,%eax
 455:	75 e9                	jne    440 <printint+0x30>
  if(neg)
 457:	8b 4d e0             	mov    0xffffffe0(%ebp),%ecx
 45a:	85 c9                	test   %ecx,%ecx
 45c:	74 06                	je     464 <printint+0x54>
    buf[i++] = '-';
 45e:	c6 44 1d e4 2d       	movb   $0x2d,0xffffffe4(%ebp,%ebx,1)
 463:	43                   	inc    %ebx

  while(--i >= 0)
 464:	4b                   	dec    %ebx
 465:	78 1c                	js     483 <printint+0x73>
 467:	89 f6                	mov    %esi,%esi
 469:	8d bc 27 00 00 00 00 	lea    0x0(%edi),%edi
    putc(fd, buf[i]);
 470:	0f be 54 1d e4       	movsbl 0xffffffe4(%ebp,%ebx,1),%edx
 475:	4b                   	dec    %ebx
 476:	8b 45 dc             	mov    0xffffffdc(%ebp),%eax
 479:	e8 62 ff ff ff       	call   3e0 <putc>
 47e:	83 fb ff             	cmp    $0xffffffff,%ebx
 481:	75 ed                	jne    470 <printint+0x60>
}
 483:	83 c4 1c             	add    $0x1c,%esp
 486:	5b                   	pop    %ebx
 487:	5e                   	pop    %esi
 488:	5f                   	pop    %edi
 489:	5d                   	pop    %ebp
 48a:	c3                   	ret    
 48b:	89 d0                	mov    %edx,%eax
 48d:	f7 d8                	neg    %eax
 48f:	c7 45 e0 01 00 00 00 	movl   $0x1,0xffffffe0(%ebp)
 496:	eb 9a                	jmp    432 <printint+0x22>
 498:	90                   	nop    
 499:	8d b4 26 00 00 00 00 	lea    0x0(%esi),%esi

000004a0 <printf>:

// Print to the given fd. Only understands %d, %x, %p, %s.
void
printf(int fd, char *fmt, ...)
{
 4a0:	55                   	push   %ebp
 4a1:	89 e5                	mov    %esp,%ebp
 4a3:	57                   	push   %edi
 4a4:	56                   	push   %esi
 4a5:	53                   	push   %ebx
 4a6:	83 ec 0c             	sub    $0xc,%esp
  char *s;
  int c, i, state;
  uint *ap;

  state = 0;
  ap = (uint*)(void*)&fmt + 1;
  for(i = 0; fmt[i]; i++){
 4a9:	8b 55 0c             	mov    0xc(%ebp),%edx
 4ac:	0f b6 02             	movzbl (%edx),%eax
 4af:	84 c0                	test   %al,%al
 4b1:	0f 84 99 00 00 00    	je     550 <printf+0xb0>
 4b7:	8d 4d 10             	lea    0x10(%ebp),%ecx
 4ba:	31 ff                	xor    %edi,%edi
 4bc:	31 f6                	xor    %esi,%esi
 4be:	89 4d f0             	mov    %ecx,0xfffffff0(%ebp)
 4c1:	eb 26                	jmp    4e9 <printf+0x49>
    c = fmt[i] & 0xff;
    if(state == 0){
      if(c == '%'){
 4c3:	83 fb 25             	cmp    $0x25,%ebx
 4c6:	0f 85 8c 00 00 00    	jne    558 <printf+0xb8>
 4cc:	be 25 00 00 00       	mov    $0x25,%esi
 4d1:	eb 0d                	jmp    4e0 <printf+0x40>
 4d3:	90                   	nop    
 4d4:	90                   	nop    
 4d5:	90                   	nop    
 4d6:	90                   	nop    
 4d7:	90                   	nop    
 4d8:	90                   	nop    
 4d9:	90                   	nop    
 4da:	90                   	nop    
 4db:	90                   	nop    
 4dc:	90                   	nop    
 4dd:	90                   	nop    
 4de:	90                   	nop    
 4df:	90                   	nop    
 4e0:	47                   	inc    %edi
 4e1:	0f b6 04 3a          	movzbl (%edx,%edi,1),%eax
 4e5:	84 c0                	test   %al,%al
 4e7:	74 67                	je     550 <printf+0xb0>
 4e9:	85 f6                	test   %esi,%esi
 4eb:	0f b6 d8             	movzbl %al,%ebx
 4ee:	74 d3                	je     4c3 <printf+0x23>
        state = '%';
      } else {
        putc(fd, c);
      }
    } else if(state == '%'){
 4f0:	83 fe 25             	cmp    $0x25,%esi
 4f3:	75 eb                	jne    4e0 <printf+0x40>
      if(c == 'd'){
 4f5:	83 fb 64             	cmp    $0x64,%ebx
 4f8:	0f 84 e0 00 00 00    	je     5de <printf+0x13e>
        printint(fd, *ap, 10, 1);
        ap++;
      } else if(c == 'x' || c == 'p'){
 4fe:	83 fb 78             	cmp    $0x78,%ebx
 501:	74 68                	je     56b <printf+0xcb>
 503:	83 fb 70             	cmp    $0x70,%ebx
 506:	74 63                	je     56b <printf+0xcb>
        printint(fd, *ap, 16, 0);
        ap++;
      } else if(c == 's'){
 508:	83 fb 73             	cmp    $0x73,%ebx
 50b:	90                   	nop    
 50c:	8d 74 26 00          	lea    0x0(%esi),%esi
 510:	0f 84 7c 00 00 00    	je     592 <printf+0xf2>
        s = (char*)*ap;
        ap++;
        if(s == 0)
          s = "(null)";
        while(*s != 0){
          putc(fd, *s);
          s++;
        }
      } else if(c == 'c'){
 516:	83 fb 63             	cmp    $0x63,%ebx
 519:	0f 84 e4 00 00 00    	je     603 <printf+0x163>
        putc(fd, *ap);
        ap++;
      } else if(c == '%'){
 51f:	83 fb 25             	cmp    $0x25,%ebx
 522:	0f 84 c4 00 00 00    	je     5ec <printf+0x14c>
        putc(fd, c);
      } else {
        // Unknown % sequence.  Print it to draw attention.
        putc(fd, '%');
 528:	8b 45 08             	mov    0x8(%ebp),%eax
 52b:	ba 25 00 00 00       	mov    $0x25,%edx
 530:	47                   	inc    %edi
        putc(fd, c);
 531:	31 f6                	xor    %esi,%esi
 533:	e8 a8 fe ff ff       	call   3e0 <putc>
 538:	8b 45 08             	mov    0x8(%ebp),%eax
 53b:	0f be d3             	movsbl %bl,%edx
 53e:	e8 9d fe ff ff       	call   3e0 <putc>
 543:	8b 55 0c             	mov    0xc(%ebp),%edx
 546:	0f b6 04 3a          	movzbl (%edx,%edi,1),%eax
 54a:	84 c0                	test   %al,%al
 54c:	75 9b                	jne    4e9 <printf+0x49>
 54e:	89 f6                	mov    %esi,%esi
      }
      state = 0;
    }
  }
}
 550:	83 c4 0c             	add    $0xc,%esp
 553:	5b                   	pop    %ebx
 554:	5e                   	pop    %esi
 555:	5f                   	pop    %edi
 556:	5d                   	pop    %ebp
 557:	c3                   	ret    
 558:	8b 45 08             	mov    0x8(%ebp),%eax
 55b:	0f be d3             	movsbl %bl,%edx
 55e:	e8 7d fe ff ff       	call   3e0 <putc>
 563:	8b 55 0c             	mov    0xc(%ebp),%edx
 566:	e9 75 ff ff ff       	jmp    4e0 <printf+0x40>
 56b:	c7 04 24 00 00 00 00 	movl   $0x0,(%esp)
 572:	b9 10 00 00 00       	mov    $0x10,%ecx
 577:	8b 45 f0             	mov    0xfffffff0(%ebp),%eax
 57a:	31 f6                	xor    %esi,%esi
 57c:	8b 10                	mov    (%eax),%edx
 57e:	8b 45 08             	mov    0x8(%ebp),%eax
 581:	e8 8a fe ff ff       	call   410 <printint>
 586:	8b 55 0c             	mov    0xc(%ebp),%edx
 589:	83 45 f0 04          	addl   $0x4,0xfffffff0(%ebp)
 58d:	e9 4e ff ff ff       	jmp    4e0 <printf+0x40>
 592:	8b 4d f0             	mov    0xfffffff0(%ebp),%ecx
 595:	8b 01                	mov    (%ecx),%eax
 597:	83 c1 04             	add    $0x4,%ecx
 59a:	89 4d f0             	mov    %ecx,0xfffffff0(%ebp)
 59d:	b9 da 07 00 00       	mov    $0x7da,%ecx
 5a2:	85 c0                	test   %eax,%eax
 5a4:	74 02                	je     5a8 <printf+0x108>
 5a6:	89 c1                	mov    %eax,%ecx
 5a8:	0f b6 01             	movzbl (%ecx),%eax
 5ab:	84 c0                	test   %al,%al
 5ad:	74 28                	je     5d7 <printf+0x137>
 5af:	89 cb                	mov    %ecx,%ebx
 5b1:	eb 0d                	jmp    5c0 <printf+0x120>
 5b3:	90                   	nop    
 5b4:	90                   	nop    
 5b5:	90                   	nop    
 5b6:	90                   	nop    
 5b7:	90                   	nop    
 5b8:	90                   	nop    
 5b9:	90                   	nop    
 5ba:	90                   	nop    
 5bb:	90                   	nop    
 5bc:	90                   	nop    
 5bd:	90                   	nop    
 5be:	90                   	nop    
 5bf:	90                   	nop    
 5c0:	0f be d0             	movsbl %al,%edx
 5c3:	8b 45 08             	mov    0x8(%ebp),%eax
 5c6:	e8 15 fe ff ff       	call   3e0 <putc>
 5cb:	0f b6 43 01          	movzbl 0x1(%ebx),%eax
 5cf:	43                   	inc    %ebx
 5d0:	84 c0                	test   %al,%al
 5d2:	75 ec                	jne    5c0 <printf+0x120>
 5d4:	8b 55 0c             	mov    0xc(%ebp),%edx
 5d7:	31 f6                	xor    %esi,%esi
 5d9:	e9 02 ff ff ff       	jmp    4e0 <printf+0x40>
 5de:	b9 0a 00 00 00       	mov    $0xa,%ecx
 5e3:	c7 04 24 01 00 00 00 	movl   $0x1,(%esp)
 5ea:	eb 8b                	jmp    577 <printf+0xd7>
 5ec:	8b 45 08             	mov    0x8(%ebp),%eax
 5ef:	ba 25 00 00 00       	mov    $0x25,%edx
 5f4:	31 f6                	xor    %esi,%esi
 5f6:	e8 e5 fd ff ff       	call   3e0 <putc>
 5fb:	8b 55 0c             	mov    0xc(%ebp),%edx
 5fe:	e9 dd fe ff ff       	jmp    4e0 <printf+0x40>
 603:	8b 45 f0             	mov    0xfffffff0(%ebp),%eax
 606:	31 f6                	xor    %esi,%esi
 608:	0f be 10             	movsbl (%eax),%edx
 60b:	8b 45 08             	mov    0x8(%ebp),%eax
 60e:	e8 cd fd ff ff       	call   3e0 <putc>
 613:	8b 55 0c             	mov    0xc(%ebp),%edx
 616:	83 45 f0 04          	addl   $0x4,0xfffffff0(%ebp)
 61a:	e9 c1 fe ff ff       	jmp    4e0 <printf+0x40>
 61f:	90                   	nop    

00000620 <free>:
static Header *freep;

void
free(void *ap)
{
 620:	55                   	push   %ebp
  Header *bp, *p;

  bp = (Header*) ap - 1;
  for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
 621:	8b 0d 04 08 00 00    	mov    0x804,%ecx
 627:	89 e5                	mov    %esp,%ebp
 629:	56                   	push   %esi
 62a:	53                   	push   %ebx
 62b:	8b 5d 08             	mov    0x8(%ebp),%ebx
 62e:	83 eb 08             	sub    $0x8,%ebx
 631:	eb 0d                	jmp    640 <free+0x20>
 633:	90                   	nop    
 634:	90                   	nop    
 635:	90                   	nop    
 636:	90                   	nop    
 637:	90                   	nop    
 638:	90                   	nop    
 639:	90                   	nop    
 63a:	90                   	nop    
 63b:	90                   	nop    
 63c:	90                   	nop    
 63d:	90                   	nop    
 63e:	90                   	nop    
 63f:	90                   	nop    
 640:	39 d9                	cmp    %ebx,%ecx
 642:	73 04                	jae    648 <free+0x28>
 644:	3b 19                	cmp    (%ecx),%ebx
 646:	72 12                	jb     65a <free+0x3a>
    if(p >= p->s.ptr && (bp > p || bp < p->s.ptr))
 648:	8b 11                	mov    (%ecx),%edx
 64a:	39 d1                	cmp    %edx,%ecx
 64c:	72 08                	jb     656 <free+0x36>
 64e:	39 d9                	cmp    %ebx,%ecx
 650:	72 0a                	jb     65c <free+0x3c>
 652:	39 d3                	cmp    %edx,%ebx
 654:	72 06                	jb     65c <free+0x3c>
 656:	89 d1                	mov    %edx,%ecx
 658:	eb e6                	jmp    640 <free+0x20>
 65a:	8b 11                	mov    (%ecx),%edx
      break;
  if(bp + bp->s.size == p->s.ptr){
 65c:	8b 73 04             	mov    0x4(%ebx),%esi
 65f:	8d 04 f3             	lea    (%ebx,%esi,8),%eax
 662:	39 d0                	cmp    %edx,%eax
 664:	74 2e                	je     694 <free+0x74>
    bp->s.size += p->s.ptr->s.size;
    bp->s.ptr = p->s.ptr->s.ptr;
  } else
    bp->s.ptr = p->s.ptr;
 666:	89 13                	mov    %edx,(%ebx)
  if(p + p->s.size == bp){
 668:	8b 51 04             	mov    0x4(%ecx),%edx
 66b:	8d 04 d1             	lea    (%ecx,%edx,8),%eax
 66e:	39 c3                	cmp    %eax,%ebx
 670:	74 0c                	je     67e <free+0x5e>
    p->s.size += bp->s.size;
    p->s.ptr = bp->s.ptr;
  } else
    p->s.ptr = bp;
 672:	89 19                	mov    %ebx,(%ecx)
  freep = p;
}
 674:	5b                   	pop    %ebx
 675:	89 0d 04 08 00 00    	mov    %ecx,0x804
 67b:	5e                   	pop    %esi
 67c:	5d                   	pop    %ebp
 67d:	c3                   	ret    
 67e:	8b 43 04             	mov    0x4(%ebx),%eax
 681:	01 c2                	add    %eax,%edx
 683:	8b 03                	mov    (%ebx),%eax
 685:	89 51 04             	mov    %edx,0x4(%ecx)
 688:	89 01                	mov    %eax,(%ecx)
 68a:	5b                   	pop    %ebx
 68b:	89 0d 04 08 00 00    	mov    %ecx,0x804
 691:	5e                   	pop    %esi
 692:	5d                   	pop    %ebp
 693:	c3                   	ret    
 694:	8b 42 04             	mov    0x4(%edx),%eax
 697:	01 c6                	add    %eax,%esi
 699:	8b 02                	mov    (%edx),%eax
 69b:	89 73 04             	mov    %esi,0x4(%ebx)
 69e:	89 03                	mov    %eax,(%ebx)
 6a0:	eb c6                	jmp    668 <free+0x48>
 6a2:	8d b4 26 00 00 00 00 	lea    0x0(%esi),%esi
 6a9:	8d bc 27 00 00 00 00 	lea    0x0(%edi),%edi

000006b0 <malloc>:

static Header*
morecore(uint nu)
{
  char *p;
  Header *hp;

  if(nu < PAGE)
    nu = PAGE;
  p = sbrk(nu * sizeof(Header));
  if(p == (char*) -1)
    return 0;
  hp = (Header*)p;
  hp->s.size = nu;
  free((void*)(hp + 1));
  return freep;
}

void*
malloc(uint nbytes)
{
 6b0:	55                   	push   %ebp
 6b1:	89 e5                	mov    %esp,%ebp
 6b3:	57                   	push   %edi
 6b4:	56                   	push   %esi
 6b5:	53                   	push   %ebx
 6b6:	83 ec 0c             	sub    $0xc,%esp
  Header *p, *prevp;
  uint nunits;

  nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1;
 6b9:	8b 45 08             	mov    0x8(%ebp),%eax
  if((prevp = freep) == 0){
 6bc:	8b 15 04 08 00 00    	mov    0x804,%edx
 6c2:	83 c0 07             	add    $0x7,%eax
 6c5:	c1 e8 03             	shr    $0x3,%eax
 6c8:	85 d2                	test   %edx,%edx
 6ca:	8d 58 01             	lea    0x1(%eax),%ebx
 6cd:	0f 84 92 00 00 00    	je     765 <malloc+0xb5>
    base.s.ptr = freep = prevp = &base;
    base.s.size = 0;
  }
  for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr){
 6d3:	8b 0a                	mov    (%edx),%ecx
    if(p->s.size >= nunits){
 6d5:	8b 41 04             	mov    0x4(%ecx),%eax
 6d8:	39 c3                	cmp    %eax,%ebx
 6da:	76 63                	jbe    73f <malloc+0x8f>
      if(p->s.size == nunits)
        prevp->s.ptr = p->s.ptr;
      else {
        p->s.size -= nunits;
        p += p->s.size;
        p->s.size = nunits;
      }
      freep = prevp;
      return (void*) (p + 1);
 6dc:	8d 3c dd 00 00 00 00 	lea    0x0(,%ebx,8),%edi
 6e3:	eb 09                	jmp    6ee <malloc+0x3e>
 6e5:	8b 0a                	mov    (%edx),%ecx
 6e7:	8b 41 04             	mov    0x4(%ecx),%eax
 6ea:	39 c3                	cmp    %eax,%ebx
 6ec:	76 51                	jbe    73f <malloc+0x8f>
    }
    if(p == freep)
 6ee:	39 0d 04 08 00 00    	cmp    %ecx,0x804
 6f4:	89 ca                	mov    %ecx,%edx
 6f6:	75 ed                	jne    6e5 <malloc+0x35>
 6f8:	81 fb ff 0f 00 00    	cmp    $0xfff,%ebx
 6fe:	77 39                	ja     739 <malloc+0x89>
 700:	be 00 10 00 00       	mov    $0x1000,%esi
 705:	b8 00 80 00 00       	mov    $0x8000,%eax
 70a:	89 04 24             	mov    %eax,(%esp)
 70d:	e8 b2 fc ff ff       	call   3c4 <sbrk>
 712:	83 f8 ff             	cmp    $0xffffffff,%eax
 715:	74 18                	je     72f <malloc+0x7f>
 717:	89 70 04             	mov    %esi,0x4(%eax)
 71a:	83 c0 08             	add    $0x8,%eax
 71d:	89 04 24             	mov    %eax,(%esp)
 720:	e8 fb fe ff ff       	call   620 <free>
 725:	8b 15 04 08 00 00    	mov    0x804,%edx
      if((p = morecore(nunits)) == 0)
 72b:	85 d2                	test   %edx,%edx
 72d:	75 b6                	jne    6e5 <malloc+0x35>
        return 0;
  }
}
 72f:	83 c4 0c             	add    $0xc,%esp
 732:	31 c0                	xor    %eax,%eax
 734:	5b                   	pop    %ebx
 735:	5e                   	pop    %esi
 736:	5f                   	pop    %edi
 737:	5d                   	pop    %ebp
 738:	c3                   	ret    
 739:	89 de                	mov    %ebx,%esi
 73b:	89 f8                	mov    %edi,%eax
 73d:	eb cb                	jmp    70a <malloc+0x5a>
 73f:	39 c3                	cmp    %eax,%ebx
 741:	74 1c                	je     75f <malloc+0xaf>
 743:	29 d8                	sub    %ebx,%eax
 745:	89 41 04             	mov    %eax,0x4(%ecx)
 748:	8d 0c c1             	lea    (%ecx,%eax,8),%ecx
 74b:	89 59 04             	mov    %ebx,0x4(%ecx)
 74e:	89 15 04 08 00 00    	mov    %edx,0x804
 754:	83 c4 0c             	add    $0xc,%esp
 757:	5b                   	pop    %ebx
 758:	8d 41 08             	lea    0x8(%ecx),%eax
 75b:	5e                   	pop    %esi
 75c:	5f                   	pop    %edi
 75d:	5d                   	pop    %ebp
 75e:	c3                   	ret    
 75f:	8b 01                	mov    (%ecx),%eax
 761:	89 02                	mov    %eax,(%edx)
 763:	eb e9                	jmp    74e <malloc+0x9e>
 765:	b8 fc 07 00 00       	mov    $0x7fc,%eax
 76a:	ba fc 07 00 00       	mov    $0x7fc,%edx
 76f:	a3 04 08 00 00       	mov    %eax,0x804
 774:	b8 fc 07 00 00       	mov    $0x7fc,%eax
 779:	a3 fc 07 00 00       	mov    %eax,0x7fc
 77e:	31 c0                	xor    %eax,%eax
 780:	a3 00 08 00 00       	mov    %eax,0x800
 785:	e9 49 ff ff ff       	jmp    6d3 <malloc+0x23>
