2010-08-02 5 views
1

배열에 대한 포인터 DI가 있습니다.인텔 8086 어셈블리의 포인터 및 인덱스

DI와 다른 포인터가 가리키는 값으로 갈 수 있습니까?

예컨대 :

mov bl,1   
mov bh,10 
inc [di+bl] 
inc [di+bh] 

그리고, 관련 메모에, 두 레지스터의 값을 교환 할 수있는 한 줄의 연산 코드가? (내 경우, BX와 BP?)

답변

4

는 유일한 주소 지원되는 형태이다 :

[BX+SI] 
[BX+DI] 
[BP+SI] 
[BP+DI] 
[SI] 
[DI] 
[BP] 
[BX] 

이 각각 어느 8 비트 또는 16 비트 정수 변위를 포함 할 수있다.

(출처 : Intel Developer's Manual volume 2A, 38 페이지)

제공된 예에 문제 blbh가 8 비트 레지스터이며,베이스 포인터로서 사용될 수 없다는 것이다. 그러나 bx을 원하는 값으로 설정하면 포인터에 적합한 크기 지정자 인 inc [di+bx]이 유효합니다. 스와핑로서는


"레지스터의 상위 및 하위 비트가"ror bx, 8J-16 SDiZ's 제안 blbh 교환 용 미세 (그리고 IIRC는 그렇게 할 수있는 최적의 방법이다). 그러나 bl의 비트 0을 bl의 비트 7으로 교환하려면 그 이상의 논리가 필요합니다.

+0

그러면 두 개의 레지스터를 바꿀 수 있습니까? BX와 BP라고 해? –

+1

'XCHG' 명령 (예 :'XCHG BX, BP'). 소스는 다시 내 대답 (실제로 볼륨 2B)에 링크 된 인텔 설명서입니다. 어셈블리를 개발할 때 유용하다고 생각합니다. 그들은 여전히 ​​32 비트, 64 비트 및 기타 모든 확장과 함께 16 비트 정보를 가지고 있습니다. – Zooba

1

DI는 포인터가 아니므로 인덱스입니다.

ROR BX, 8을 사용하면 레지스터의 하위/상위 바이트를 회전 할 수 있습니다. 16 비트 프로그램 용