2015-01-28 2 views
2

내가이 질문을 몇 가지 도움을받을 싶습니다 구조물 : 잘못 다음 내가 생각법률 데이터 segement가

data segment 
    x db -23, 3 or 4, not -3, 9 xor 15, 129, $+x, SEG x, -128 LT 80h 
    db -129, x+1, b2h, 256, 7852h, byte ptr z 
    y dw z-2, -7852h, x[2], offset bx 
    z dd z-y, FAR PTR y 
data ends 

: 데이터 세그먼트의 다음과 같은 정의에 정확하고 합법적 인 것입니다

- cant contain operations: 3 or 4, not -3, 9 xor 15, FAR PTR y, offset bx ... 
- cant reference same varaible : $+x 

그리고 맞음 :

- -23, 129, 7852h ... 
- a db 'abc' 
    lengthOfa EQU ($-s) 

나는이 사실에 관해 정말로 맞습니까?

답변

2

왜 어셈블러에서 대답하도록 하시겠습니까? x, y, z이 아니며 변수입니다. 따라서 값을 분리하고 여러 줄로 쓸 수 있습니다. 선언문을 유지하는 것을 고려하십시오 (db, dw, dd). 어셈블리 소스 텍스트를 빌드하고 어떤 라인에 어떤 에러가 포함되어 있는지 살펴 보자.

data segment 
    x db -23 
    db 3 or 4 
    db not -3 
    db 9 xor 15 
    db 129 
    db $+x   ; TASM: Can't add relative quantities - MASM: error A2101: cannot add two relocatable labels 
    db SEG x  ; TASM: Not expecting group or segment quantity - MASM: error A2071: initializer magnitude too large for specified size 
    db -128 LT 80h 

    db -129 
    db x+1   ; TASM: Expecting scalar type - MASM: error A2071: initializer magnitude too large for specified size 
    db b2h   ; TASM: Undefined symbol: B2H - MASM: error A2006: undefined symbol : b2h 
    db 256   ; TASM: Value out of range - MASM: error A2071: initializer magnitude too large for specified size 
    db 7852h  ; TASM: Value out of range - MASM: error A2071: initializer magnitude too large for specified size 
    db byte ptr z ; TASM: Expecting scalar type - MASM: error A2071: initializer magnitude too large for specified size 
    y dw z-2 
    dw -7852h 
    dw x[2] 
    dw offset bx ; TASM: Illegal use of register - MASM: error A2032: invalid use of register 
    z dd z-y 
    dd FAR PTR y 
data ends 

code segment 
start: 
    ret 
code ends 

end start 
+0

좋은 포인트는 내 링커와 컴파일러에 플래그를 추가 할 수 있다는 것을 잊어 버렸다 ... :)) –