从文本文件中组装源代码

时间:2010-09-08 17:02:50

标签: assembly

好的,我目前正在学校的汇编语言课上。我们本周第一次钻研一些源代码。我的老师给了我们一个例子如下:

;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 个答案:

答案 0 :(得分:1)

汇编语言文件通常有.s .S.asm但不是.txt,即使无关紧要。

如你所知,你应该准确一点你的机器类型和工具链的问题。

这看起来像是使用英特尔程序集的Intel-mnemonic程序集(与AT& T相比,请参阅Wikipedia x86 assembly以获得快速概述)。

您可以尝试NASM (The 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。但您可以在以下列表中选择另一个输出fomat(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用户,您可以使用MASMTASM使用其他程序集样式的代码:

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

希望有所帮助:)