MyISAM tables cache the number of rows they hold, and COUNT(*) is optimized internally to use this cached data, returning a response almost instantly.
Here is an article that talks about using COUNT(*) to get the number of rows versus COUNT(col); it's not exactly applicable to your situation, but it still talks about the optimizations used.
EDIT: Decided to test COUNT() on my home PC. Note that this result is with other programs open in the background and accessing the hard drive (I think I might've even had a movie unzipping at the time, too):
mysql> SELECT COUNT(*) FROM test;
+----------+
| COUNT(*) |
+----------+
| 1337414 |
+----------+
1 row in set (0.05 sec)
So, the first, unprimed COUNT(*) query took 0.05 seconds in a table with 1,337,414 rows. After that, successive queries returned:
1 row in set (0.00 sec)