2015-01-29 1 views
0

좋아 등록 :예컨대 I이 코드를 가지고 있으므로 (TASM 및 도스 박스 사용)

dseg segment 
     a DB 2 
     b DB 3 
dseg ends 

cseg segment 
assume cs:cseg, ds:dseg 
    Start: add a, b 
cseg ends 
end Start 

그래서 프로그램 B를 추가한다을 (3)에 (2) 및도 5에 합 문제 :이 오류는 "표현식에 등록해야합니다."라는 오류입니다. 어떻게이 문제를 해결할 수 있을까요?

+1

변수가 등록되지 않습니다. 레지스터는 AX, BX 등이며 메모리에 상주하지 않습니다. 그들은 CPU 칩에 맞습니다. –

답변

3

프로세서의 86 제품군은 일반적으로 여러 개의 메모리 피연산자에 대해 직접 작업을 지원하지 않습니다 - 피연산자 중 하나가, 레지스터에로드해야합니다 메모리 예컨대 :

mov al, a 
add b, al 
+0

그래, 그게 내가 처음에 한 일이지만, 어떻게 든 단축 될 수 있기를 바랬다. 나는 그것이 할 수 없다고 생각한다. – Aradmey

+0

당신이 대답 할 수 있다면 나는 또 다른 질문을 가지고있다. 어떻게 inbetween jump없이 "relative jump from range"에러를 해결할 수 있는가? 점프를 늘리는 것처럼? – Aradmey

+0

매우 초기의 x86 버전부터 두 가지 크기의 상대 점프가 있습니다. 부호있는 단일 바이트 오프셋을 사용하는 것은 '짧은'점프로, 반면에 부호가있는 32 비트 오프셋을 갖는 점은 '근사 점프 (역사적인 이유로). 필자는 더 이상 TASM이 자동으로 점프를 올바르게 수행한다는 인상 아래에서 TASM이 어떻게 수행하는지 정확하게 기억하지 못합니다. 크기를 지정 하시겠습니까? –

관련 문제