2012-08-16 1 views
1

특정 데이터를 메모리 위치 0x4000에 저장했습니다. 거기에서 바이트를 메모리 위치 0xb800으로 전달하여 데이터가 화면에 인쇄되도록했습니다. 문제가 발생하면 저장하려고하면 발생합니다 0xb800 : 0 내가 생각하는 첫 번째 바이트는 0x4000 : 0에 있습니다. 내가 예제로 사용 된 코드는 다음과 같습니다 :이 잘 컴파일하고 완벽하게 실행,하지만 내가 적응하기 위해 노력하고있어 NASM에에 "잘못된 세그먼트 재정의"오류가 발생16 비트 어셈블리의 다른 위치에서 비디오 메모리에 바이트를 어떻게 공급할 수 있습니까?

mov ax, 0xb800 
mov es, ax 
mov byte [es:0], 'A' 

. [오프셋]과 0xb800에 공급 : ES 세그먼트를 사용하여 [오프셋]

mov ax, 0xb800 
mov es, ax 
mov byte [es:0], byte [0x4000:0] 

는 0x4000으로로부터 1 바이트를 얻을 수 있습니다 : 여기 내 비 작동 코드는? 그렇다면 어떻게?

답변

1

이 작업을 수행 할 수 있지만 가지고있는 것처럼 단일 명령으로 수행 할 수는 없습니다. 당신은 다른 세그먼트 레지스터와 같은 ds 플러스 (여기 al) 중간 레지스터를 사용해야합니다 : 것을 고려 당신이 가지고있는 경우에 ds 다른 곳에 지적 것을

mov ax, 0x4000 
mov ds, ax 
mov ax, 0xb800 
mov es, ax 
mov al, [ds:0] 
mov [es:0], al 

주, 당신은해야합니다 너무 (예 : 저장 및 복원).

+0

고마워요! 그것은 완벽하게 작동했습니다. – NorthStyling