it doesnt work like that. Each byte (a single register is one byte) contains 8 bits, giving the byte a value from 0-255, so if within de, d=1, e=0, de=256. if it were d=0,e=1, de=1. The relationship between the two is basically an extension of the second register in the pair, e. so if d=1 (%00000001), and e=31 (%00011111), de = 256+35=291, (%0000000100011111). However, when you extract data from memory into a register pair, the order is reversed. ie. ld hl,(data) data: .db 0,1 ; data byte is 8 bit data this would load 0 into register l, and 1 into register h. so hl = 256 however, the following code would correctly load 5 into hl ld hl,(data) data: .dw 5 ; data word is 16 bit data i hope that solves any problems with understanding register pairs.