好的,我目前正在学校的汇编语言课上。我们本周第一次钻研一些源代码。我的老师给了我们一个例子如下:
;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
答案 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用户,您可以使用MASM
或TASM
使用其他程序集样式的代码:
; comment
.CODE
fct:
[...]
END
希望有所帮助:)