第一行汇编语言的helloworld!

前言:

     今天1024耶!首先,祝大家节日快乐!!!

     文章主题是敲下第一行汇编语言的代码,什么?你还不会写汇编语言的helloworld?觉得参数字符太多,那没事,框架直接给你,复制粘贴即可,在那之前,让我们一起了解一些东西。

     我觉得一个优秀的程序员是一定要学习汇编语言编译原理的,即使很多人觉得汇编语言已经不实用了(因为大都在使用高级语言,忽略了它的重要地位),但是从机器层面来说,除了我们的机器语言,汇编语言可以更好的让我们从底层去了解关于计算机的知识,关于我们现在使用高级语言的知识。很多时候我们和大佬的差距,往往在于底层的计算机知识:计算机组成原理、操作系统、计算机网络。当你知道的底层知识越多,在高级语言等上层封装抽象的东西就更加有底气


一、给出模板(直接复制粘贴即可使用)

.386
.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

INCLUDE io.h            ; header file for input/output

cr      EQU     0dh     ; carriage return character
Lf      EQU     0ah     ; line feed

.STACK  4096            ; reserve 4096-byte stack

.DATA                   ; reserve storage for data
//在这里定义变量


.CODE                           ; start of main program code
_start:
//在这里写代码
       

        INVOKE  ExitProcess, 0  ; exit with return code 0

PUBLIC _start                   ; make entry point public

END                             ; end of source code

二、模板解析

.386    //指明指令集
.MODEL FLAT    //程序工作模式, flat为Windows程序使用的模式(代码和数据使用同一个4GB段)

ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD //是一个指示性语句。Proto用来产生一个函数,函数名字是:ExitProcess,用于结束程序的系统函数。它有一个参数Dword类型的。

INCLUDE io.h            ; //指示汇编器拷贝一文件io.h到程序中

cr      EQU     0dh     ; //符号赋值语句,用符号代替数值使用。0dh回车符
Lf      EQU     0ah     ; //0ah 换行符,这个是ascall码

.STACK  4096            ; //指示汇编器运行时堆栈要保留多少字节,通常是保留4096个字节

.DATA                   ; //程序数据段的开始,该数据段中保留了变量的内存空间。


.CODE                           ; //标识这个程序的入口,即第一条要执行的语句的地址。
_start:
        

        INVOKE  ExitProcess, 0  ; //调用子过程ExitProcess的指令,它的功能是终止这个程序。

PUBLIC _start                   ; //文件中的名字通常只有在文件中可以看到,该语句使得其后的名字可以在文件外可见,_start是连接器可以识别执行的第一条指令。

END                             ; //表示程序的结束,其后不能跟任何语句

三、第一行helloworld!

     看到上面都是代码是不是很无趣呀,让我们写下第一行helloworld吧,在记事本里面写下代码,另存为hello.asm文件

; output hello,world
; Author:  threecat.up

.386
.MODEL FLAT

ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD

INCLUDE io.h            ; header file for input/output

cr      EQU     0dh     ; carriage return character
Lf      EQU     0ah     ; line feed

.STACK  4096            ; reserve 4096-byte stack

.DATA                   ; reserve storage for data
str1 byte 'hello,world!' ,0//定义字符串变量
str2 byte ' 1024,happy!' ,0
.CODE                           ; start of main program code
_start:
        output str1//打印hello,world等字符串
        output str2
        INVOKE  ExitProcess, 0  ; exit with return code 0

PUBLIC _start                   ; make entry point public

END                             ; end of source code

     我们在记事本(后缀名为.asm大小写均可)里面写下这行代码,然后当然是汇编链接运行啦。

首先汇编执行(进入你保存hello.asm文件的路径):

ml /c /coff hello.asm

然后链接

link /subsystem:console /entry:start /out:hello.exe hello.obj io.obj kernel32.lib

在DOS里面有:

     看,打印出第一行代码啦! 


后记:

     之后也会陆续更新关于汇编语言的知识,欢迎关注哦,溜了溜了,1024coding~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

threecat.up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值