汇编语言学习(1)——在Windows下搭建汇编环境及HelloWorld

今天是我学习汇编语言的第一天~

至于我为什么要学汇编,有两个原因:(1)无聊想学;(2)发现了一本荒废了亿年的汇编书(怎么感觉跟没讲似的)

书上讲的汇编环境安装方法已经太过”古老“,所以我在网上查了n篇资料,又是一次将树莓派报废的尝试,最后CPU竟然烧到了87°C,都能烤肉了(T_T)

-----------------------正文---------------------

1. 硬软件信息

硬件:树莓派4b

软件:Windows 11

2. 安装过程

第一步:安装汇编运行环境DOSBox

        DOSBox资源链接:https://pan.baidu.com/s/1lcmtFWXoe40ZgXBRt2lw9Q 
        提取码:cgf9

        解压,打开应用程序DOSBox.exe,按照提示一步步进行安装,设置全部默认

        安装完成后退出DOSBox。

第二步:安装MASM,LINK和DEBUG

        资源链接:https://pan.baidu.com/s/1WujUQlthf5d2mY7OsyQweA 
        提取码:1yug

        这边我在C盘根目录建了一个文件夹叫AssimbleStudy(名字自己取),然后新建两个文件夹分别叫ASM和MASM(这个名字不能变)(由于树莓派的特殊原因它只有C盘,有D或E盘的童鞋们可以建在其他盘,记住路径不能含空格,不然DOSBox会识别失败!!)

        然后将刚才贴出的资源链接里的压缩包解压到刚刚建的MASM文件夹。

第三步:配置DOSBox

        用编辑器打开DOSBox安装路径里的DOSBox 0.74 Options.bat文件,在末尾加入如下几行:

mount A: C:/AssimbleStudy

set PATH=%PATH%;A:/MASM;

A:

cd A:/ASM

        这段配置的意思差不多就是挂载了一个临时的虚拟磁盘A盘(因为DOSBox只能识别虚拟磁盘),它的真实路径是C:/AssimbleStudy(根据自己情况输入),然后将汇编处理的DEBUG,LINK和MASM三个文件所在的MASM文件夹临时加入环境变量PATH方便编译,转到虚拟A盘,最后进入ASM工作目录(理解能力差的童鞋这段可以直接跳过)

        保存,打开DOSBox,应该会显示如下界面

第四步:安装编辑器Visual Studio Code(可选)

        编写汇编程序用普通的编辑器就行,这边推荐使用VSCode,想用VSCode码汇编程序的可以参考下面的安装教程(安装完的直接跳第二步安装汇编扩展)

        (1)下载安装VSCode

        访问VSCode官网VSCode官方链接,根据自身情况选择安装包下载,由于树莓派是ARM64架构,我选择的安装包是VSCodeUserSetup-arm64-1.63.2.exe,童鞋们可以根据自己电脑的架构选择安装包

        安装过程一路Next,这里就不展示了。

        (2)安装汇编扩展

        打开VSCode,打开扩展界面,搜索ASM,选择ASM Code Lens扩展,选择install

        等待它安装一会儿,待界面显示“卸载”或“Uninstall”即可

3. 编写第一个汇编程序——Hello World!

        打开VSCode(VSCode也可以换成如Notepad++这样你熟悉的编辑器),在VSCode中打开刚才创建的ASM文件夹,新建一个汇编程序hello.asm(记住后缀一定要是.asm!!)

        然后键入以下内容:

STACK	SEGMENT  PARA  'STACK'	
		DB 100 DUP('?')						
STACK	ENDS								
DATA	SEGMENT								
  		STRING	DB 'Hello World!','$'		
DATA	ENDS
CODE	SEGMENT								
		ASSUME CS:CODE, DS:DATA, SS:STACK	
START:	MOV  AX,  DATA						
		MOV  DS,  AX
		MOV  AX,  STACK
		MOV  SS,  AX
		LEA  DX,  STRING
		MOV  AH, 09H
		INT  21H
		MOV  AH,  4CH
		INT  21H
CODE  	ENDS						
		END START 	

        (其实这段代码是什么意思我也不知道,从书上抄的,反正能打印出“Hello World!”就行了)

        然后打开DOSBox,输入以下代码:

masm hello.asm
link hello.obj
hello.exe

        如果有提示让你输入内容全部不输入,直接回车,看到打印出“Hello World!”即为运行成功

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值