2017-01-11 3 views
3

나는 8086을위한 어셈블리 언어를 배우고, 내가 예를 들어, 줄 연속 문자가인지 알고 싶어 : 나는 한 번 읽어했습니다MASM (8086) 어셈블리 언어 행 계속

mov ah,\ 
    09 
    mov dx,offset msg 
    int 21h 

' \ '기호는 줄 연속으로 사용되지만'\ '기호가 작동하지 않으므로 MASM에서 오류가 발생합니다.

+0

라인 연속은 대개 어셈블리 언어가 아니라는 것을 알고있는 프로그래밍 언어로 수행됩니다 (단, lc3과 만 상호 작용했지만). 적어도 lc3은 당신이 할 수있는 일이 아니 었습니다. 나는 더 이상 읽을 수 없게 될 것이기 때문에 반대 의견을 제시 할 것이다. – gabeio

+0

내 질문에 대답 해 주신 gabeio에게 감사드립니다. 코드를 더 읽기 쉽게 만들어주지는 않지만 동의합니다. 시험에 관해 알고 싶습니다. 선생님이 그것에 대해 물었을 때 어떤 생각을하는지에 대해 알고 싶었습니다. 말하자면, 내가 말했듯이, 코드를 더 읽기 쉽게 만들어주지 않는다고 말한 것입니다. D. –

+2

'\'연속은'MASM 6.0' +에서 작동하고, 확실히'NASM'에서 작동합니다. 어떤 버전을 사용하고 있는지 불분명합니다 ... 질문에 해당 정보를 포함시킬 수도 있습니다. –

답변

5

줄 연속 문자는 MASM 5.1에서 도입되었습니다. 단일 백 슬래시 문자 (\)이며 줄의 마지막 비 공백 문자로 배치해야합니다. 이것은 본질적으로 하나의 논리적 인 줄을 둘 이상의 물리적 인 줄로 분리하여 질문에서 제안한 것과 같은 구문입니다.

MASM 6.1 (6.0 버전, 해당 버전의 설명서 사본을 찾을 수 없음)부터는 줄 연속 백 슬래시 뒤에 주석을 달 수 있습니다. 이 효과적으로이 같은 코드를 작성할 수 있도록 공백으로 처리했다 :

mov ah, \   ; continue onto the next line 
    09 
mov dx, offset msg 
int 21h 

하지만이 동의 덧글-이 코드의 가독성을 증가하는 것은 매우 어렵다. 어셈블리 언어로 많은 코드를 작성했으며 결코에 대한 필요성을 발견했습니다. 어셈블리 언어 니모닉은 짧기 때문에 80 열 너비로 유지하는 경우에도 왜 명령을 실행할 공간이 부족한 지 상상할 수 없습니다.

또한 MASM 6.1에서 이니셜 라이저의 후미 쉼표는 해당 줄이 다음 줄로 계속 이어지는 것을 의미합니다.

EvenNumbers DB 02h, 04h, 06h, 08h, 
       0Ah, 0Ch, 0Eh, 0Fh 

OutputStr DB "Hello ", 
       "world!" 

이 적합 할 수 있습니다 두 번째 라인에 포장 유일한 장소이며, 성가신 구문에 대한 필요없이 지원됩니다 따라서, 다음과 같은 선언은 법적 있습니다.

이 버전에서는 줄당 최대 문자 수가 128에서 512로 증가했습니다. 6.1보다 오래된 MASM 버전을 사용할 이유는 없습니다. 세그먼트 화 된 DOS 프로그램을 컴파일해야하는 경우에도 MASM 6.1은이를 수행하며 MASM 5.1로 작성된 이전 프로그램과 완벽하게 호환됩니다. 여하튼

, 강사는 시험에 구문 esoterica의 약 유형을 요청하는 경우, 그들은 정말 질문의 관점에서 통의 바닥을 긁어있다. 그리고 당신이 이것에 대해 걱정할 정도로 잘 알고 있다면 시험을 치러야합니다.

관련 문제