사용자에게 보이는 레지스터(user-visible register)는 어셈블리 프로그래밍을 하기 위하여 명칭과 용도를 알아야 하는 레지스터, 여기서 어셈블리 프로그래밍이라는 것은 우리가 사용하는 프로그램을 컴퓨터가 사용하는 기계어로 쉽게 변경해주는 저급 언어(low level language)다. 따라서 어셈블리 프로그래머는 프로그램에서 사용되는 변수 데이터 등을 저장하기 위해 해당 레지스터를 알고 있어야 한다. 프로그래머가 이용하는 레지스터들을 사용자에게 보이는 레지스터라고 한다. 이 레지스터는 사용하는 목적에 따라 다음과 같이 나누어진다.
일반 목적용 레지스터(general-purpose register) : 프로그래머가 여러 용도로 사용할 수 있고, 연산을 위한 모든 종류의 피연산자(oeprand)를 저장할 수 있는 레지스터다.
데이터 레지스터(data register) : 데이터 저장에만 사용할 수 있는 레지스터다. 대표적인 예로 누산기(accumulator)가 있다.
주소 레지스터(address register) : 특정 주소지정 방식을 위해 사용하는 레지스터다. 주소 지정 방식은 여러 가지다. 특히 레지스터 간접 주소지정 방식은 특정 레지스터의 내용이 유효주소를 표시한다. 따라서 유효주소를 저장하기 위한 레지스터가 필요한데, 이것이 주소 레지스터다.
세그먼트 포인터(segment pointer) : 세그먼트의 시작 주소를 저장한다.
인덱스 레지스터(index register) : 변위 주소지정 방식에 해당하는 인덱스 주소지정에 사용한다.
스택 포인터(stack pointer) : 스택 저장장치의 최상위(top of stack) 주소를 저장한다.
조건 코드(condition code) : 사용자에게 보이는 레지스터에 저장된 데이터의 상태를 표시하는 데 사용된다. 연산의 결과에 따라 세트되는 비트들을 말한다.
부호(sign) 비트 : 양수인지 음수인지를 표시한다.
영(0) 비트 : 해당 데이터가 0이라는 것을 표시한다.
오버플로우 비트 : 연산의 결과 등에 오버플로우가 발생했다는 것을 표시한다.
[ 그림 6-5 ]에서는 마이크로프로세서 8086과 펜티엄 2에서의 레지스터 조직을 나타낸 것이다. 사용자에게 보이는 레지스터이므로 프로그래머들은 이 레지스터를 이용할 수 있다.
[ 그림 6-5 ]