2011-12-13 3 views
0

변수가 데이터 세그먼트에 저장되는 방법과 약간 혼동됩니다. 내가 그렇게 같은 오프셋 데이터 테이블을 만든어셈블리 언어 바이트 카운트

 .data 
vala dw 1234h 
valb db 1,2,3,4 
valc db '1234$' 
vald db '12' 

:

offset 00 01 02 03 04 05 06 07 08 09 10 11 
data 34 12 01 02 03 04 31 32 33 34 31 32 

내가 제대로 메모리에로드하고 생각하지 않는다 총 바이트 수를 필요 때문에 우리는이 코드 세그먼트를 부여됩니다 메모리는 13이고 나는 여기에만 11을 가지고 있습니다. 누군가 내가 잘못 갔다 고 말할 수 있습니까? 내가 올바른 방법이 코드 세그먼트를 통해 생각

mov dx,offset valb ;valb has 4 bytes 
mov ah,9    ;4 bytes is written to the output 
int 21h    ;for a total of 8 bytes 

암 :

이 지시 한 후 표준 출력 장치에 기록 된 바이트 수를 묻는 또 다른 질문이있다?

답변

1

11이 아닌 12를 나열했습니다. 그냥 계산하십시오. 달러 문자가 1 바이트 누락되었습니다. 그것보다 오프셋은 괜찮아 보입니다.

또한 함수 9는 이진수가 아닌 텍스트 만 인쇄합니다. 사람이 읽을 수있는 방식으로 valb에서 4 바이트 (1, 2, 3 및 4)를 인쇄하지 않습니다. 정확히 얼마나 많은 바이트를 인쇄 할 것인가? 글쎄, 그것은 문자열 터미네이터로 사용되기 때문에 달러를 출력하지 않을 것이다. (문서, btw, 모두보기). 그래서, 그것은 단지 8 (바이트 1 ~ 4 및 문자 "1", "2", "3"및 "4"에 대해 4 개의 이상한 문자)이어야합니다.

+0

감사합니다. 나는 항상 달러 기호도 계산하는 것을 잊어 버립니다. – raphnguyen