我的第一个MASM32程序(MASM32环境配置)

1、下载MASM32安装包

官网下载地址:http://www.masm32.com

备用防丢:MASM32_SDK v11r.rar

2、安装MASM32程序

3、配置MASM32编译环境

Win7配置:

a.右击"计算机"---属性---高级系统设置---环境变量---在用户变量新建并添加如下内容

变量名           变量值
include     D:\masm32\include
lib         D:\masm32\lib
PATH        D:\masm32\bin

有些计算机可能安装一些软件,已经给添加了相同的变量名了,没关系,只要在变量值后边追加就可以了,记得要追加的后边先给个分号来隔开哦

当然,上边的变量值需要按个人所安装的目录而定的,这个需要自己去配置自己所安装的目录了!

配置就到此结束,接下来就是测试一下配置是否正确,打开个CMD,输入:ml

看有没有提示,如果是提示错误表示配置当中有错误,可能是路径按错等,这个得自己去排查了!

b.WinXP配置

右击我的电脑---属性---高级---环境变量

也是在用户配置里边添加如上内容,和Win7操作是相同的,只是WinXP要打开这个配置界面和Win7有一点点不同而已吧:)

4、我的第一个Window汇编程序

a.随便打开个记事本,当然也可以用其它IDE等了,写入如下代码

.386
.model flat, stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib

.data
szCaption   db 'Duke56',0
szText      db 'Hello World!',0

.code
start:
      invoke MessageBox,\	; 调用函数名
      NULL,\			; 父窗口句柄
      offset szText,\		; 文字
      offset szCaption,\	; 标题
      MB_OK			; 按钮类型

      invoke ExitProcess, NULL
end start

保存为text.asm(当然这里的文件名按个人保存)

b.打开个CMD,按目录切换到你保存的text.asm目录下(为了接下来的方便,要不然要符上绝对路径,这样会比较麻烦)

  • 编译text.asm文件,输入 :ml /c /coff text.asm(如果代码有错误的话会提示错误的)
  • 连接成可执行文件,输入:link /subsystem:windows text.obj(连接成功的话会在该目录下生成一个text.exe的可执行文件)

  • 接下来当然是来运行一下我们生成的EXE文件喽

 

  • 23
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
下面是一个简单的汇编矩阵乘法程序,使用Masm32开发工具: ``` .386 .model flat, stdcall .stack 4096 ; 定义矩阵的大小 MATRIX_SIZE EQU 4 ; 定义矩阵A matrixA dd 1, 2, 3, 4 dd 5, 6, 7, 8 dd 9, 10, 11, 12 dd 13, 14, 15, 16 ; 定义矩阵B matrixB dd 1, 2, 3, 4 dd 5, 6, 7, 8 dd 9, 10, 11, 12 dd 13, 14, 15, 16 ; 定义矩阵C matrixC dd 0, 0, 0, 0 dd 0, 0, 0, 0 dd 0, 0, 0, 0 dd 0, 0, 0, 0 .code main proc mov eax, 0 mov ebx, 0 mov ecx, 0 mov edx, 0 ; A*B=C ; C(i,j) = sum(A(i,k)*B(k,j)) ; 计算C矩阵 outer_loop: mov ecx, 0 inner_loop: mov eax, matrixA[ebx] mov edx, matrixB[ecx*4] imul edx, eax add matrixC[edx*4], edx add ecx, 1 add ebx, 4 cmp ecx, MATRIX_SIZE jl inner_loop cmp ebx, MATRIX_SIZE*4 jl outer_loop ; 输出C矩阵 mov ebx, 0 mov ecx, 0 mov edx, 0 output_loop: mov eax, matrixC[ebx] ; 输出整数 call writeint ; 输出空格 call writechar add ecx, 1 add ebx, 4 cmp ecx, MATRIX_SIZE jl output_loop ; 退出程序 call crlf call waitmsg ret main endp ; 输出整数 writeint proc uses ebx ecx edx eax push eax push edx push ecx push ebx mov ebx, 10 xor edx, edx cmp eax, 0 jge positive neg eax mov ah, '-' call writechar positive: cmp eax, 0 jne loop_start mov dl, '0' call writechar jmp done loop_start: xor edx, edx div ebx add dl, '0' push edx cmp eax, 0 jne loop_start loop_end: pop edx call writechar cmp esp, DWORD PTR [esp+4] ja loop_end done: pop ebx pop ecx pop edx pop eax ret writeint endp ; 输出字符 writechar proc uses eax push eax mov eax, [esp+4] mov edx, 1 push esi push edi lea esi, eax mov edi, OFFSET buffer rep movsb pop edi pop esi mov edx, 1 mov ecx, OFFSET buffer mov ebx, 1 mov eax, 4 int 0x80 add esp, 4 ret writechar endp ; 输出换行符 crlf proc mov edx, OFFSET crlf_buffer mov ecx, 2 mov ebx, 1 mov eax, 4 int 0x80 ret crlf endp ; 等待用户输入 waitmsg proc mov edx, OFFSET msg_buffer mov ecx, 12 mov ebx, 1 mov eax, 4 int 0x80 ret waitmsg endp ; 定义缓冲区 buffer db 32 dup(0) msg_buffer db 'Press any key.', 0x0a, 0x0d, 0 crlf_buffer db 0x0a, 0x0d, 0 end main ``` 这个程序计算两个4x4的矩阵的乘积,并将结果存储在另一个4x4的矩阵中。最后,程序将结果矩阵输出到屏幕上。其中,writeint、writechar、crlf和waitmsg是一些辅助过程,用于输出整数、字符、换行符和等待用户输入。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值