main segment
assume cs : main, ds : main
MOV AX, CS
MOV DS, AX
MOV AX, A
ADD AX, B
MOV SUM, AX
MOV AX, 4C00H
INT 21H
A DW 2
B DW 5
SUM DW ?
main ends
end
main segment
assume cs : main, ds : main
A DW 2
B DW 5
SUM DW ?
START :
MOV AX, A
ADD AX, B
MOV SUM, AX
MOV AX, 4C00H
INT 21H
main ends
end
위 문제점을 해결하기 위해 방법 2.
AL의 값 00을 [0002]에 저장
그러면
A : FF
B : 01
SUM : 00
이라는 값은 어딘가에 저장되어 있을 건데,
어디에 있을까?
DS가 586번지부터이므로 586번지의 0000번지에 있을까?
➡️ 아니다.
왜 0584의 0020부터 있을까?
segment가 0584에서 0586로 바뀐 과정을 보면,
물리번지 : 05840 + offset 이기 때문에
05860 - 05840 = 0x20 이다.
따라서 code segment에서 2개의 segment 밑에 data segment를 잡았는데,
0x20의 차이가 나는 것이라
0584의 0020 번지에 있는 것이다.
또한 code segment는 0584의 0013번지에 종료되므로
data segment를 0584의 0020에 잡을 수 있다.
만약 code segment가 0584의 0021번제이 종료되었다면
data segment를 0584의 0040에 잡아줬을 것이다.
(→ 최소한의 memory를 잡도록)