2012-11-29 4 views
1

nasm32, x86 어셈블리 언어를 사용하고 있습니다. 데이터 세그먼트에서 일부 숫자를 읽고 싶습니다.x86 어셈블리를 사용하여 데이터 세그먼트에서 데이터를 읽으려면 어떻게해야합니까?

.model small 
.stack 
.data 
    DATA1 DB 53H,"$" 
    DATA2 DB 17H,"$" 
.code 
.startup 
    mov dx, @data 
    mov dx, offset DATA1 
    add dl,30h 
    mov ah, 02h 
    int 21h 

    mov dl, dh 
    add dl, 30h 
    mov ah, 02h 
    int 12h 
    .exit 
end 

이 코드 반환 단지

20

나는 생각 DATA1의 53H (= 83 (10 진수)) 값을 반환합니다. (아스키 문자로)

그러나 이상한 숫자는 반환됩니다. 어떻게 된 거예요? 나는이 결과를 이해하지 못한다.

그리고 어떻게이 코드를 수정할 수 있습니까?

답변

1

ds를 설정하지 않았습니다.

push @data 
pop ds 
+0

그러나 오류 반환 :

mov dx, @data 

는 같은 것을 의미했다. "immediate operand not allowed" –

+0

int21h, AH = 02h는 dl에서 문자를 출력하므로 dx를 해당 주소의 데이터가 아닌 DATA1의 주소로 초기화합니다. 셋째, 53h가''S ''이고, 왜''20 ''을 인쇄 할 것으로 기대합니까? –

+0

답변 해 주셔서 감사합니다. 그렇다면 어떻게 DATA1의 주소에있는 데이터를 읽을 수 있습니까? 'MOV DX, offset DATA1'은 DX <- DATA1의 주소를 의미합니까? 아, 53h는 'S'이지만, 숫자 (10 진수, 83)를 의미합니다. '83'과 같이 DATA1의 번호를 인쇄하고 싶습니다. 그래서 아스키 코드를 만들기 위해 30h를 더했습니다. –