Brendan's answer makes some good points. Also, please note that a read from the command register is actually a read from the status register. The command register is write only while a read from the same address is a read from the status register. Then, if this register shows that the controller is busy, bit 7 set, reading from the status register could and may return undefined results.
A return value of 88d (0x58) is a very common return for the status register. This is shown as: 01011000b
bit 7 = 0 = not busy
bit 6 = 1 = Drive is ready
bit 5 = x = command specific
bit 4 = x = command specific
bit 3 = 1 = Data Request
bit 2 = 0 = obsolete (command specific)
bit 1 = 0 = obsolete (command specific)
bit 0 = 0 = no error
With this in mind, notice that bit 3 is set. This means that the controller/drive is ready for/expecting a data transfer, depending on the command sent.
For example, if you sent the READ command, this bit means that it is ready for you to read from the data register (assuming you are using PIO). If you are reading words (16-bit values), you should read the data register 256 times and this bit will clear.
Note that if you are reading more than one sector at a time, you will receive an interrupt after each sector has been read, no matter how many you are reading, and the DRQ bit (bit 3) will again be set for the next sector.
For writes, the DRQ bit indicates that the drive is ready for a write. I.e.: write a 16-bit word to the DATA register.
32-bit reads and writes are the same, though you only transfer 128 words instead of 256 words.
Also, a read from the status register clears the interrupt status of the command, indicating to the controller that the next command can be started. Sometimes this is not the intent. Therefore, the controller has an ALT STATUS register which returns the exact same result without clearing the interrupt status. You should be reading from it until you are ready to clear the interrupt.