入门masm32编写简单汇编程序并做具体分析

这次来分享的是用masm32编写一个很简单的汇编程序来入门一下masm32,打算使用斐波拉切数列这个简单的小程序来作为例子讲述。自己学习masm32原因是,编译原理告诉我们编译器通过一系列骚操作把我们的代码翻译成机器识别的机器码,这一波操作中有一步是翻译成了汇编代码,为了了解编译器的骚操作,我们当然得先懂得手工翻译,所以来回忆一下大一暑假学的汇编,讲道理masm32写起来还是很方便的。吐槽一下,感觉写masm32遇到的问题在度娘上很难找到很切合你所需要的答案,更多的要靠自己去翻官方的教程以及安装的masm32包里给你的一些demo来探索。

可能很多人开始学汇编用的是在dos虚拟机编写的,然而我们选用masm32就是为了借助MASM32包对很多动态链接库支持的特点,使用的时候可以对库函数直接调用,免去自己与硬件/操作系统底层打交道实现的麻烦。我第一次看到masm32给的示例那一堆include、while、invoke的反应是:这TMD什么鬼的汇编程序,你觉得我会信吗!后来看了教程才慢慢入门,可以说如果你对汇编语言和高级语言都有所了解的话,使用起来至少思路上还是很畅通的,至于说遇到问题很难在各大论坛找到针对性的答案,还希望有经验的大佬们分享一些好的方式或资源。

言归正传,fibonacci的高级语言的程序我想大家闭着眼睛倒叙着都能写出来,以C++的为例:

main()
{
int a, b, i, t, n;
a = 0;
b = 1;
i = 1;
cin >> n;
cout << a << endl;
cout << b << endl;
while (i < n)
{
t = b;
b = a + b;
cout << b << endl;
a = t;
i = i + 1;
}
}

它的masm32下的汇编代码是什么样的呢,我是这样写的(文章在会最后给出详细的注释版本):

.486
.model flat, stdcall

option casemap:none

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\msvcrt.lib
includelib \masm32\lib\masm32.lib


include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
include \masm32\include\gdi32.inc
include \masm32\include\windows.inc
include \masm32\include\msvcrt.inc
include \masm32\include\masm32.inc
include \masm32\macros\macros.asm

.data
    n dd 0
    a dd 0
    b dd 1
    i dd 1
    t dd 0
.code
start:
    mov eax, sval(input("Enter a number : "))
    mov n,eax
    print chr$("Fibonacci_number")
    print str$(1)
    print chr$(" is ")
    print str$(b)
    print chr$(" ",13,10)
    mov ecx,n
    mov i,ecx
    dec i
    .while i
        mov eax,b
        mov t,eax
        mov eax,b
        add eax,a
        mov b,eax
        print chr$("Fibonacci_number")
        mov ecx,n
        
  • 13
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值