" The 8080 was an 8-bit CPU, meaning it processed 8 bits of information at a time. However, it had 16 address lines coming out of it. The ‘‘bitness’’ of a CPU—how many bits wide its general-purpose registers are—is important, but to my view the far more important measure of a CPU’s effectiveness is how many address lines it can muster in one operation. In 1974, 16 address lines was aggressive, because memory was extremely expensive, and most machines had 4K or 8K bytes (remember, that means 4,000 or 8,000) at most—and some had a lot less. Sixteen address lines will address 64K bytes. If you count in binary (which computers always do) and limit yourself to 16 binary columns, you can count from 0 to 65,535. (The colloquial ‘‘64K’’ is shorthand for the number 66,536.) This means that every one of 65,536 separate memory locations can have its own unique address, from 0 up to 65,535."

my questions are how 16 bits address lines can address 64KB?,since 16 bits can only address 64kbps.

and what is segment?

One address addresses one byte. Using 16 bits, you can write 65536 addresses (from 0 to 65535, that's 65536 different addresses), and address 65536 bytes. 65536 bytes is 64kB. In computer science, b is bit, B is byte. The byte is the smallest amount of memory you can address. The question "what is k ?". k is kilo, in international system of units, a kilo unit is 1000 units, but, when dealing with memory, a kilo unit is 2^10=1024 units, (except when dealing with hard drives, for marketing reasons).

64kbps is 64 kilo bits per second. It is a transfer rate, not an amount of memory.

"What is a segment ?" isn't a precise question, segment is a very generic word used in many contexts. I expect that the 8086 segments are accurate in your context, even if it's some 24-bit addresses with 16-bit CPU instead of 16-bit addresses with 8-bit CPU.

One address addresses one something. So 16 bits of address can address $2^{16}$ somethings.

In the case of memory organised in bytes, this is 64KB (kilobytes). If memory were organised in bits, this would be 64Kb (kilobits). If memory is organised in 16-bit or 20-bit or 32-bit words (as has sometimes been done), the addressable space would be 64K of those words. (You get more memory that way, but you lose the byte-addressability: in some cases, a reasonable tradeoff).

• when we talk about memory being 64KB, does it mean each memory cell has a size of 64KB or is the 64KB the net size of all memory cells put together? Apr 20, 2019 at 13:19

Here, 65,536 address locations are provided for a data word, but each data word consists of 8 bits or 1 byte so effectively 65,536bytes sums to 2^16 bytes = 2^6 * 2^10 bytes = 64KB

The quote appears from "Assembly Language Step By Step" by Jeff Duntrmann, 3rd ed. Earlier (in the section on Random Access), the book describes voltages on the pins of the processor. There is a high value (e.g 5V) and a low (e.g. 0V) value. These correspond to 1 and 0, digitally. Since there are two possible values for each pin and an 8080 processor has 16 pins, 2^16 = 65536 different combinations exist. Each combination corresponds to a memory address.

You might also be wondering, "Why 64K’’ is shorthand for the number 66,536?" That's a great question. The answer: it's not! That was a typo in the book!

Errata for the Third Edition

P. 79, fifth paragraph: 66536 should be >65536. (Spotter thanks to Jim Whiting.)

http://duntemann.com/assembly.html

Check Duntemann's webpage (or the publisher's) for more errata and other helpful information.

As for why is 64k used for 65,536? It's because 64 x 1024 = 65536. However, people were imprecise with their usage of "kilo", the metric unit for one-thousand. They used kilo in a computer context to mean 1024 instead of 1000. (n.b. Later, language of 'kibbi', as in 'kibbibyte', was introduced to distinuish between base 2 (i.e. 1024) and base 10 (i.e. 1000).)

Read on a few sections in the book for an explanation of segments. :)