2014-04-14 1 views
0

일부 어셈블리 파일을 연결하려고하는데 몇 가지 문제가 있습니다. 내가 NASM을 사용하고 내가 내 오브젝트 파일을 만들 : 윈도우 XP에서 책DOSBox의 NASM 컴파일

%include "io.mac" 

.DATA 
name_prompt db "Please type your name: ",0 
out_msg db "Your name in capitals is: ",0 

.UDATA 
in_name resb 31 

.CODE 
    .STARTUP 
    PutStr name_prompt ; request character string 
    GetStr in_name,31 ; read input character string 

    PutStr out_msg 
    mov EBX,in_name ; EBX = pointer to in_name 
process_char: 
    mov AL,[EBX] ; move the char. to AL 
    cmp AL,0 ; if it is the NULL character 
    je done ; conversion done 
    cmp AL,’a’ ; if (char < ’a’) 
    jl not_lower_case ; not a lowercase letter 
    cmp AL,’z’ ; if (char > ’z’) 
    jg not_lower_case ; not a lowercase letter 
lower_case: 
    add AL,’A’-’a’ ; convert to uppercase 
not_lower_case: 
    PutCh AL ; write the character 
    inc EBX ; EBX points to the next char. 
    jmp process_char ; go back to process next char. 
done: 
nwln 
    .EXIT 

나를 위해이 코드 직장에서

nasm program.asm -f bin -o program.exe 

코드하지만 윈도우 7에서 작동하지, 여기에 오류 로그 error입니다. 오류를 찾도록 도와주세요.

+0

그 인용 부호는 의심스러운 것으로 보입니다. 그들은 아마'''가 아니라'''이어야합니다. 그리고 어셈블러에서 매크로 파일을 찾았는지 확인하십시오. – Michael

+0

io.mac은 nasm 및 program.asm 파일에 있습니다.하지만 check assembler가이 파일을 찾는 방법을 모르겠습니다. – Damian

답변

0

오류 메시지의 줄 번호가 매크로를 나타내는 것으로 보입니다. Nasm은 %include 파일을 찾지 못해 불평 할 것이므로 "io.mac"를 찾았지만 좋아하지는 않습니다. WAG로서 시바 라마 단다 무디 (Sivarama Dandamudi) 박사의 기사처럼 보입니다 ... 링크 된 "io.obj"가 있어야합니다. 맞습니까?

Nasm의 "-f bin"출력 모드로 어셈블됩니다.이 모드는 링크 가능한 오브젝트 파일이 아닌 플랫 바이너리 파일을 생성합니다. "-o"스위치를 사용하면 출력 파일의 이름이 ".exe"이지만 여전히 ".exe"파일이나 링크 가능한 개체 파일이 아닌 플랫 이진 파일입니다. 나는 강력하게 "-f obj"또는 "-f win32"로 어셈블하고 링커와 링크해야한다고 생각합니다. 링커가 작동하면 어떻게했을까요? 나는 "-f obj"가 당신이 원하는 것이라고 생각합니다. 아마도 "-o"스위치는 필요하지 않을 것입니다. 기본 파일 이름은 괜찮습니다.

그 밖의 모든 것이 실패하면 "-e"스위치를 시도 할 수 있습니다 (전처리 전용). 이렇게하면 유용한 결과는 나오지 않지만 매크로가 확장됩니다. 이것으로 문제는 해결되지 않지만, Nasm이 불평하는 점을 정확히 알 수 있습니다. 이럴 필요는 없어!

사실 32 비트 레지스터를 사용하지만이 코드는 16 비트 코드 일 수 있습니다 (예, 가능합니다). XP와 7의 차이는 7이 DOS 코드를 실행하지 않는다는 것입니다. DosBox는 당신을 위해 그것을 처리해야합니다 (모두 잘된다면). "-f obj"로 어셈블 해보고 이것이 무엇을하는지보십시오. Nasm이 "닫고 조립"하게되면, 우리는 계속해서 링크되어 실행될 수 있습니다 ...