SI 레지스터와 DI 레지스터의 실질적인 차이점은 무엇입니까?
-
18-09-2019 - |
문제
나는 차이점이 무엇인지 이해하지 못합니다.
해결책
MOVSB와 같은 지침을 사용하는 경우 SI는 다음으로 간주됩니다. 에스ource register, di는 디소지 등록. 그러나 둘 다 일반 X86 레지스터입니다.
다른 팁
내 어셈블리는 약간 녹슬었지만 하나는 소스 인덱스이고 다른 하나는 대상 인덱스입니다.다음과 같은 지시 movsb
가 가리키는 메모리 위치에서 바이트를 복사합니다. SI
, 그리고 가 가리키는 메모리 위치로 이동합니다. DI
, 그리고 둘 다 증가시키므로, 다음에 저장된 바이트를 복사하려면 SI+1
에게 DI+1
, 추가 movsb 명령만 필요합니다.
SI
소스 인덱스를 의미합니다.소스 인덱스는 문자열 명령어(LODS,MOVS 또는 CMPS)에서 읽고 있는 현재 문자에 대한 포인터로 사용됩니다.소스 인덱스는 간접 주소 지정 시 Bx 또는 Bp를 추가하기 위한 오프셋으로도 사용할 수 있습니다.
예:
MOV [Bx + SI] , Ax
이 명령어는 Ax의 내용을 주소가 Bx와 SI의 합인 메모리 위치에 복사합니다.
DI
문자열 명령어에서 쓰거나 비교되는 현재 문자에 대한 포인터로 사용되는 대상 인덱스를 나타냅니다.
SI와 마찬가지로 오프셋으로도 사용 가능합니다.
위의 DI는 대상 색인을 나타내며 SI는 소스 인덱스를 나타냅니다. 메모리에서 데이터를 이동하려면 Si E., Mov Ax, [SI]를 사용합니다. 그리고 우리가 메모리로 데이터를 이동하고 싶을 때 우리는 DI를 사용합니다. 예를 들어, Mov [di], 도끼
둘 다 16 비트 레지스터이며 8 비트로 나눌 수 없습니다.