2013-10-21 3 views
0

다음 어셈블리 코드가 있습니다. 내 DS에 두 개의 배열을 선언했습니다. 나중에 코드에서 내가 액세스하고자하는 배열 요소의 인덱스 번호 BX으로 이동합니다. PRINT_CHAR 프로세스는 화면에 표시하기 위해 직렬 포트를 통해 AL의 데이터를 전송합니다. 하지만 어떤 이유로 배열 요소에 액세스 할 수없는 것 같습니다. 그것은 저에게 가짜 가치를줍니다. print_char 프로세스가 좋습니다. 나는 배열에 접근하기 위해 내가 아는 두 가지 방법을 시도했다. 어떤 도움을 주시면 감사하겠습니다. 감사!배열 데이터에 액세스 할 수 없습니다. x86 어셈블리

DATA_SEG SEGMENT 
ARRAY  DB '1','2','3','1','2','3','4','5','6','4','5','6' 
bottom2  DB '7','8','9','7','8','9','*','0','#','*','0','#' 
    DATA_SEG ENDS 



    topnumbers: 
    cmp BX, 12 
    jge bottom_numbers 
    MOV AL,DS:ARRAY[BX] ; Stores character in AL (?) 
    jmp NUMBERS 

    bottom_numbers: 
    sub BL, 12d 
      LEA SI, bottom2 
      ADD SI, BX 
      MOV AL, [SI] 

    NUMBERS: 
    XOR AH, AH 
    CALL FAR PTR PRINT_CHAR 
+0

무엇을'DS '로 설정 했습니까? – Michael

+0

나는 그것을 깨닫지 못했다고 믿을 수 없다. 고맙습니다! – user2902028

답변

1

.exe 파일을 만드는 경우 세그먼트 레지스터를 해당 값으로 설정해야합니다. 같은 뭔가 (그러나뿐만 아니라 비밀 어셈블러 구문을 확인는) : DOS는 당신과 당신을 위해 모든 세그먼트 레지스터를 설정하기 때문에

mov ax, DATA_SEG 
    mov ds, ax 

게다가, 이러한 작은 프로그램 .COM 실행 형식, 위는 처리하기가 훨씬 쉽다 far 포인터를 사용할 필요가 없습니다.

관련 문제