Сборка исходного кода из текстового файла - PullRequest
0 голосов
/ 08 сентября 2010

Хорошо, сейчас я учусь в школе на языке ассемблера.На этой неделе мы впервые углубимся в некоторый исходный код.Мой учитель привел нам следующий пример:

;plan for getting a, b, c, and displaying ab + bc
call getVal a
mov M1, AX 
call getVal 
mov M2, AX 
call getVal
mov BX, AX 
mul M2
mov CX, AX 
mov AX, M2 
mul M1 
add AX, CX 
call putVal 

Он сказал нам, что нам нужно сохранить это в файл .txt, а затем преобразовать его в двоичный исполняемый файл для запуска.Какой лучший способ сделать это?Можно ли это сделать через командную строку?

РЕДАКТИРОВАТЬ: извините, код не получился просто правильно, но это не обязательно важно, что он делает.Мне просто нужно знать, как запустить любой исходный код, сохраненный в виде файла .txt

РЕДАКТИРОВАТЬ: Спасибо Null

1 Ответ

1 голос
/ 09 сентября 2010

Файл на ассемблере обычно имеет .s .S или .asm, но не .txt, даже если это не имеет значения.

Как и просили, вы должны немного уточнить свой вопрос, указав тип станка и набор инструментов.

Это действительно похоже на мнемоническую сборку Intel с использованием сборки Intel (против AT & T см. сборка Wikipedia x86 для краткого обзора).

Вы можете попробовать NASM (Netwide Assembler) , чтобы скомпилировать такой исходный код.

Конечно, в вашем файле отсутствуют некоторые части, как указано в NASM ( в Linux ).

$ cat file.s
; comment
section .text
    global fct
fct:
    call getVal
    mov M1, AX 
    call getVal 
    mov M2, AX 
    call getVal
    mov BX, AX 
    mul M2
    mov CX, AX 
    mov AX, M2 
    mul M1 
    add AX, CX 
    call putVal
$ nasm -f elf -o file.o file.s
file.s:5: error: symbol `getVal' undefined
file.s:6: error: symbol `M1' undefined
file.s:7: error: symbol `getVal' undefined
file.s:8: error: symbol `M2' undefined
file.s:9: error: symbol `getVal' undefined
file.s:11: error: symbol `M2' undefined
file.s:13: error: symbol `M2' undefined
file.s:14: error: symbol `M1' undefined
file.s:16: error: symbol `putVal' undefined

Обратите внимание, что я использовал формат вывода ELF, так как он помогает при использовании GNU objdump. Но вы можете выбрать другой выходной формат в следующем списке (nasm -hf):

valid output formats for -f are (`*' denotes default):
  * bin       flat-form binary files (e.g. DOS .COM, .SYS)
    ith       Intel hex
    srec      Motorola S-records
    aout      Linux a.out object files
    aoutb     NetBSD/FreeBSD a.out object files
    coff      COFF (i386) object files (e.g. DJGPP for DOS)
    elf32     ELF32 (i386) object files (e.g. Linux)
    elf       ELF (short name for ELF32) 
    elf64     ELF64 (x86_64) object files (e.g. Linux)
    as86      Linux as86 (bin86 version 0.3) object files
    obj       MS-DOS 16-bit/32-bit OMF object files
    win32     Microsoft Win32 (i386) object files
    win64     Microsoft Win64 (x86-64) object files
    rdf       Relocatable Dynamic Object File Format v2.0
    ieee      IEEE-695 (LADsoft variant) object file format
    macho32   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (i386) object files
    macho     MACHO (short name for MACHO32)
    macho64   NeXTstep/OpenStep/Rhapsody/Darwin/MacOS X (x86_64) object files
    dbg       Trace of all info passed to output stage

Для пользователей MS вы могли бы использовать MASM или TASM, которые используют другой код стиля сборки:

; comment
.CODE
fct:
   [...]
END

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...