2017-09-23 10 views
1

몇 가지 코드 언어로 작업을 중단 한 지 얼마되지 않아 며칠 전 학교에서 어셈블리로 시작 했으므로 몇 가지 코드 작업에 대한 논리를 이해하기 시작했습니다.
사실, 내가 시도한 것은 두 변수 간의 간단한 ADD 연산입니다. 내 코드를 에뮬레이션하기 위해 emu8086을 사용합니다. 왜 내가 이해할 수 없는지 보여 드리겠습니다. 난 그냥 8 비트에 세 개의 변수, 그 두 가지를 초기화 나는 두 번째로 첫 번째를 추가 할 지금어셈블리에서 ADD 연산

stack segment 
    dw 128 dup(0) 
ends 

data segment 

    x DB 3 
    y DB 5 
    r DB 0 

ends 

code segment 

    mov ah,x 
    mov al,y 
    add ah,al 
    mov r,ah 

ends 

:

코드는 다음과 같다.

문제는 다음과 같습니다. 코드를 에뮬레이트하고 어떤 단계로 진행되는지 확인하려면 첫 번째 단계는 AH=03이어야하며 CDh를 출력하는 것으로 보입니다 (내 x var이 아님). 이유를 알 수 없습니다. AL에 대해서도 마찬가지입니다.

내 말은 왜 x와 y 대신에 AHAL 레지스터에 다른 것을 쓰게 될까요?

+7

데이터 세그먼트를 가리 키도록 DS를 설정하는 것을 잊어 버린 것 같습니다. – Jester

+0

죄송합니다.하지만 어떻게해야합니까? –

답변

4

모든 mov 명령어는 DS 세그먼트 레지스터가 참조하는 메모리의 주소 변수를 나타냅니다. 미리 설정해야합니다!

code segment 
    mov ax, @data <- Add this 
    mov ds, ax  <- Add this 
    mov ah, x 
    mov al, y 
    add ah, al 
    mov r, ah 
ends 
+0

그래, 이제 효과가있다. 고마워요! –