linux8086汇编环境配置,LINUX下面进行8086汇编

LINUX下面进行8086汇编

我想问的是:LINUX下面使用什么编辑器来编辑汇编源代码?VIM? 编辑完毕之后使用什么来编译和链接? 链接完毕后如何运行? 这里举个例子 比如LINUX下面怎么写C程序 1,使用VI/VIM编辑源代码 2,使用GCC(G++)进行编译链接 3,当前文件夹下生成a.out执行a.out即可得到结果 ------------- 在这人谢谢各位了,我问了度娘很多次了,可是度娘也不是很明白 希望能够详细说清楚 如果解决了,另有高分相送

更新时间:2019-05-18 15:59

最满意答案

编辑器就是普通的编辑器,vim,emacs,gedit,kate...都可以

源文件类型为ascii码的plain text

c/c++,asm,perl,python,vhdl...我所接触过的编程语言都是以plain text作为源文件的

编译用gcc或者nasm,前者编译AT&T汇编,后者编译intel汇编

8086的教材上一般都是用intel,不过区别不大,可以相互转化

链接就是ld,属于gcc工具集

nasm如何链接,没试过

和C一样也是使用VIM(或者其他编辑器),不用加参数,不用配置环境(如果你不想让vim和emacs使用起来更舒服的话,根本不用配置,配置一下仅仅是为了提高打字效率)

编译器会自动根据plain text的文件内容来编译

这和windows下的编程没有区别,只不过visual为了"用户友好"把编译的本质隐藏起来了

如果实在不爽,装dosemu,dos虚拟机,一般8086汇编都是用dos的吧,debug,masm都有

2014-05-05 回答

相关问答

linux下的二进制可执行文件可以用 GNU Binutils 中的 objdump进行反编译

编辑器就是普通的编辑器,vim,emacs,gedit,kate...都可以 源文件类型为ascii码的plain text c/c++,asm,perl,python,vhdl...我所接触过的编程语言都是以plain text作为源文件的 编译用gcc或者nasm,前者编译AT&T汇编,后者编译intel汇编 8086的教材上一般都是用intel,不过区别不大,可以相互转化 链接就是ld,属于gcc工具集 nasm如何链接,没试过 和C一样也是使用VIM(或者其他编辑器),不用加参数,

...

为此导致除法异常 mov ax, word ptr cs:sum

mov cl, 10

div cl

ax的值(来自word ptr cs:sum )必须> = 2560。 word ptr cs:sum不是<2560或者代码中的地址被破坏而你没有将值存储在word ptr cs:sum或从那里获取它(例如你在引用时没有使用相同的段值) sum )。 这是唯一的可能性。 For this to cause a division exception mov ax, word ptr cs:sum

...

您可以像这样链接元素: jmp start

element0 db 10

element1 db "jsdafélasjfdélasjd"

element2 db "lkjfasljf"

element3 db 12, 34

element4 db "asfd"

;etc.

links:

dw element0

dw element1

dw element2

dw element3

dw element4

start:

push cs

pop ds

lea si, links

add si, (

...

这相当复杂,通常涉及两个步骤: 汇编程序读入汇编代码,计算出相应的机器代码,并将其写入目标文件以及其他一些信息,这些信息取决于您使用的目标文件格式 链接器接收一组目标文件并将它们合并成一个可以实际运行的可执行文件 因此汇编程序通常不会输出可执行文件; 你需要选择一个目标文件格式并阅读如何生成它。 理论上,只要你输出一个给定格式的有效目标文件,任何链接器都应该能够完成实际的链接过程,但通常汇编器和链接器是作为一个集合来进行的,所以我不确定它实际上会有多好在实践中工作(例如,GNU汇编器(气体)输出G

...

[e] ax,[e] cx,[e] dx是调用者保存的寄存器,[e] bx,[e] si,[e] di,[e] bp是被调用者保存的寄存器,这意味着任何函数都可以删除eax ,ecx和edx。 在8086-land中,在dx:ax对中返回“结构”或32位值也是习惯做法。 根据维基百科调用约定 [e]ax, [e]cx, [e]dx are caller saved registers, [e]bx, [e]si, [e]di, [e]bp are callee saved registers, m

...

我不确定,但是当我需要在研究中完成它时,我们只是手动转换它,它是公认的解决方案。 教练员没有告诉我们更好的方法。 I'm not sure, but when i needed to do it in studies we just converted it manually and it was accepted solution. Didactician didn't tell us about better method.

首先:确保DS指向您的数据段。 除非您使用的是小型模型,否则它在DOS EXE程序中默认不是。 因此,在代码的开头添加: MOV AX,data

MOV DS,AX

第二:如果要从程序的另一部分调用,则此例程最后需要RET 。 我想这不是你在做什么,我们正在看你的整个计划。 如果是这样,那么你必须以此结束 MOV AX,4C00h

INT 21h

要返回DOS。 并且......好吧,你构建了一个$ -terminated字符串,所以你要打印它,不是吗? 使用DOS函数09h : MOV DX

...

是的,的确,您可以使用VS中的调试器来检查几乎所有内容。 Irvine的网站有一节专门介绍如何使用调试器。 您可以检查寄存器,使用监视窗口等。如果需要,他还有一个突出显示asm关键字的指南。 编辑:正如Hans所指出的,如果你使用16位而不是32位保护,你将需要不同的工具。 这里列出了几种选择。 Yes, indeed, you can use the debugger in VS to examine pretty much everything. Irvine's site has a sec

...

这必须是一个奇怪的指令集表,因为没有mov r/m1,r/m2 (你不能有两个内存引用)。 更好地尝试官方的英特尔 。 你需要的是mov r8, r/m8 。 其编码为8A /r 。 使用表2-1。 使用ModR / M字节的16位寻址格式您可以看到具有16位位移disp16操作数BL表示1E的modrm字节,后跟16位位移,因此完整指令为8A 1E 0A 00 。 您可以使用汇编程序验证: 8A1E0A00 mov bl, [10]

PS:目前还不清楚你真正想要的

...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值