汇编写的程序linux可以用吗,Linux下如何使用MASM编写汇编程序呢?

目前多数学校的微机原理课程使用的是MASM汇编器,而Linux中的汇编工具是nasm 。二者之间的语法有不少差别,不能通用。

安装dosbox 或dosemu 之后都可以在Linux中使用MASM和Debug,而且由于是在Dosbox及dosemu的虚拟机中运行,安全性也较高。

安装

你可以选择安装dosbox或dosemu,也可以选择二者都安装。

Dosbox的网站为 http://www。dosbox。com/ ,多数发行版的软件仓库中都配有这一软件,比如Debian /Ubuntu 中的安装方法为:

$ sudo apt-get install dosbox

Dosemu的网站为 http://dosemu。

sourceforge。net/ ,同样存在于多数发行版的软件仓库中,Debian或Ubuntu中的安装方法为:

$ sudo apt-get install dosemu

准备汇编工具

debug

提示:

dosemu已经包括了debug,如果你使用dosemu,就无需单独准备debug了。

如 果你安装有Windows XP,那可以在Windows XP的system32文件夹找到debug。exe ,如果没有WinXP,就需要上网下载,如这个网页 http://www。programfan。com/showdown。asp?id=171

你需要找一个DOS中的masm软件,在DOS中工作的最好是5。

0版本,上面的链接中就有。

配置DOS虚拟机

分别介绍Dosbox和dosemu的配置方法:

dosbox

把上面的工具放到一个文件夹中,如~/learnASM/tools/ ,在~/learnASM 中创建一个Shell脚本:

$ cd ~/learnASM

$ echo "dosbox -c 'mount c: 。

/' -c 'path %path%;c:\tools'" > runDosbox。sh

$ chmod +x runDosbox。sh

现在就可以用'。/runDosbox。sh'启动dosbox了:

$ 。/runDosbox。sh

dosemu

dosemu的配置方法很简单 ,由于默认dosemu中的D盘就是用户的根目录,只要把masm放在好找的地方就可以了。

也可以修改~/。dosemu/drive_c/autoexec。bat (需要root权限)把masm的路径加到PATH里。

提示:

如果只是进行汇编操作,还可以运行dosemu -dumb ,dosemu会在当前shell中运行。

如果要全屏运行dosemu,推荐在/etc/dosemu/dosemu。

conf 中加入 $_X_font="vga8x19" ,以使全屏时的字体正常。

提示:

退出dosemu的命令是exitemu

使用注意事项

可以使用VI等编辑器在系统中编辑源码,然后在Dosbox界面用Ctrl-F4 刷新目录。

为了在vim 中正常高亮显示汇编源码,可以创建/etc/vim/filetype。

vim ,并加入如下内容:

augroup filetypedetect

au BufNewFile,BufRead *。asm setf masm

augroup END

这样后缀为。asm 的文件就可以正常高亮了。

全部

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 汇编代码实现输出 "Hello World!" 的方式有很多,这里是一个例子: ``` ; Windows 平台下的汇编代码,使用 Microsoft Macro Assembler (MASM) 汇编器 ; 在 Windows 平台下,使用 WriteConsoleA 函数输出字符串 .data hello_world db 'Hello World!', 0 ; 定义字符串变量 hello_world,以 0 结尾 .code mov eax, 4 ; 调用 WriteConsoleA 函数,eax=4 mov ebx, 1 ; 输出到控制台,ebx=1 mov ecx, offset hello_world ; 字符串地址,ecx=&hello_world mov edx, 13 ; 字符串长度,edx=13 int 0x80 ; 调用中断,执行 Write consoleA 函数 ``` 上述代码将会输出 "Hello World!" 到控制台。 需要注意的是,需要使用 Microsoft Macro Assembler (MASM) 汇编器来汇编这段代码。这段代码的输出方式是通过调用 Windows API 函数 WriteConsoleA 实现的,这个函数是在 Windows 平台下常用的输出函数。 希望这段代码能帮到你! ### 回答2: 在Windows平台下使用汇编语言编写代码输出“Hello World!”可以使用汇编语言中的系统调用来实现。以下是一种可能的汇编代码示例: ```assembly section .data message db 'Hello World!',0 message_len equ $-message section .text global _start _start: ; 使用系统调用号4(即write)将字符串输出到标准输出 mov eax, 4 mov ebx, 1 mov edx, message_len mov ecx, message int 0x80 ; 使用系统调用号1(即exit)退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 该代码使用Linux的系统调用接口,因此需要使用Linux下的汇编工具进行汇编和链接。在Windows平台上,可选择使用MinGW-w64等工具链。 可以将上述代码保存为一个文件,例如`hello.asm`,然后使用以下命令进行汇编和链接: ```bash $ nasm -f elf32 hello.asm -o hello.o $ ld -m elf_i386 hello.o -o hello ``` 最后,执行生成的可执行文件: ```bash $ ./hello ``` 执行结果将在命令行中输出“Hello World!”。 ### 回答3: 在Windows平台下,可以使用汇编语言编写一个简单的代码来输出"Hello World!"字符串。以下是一个示例代码: ```assembly section .data hello db 'Hello World!', 0 section .text global _start _start: ; 将字符串"Hello World!"的地址存储到 EDX 寄存器中 mov edx, hello ; 获取字符串长度 mov ecx, 13 ; 文件句柄 stdout 是 1 mov ebx, 1 ; 系统调用号 4 表示入文件 mov eax, 4 ; 执行系统调用,将字符串输出到屏幕 int 0x80 ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 ``` 以上代码使用x86汇编语言编写,在.data段中定义了一个存储字符串的变量`hello`。在.text段中,使用`mov`指令将字符串地址存储到寄存器EDX中,然后使用`mov`指令将字符串长度存储到寄存器ECX中,将文件句柄stdout存储到寄存器EBX中。接下来,使用`mov`指令将系统调用号4存储到寄存器EAX中,表示将要执行的系统调用是入文件。最后通过`int 0x80`指令触发系统调用,将字符串输出到屏幕上。然后使用`mov`指令将退出程序调用号1存储到寄存器EAX中,并使用`int 0x80`指令退出程序。 需要注意的是,汇编语言是与特定的体系结构和操作系统相关的低级语言。所以上述代码仅适用于基于x86体系结构的Windows操作系统。在其他体系结构或操作系统上运行此代码可能会导致错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值