文档章节

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

simpower
 simpower
发布于 06/23 22:57
字数 1649
阅读 11
收藏 0
点赞 0
评论 0

x64: 

TITLE Add and Subtract              (AddSub.asm)  
  
; This program adds and subtracts 32-bit integers.  
; Last update: 2/1/02  
  
;.MODEL flat,stdcall x64 not support  
  
.code  
EXTERN ExitProcess:PROC  
EXTERN MessageBoxA:PROC  
  
  
INCLUDELIB kernel32.lib  
  
.data  
szCaption   db  '恭喜',0  
szText      db  '当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0  

.code  
main PROC  
  
    mov eax,10000h      ; EAX = 10000h  
    add eax,40000h      ; EAX = 50000h  
    sub eax,20000h      ; EAX = 30000h  

	push rbp
mov rbp,rsp
    sub rsp,30h
    ;mov rdx, offset szText
    ;mov [rbp-8],rdx
    ;mov r8, offset szCaption
    ;mov [rbp-16],r8
    

    mov rcx, 0
    mov rdx, offset szText;[rbp-8]
    mov r8, offset szCaption;[rbp-16]
    mov r9, 0
    call MessageBoxA 
  
    mov rcx, 0h  
    call ExitProcess  
  
main ENDP  
END  
;END main,donot use main  

x86:

.MODEL flat,stdcall    
      
;Visual Studio 2017 可以自动链接到相应的 DLL,不需要导入库,但是需要声明要用的函数  
  
ExitProcess PROTO STDCALL :DWORD                        ;声明需要调用的 API  
MessageBoxA PROTO STDCALL :DWORD,:DWORD,:DWORD,:DWORD   ;声明需要调用的 API   冒号后面是参数  
    
.data  
  
szCaption   db  '恭喜',0  
szText      db  '当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0  
  
.code    
  
main PROC  
    ;传入 MessageBoxA API 所需要的四个参数,通过 PUSH 方法,按照从右往左的顺序压入栈中  
    push 0h  
    push offset szCaption  
    push offset szText  
    push 0   
    ;调用时,会自动从栈中取出四个参数,并执行相应的功能  
    call MessageBoxA  
  
    push 0h  
    call ExitProcess    
    
main ENDP    
END main    

结构体:

st123 struct

a dword ?

st123 ends

NEW_WNDCLASS     struct
 
DwOption         dword     ?
OldWndClass      st123 <>
 
NEW_WNDCLASS     ends

 

 

前言

我是上学期学的汇编,因为有vs又不想用课上教的麻烦的dosbox以及masm32,抓狂但是一直没找到高亮插件和能调试的(难在运行不了而找不到答案上,出现的错误在最后放出,还请先达们不吝指点)汇编代码所以放弃了。

微笑但是我又偶然想起来了,而且偶然找到了高亮插件!

(那时查了很多帖子,甚至有人说在某度知道里说vs不能写汇编,发火我真是对这种不负责任的回答嗤之以鼻,

有个贴吧的帖子说
汇编开发环境,个人建议,如果已经安装了Visual Studio,推荐直接用vs作为开发调试工具,原因很简单,现在用的规则就是masm,微软的规则,没有人比微软更了解微软,而且可以很方便的为后续加入c/c++开发提供一站式的平台,如果没有安装,可以考虑后者Radasm+ Masm32,不要用什么cmd,然后debug。。。愚蠢至极,除了装逼浪费时间,还是装逼浪费时间,并没有半点实际价值。详见http://tieba.baidu.com/p/4827889049

嗯,我很同意上面不是斜体的那段文字(尤其是win10后根本没debug了,还得搞dosbox),所以我又来找vs运行汇编的方法了~

没想到课本上那么少的东西实际运行起来水那么深,深的不是基本语法,而是各种库什么的照搬书上的代码都没法运行,真是……大哭根本不像之前的c语言直接一个f5就完事那么简单。(ps:参考的那几个帖子的代码有的能运行,有的)

 

==============分割线============

~最简单的(C中内嵌汇编代码):在VS的C++文件里直接使用__asm{} 直接写汇编代码.

http://blog.csdn.net/sinat_27382047/article/details/53968622

 

~偷个懒写汇编作业(C语言生成汇编代码)或者研究一下生成的汇编代码

http://blog.csdn.net/sinat_27382047/article/details/72810726

 

~反汇编介绍(直接查看c中某些代码的汇编代码):

http://blog.csdn.net/sinat_27382047/article/details/72810788

 

~汇编代码在vs上的使用方法(配置完的VS并不能正常运行平时能在dosbox上运行的汇编语句):

http://blog.csdn.net/sinat_27382047/article/details/72830040

(你们想要的纯汇编hello world)

 

==============分割线============

 

 

正片儿:

插件

 

vs2015的汇编语法高亮插件(安装就行)这玩意找了我很久= =

http://download.csdn.net/detail/fhw_bin_dl/9724391

**其实AsmHighlighter高亮插件非常好弄的,在VS2017 工具->扩展和更新->选择联机->搜索AsmHighlighter,然后安装就行了【感谢下方评论中的OringeEd君】

 

过程【这是小事,vs这一系列都可以照葫芦】

一、建项目

1.建一个空项目,必须先建空项目,改现成的C++项目为assembler项目可能会造成编译不过.

 

2.选中项目右键 “生成自定义”,选择MASM生成规则.

 

二、添加及设定源文件

3.选中源文件右键-》添加-》新建项

此处后缀名是汇编的.asm

4.选中项目右键-》属性-》链接器-》系统-》 子系统选 “控制台(SUBSYSTEM:CONSOLE)”

5.选中项目右键-》属性-》链接器-》高级-》 入口点 填 "main"

 

三、测试代码编译运行:

(可以看到,如果安装了高亮插件,不仅注释可以用了,代码也有高亮提示了

最后,输出,调试时选择菜单 调试-》窗口-》寄存器 就能看到寄存器值。(这样,就不至于苦逼地用指令-ip一步步看了吧~)

 

 

代码【这事儿可深了……】
先上那位大神可以过的代码

 

 
  1. TITLE Add and Subtract (AddSub.asm)

  2.  
  3. ; This program adds and subtracts 32-bit integers.

  4. ; Last update: 2/1/02

  5.  
  6.  
  7. INCLUDELIB kernel32.lib

  8.  
  9. .MODEL flat,stdcall

  10.  
  11. ;.code

  12. ExitProcess PROTO, ; exit program

  13. dwExitCode:DWORD ; return code

  14.  
  15.  
  16. .data

  17. .code

  18. main PROC

  19.  
  20. mov eax,10000h ; EAX = 10000h

  21. add eax,40000h ; EAX = 50000h

  22. sub eax,20000h ; EAX = 30000h

  23.  
  24. push 0h

  25. call ExitProcess

  26.  
  27. main ENDP

  28. END main

关于代码的讨论:https://blog.csdn.net/Alisebeast/article/details/79861177
 

   

 

感谢以下找过的对我有用的帖子:

——来自贴吧的嘲讽~
http://tieba.baidu.com/p/4827889049

——高亮插件(asmhighlighter官网?)

http://asmhighlighter.codeplex.com/

——求高亮插件的帖子

 http://bbs.csdn.net/topics/391043876

——[汇编]_[初级]_[VS2010搭建汇编开发环境win32和x64](过程部分基本如此帖所做)

http://blog.csdn.net/infoworld/article/details/45085415

——vs2010的插件英文教程

http://kipirvine.com/asm/gettingStartedVS2015/index.htm#tutorial32(貌似这就是所有参考的源头,很全)

http://kipirvine.com/asm/gettingstartedvs2010/#syntax

http://www.deconflations.com/2011/masm-assembly-in-visual-studio-2010/

 

 

=========分割线====2018.2.10============

VS2017写汇编教程(亲测可用,很顺畅,做到了上文中“直接一个f5就完事”,没有ml.exe的错误):

http://blog.csdn.net/maguanzhan7939/article/details/78608345

【这样 就不用masm for windows那样的收费ide了~还比那个逼格高】

 

——一些源网:

http://www.masm32.com/download.htm (masm32)

https://archive.codeplex.com/?p=asmhighlighter  (asmhighlighter)

 

===========以下为广告,想省事的可以来我这里2C币下载~===================

不想装masm32(上图那货)只想要库的可以下我放的链接(内含一套 高亮插件+要用到的masm库):

http://download.csdn.net/download/sinat_27382047/10248253

本文转载自:https://blog.csdn.net/sinat_27382047/article/details/70339455

共有 人打赏支持
simpower
粉丝 24
博文 456
码字总数 21045
作品 0
海淀
程序员
vs2017 15.5.x dll调试不成功问题

配置:Unity5.5.5f1 + vs2017 问题:更新到vs2017 15.5.0之后,项目中用到的dll调试断点进不去了。之后更新到15.5.1,依然进不去。 现象:Unity工程下生成的dll文件只有dll.pdb没有dll.mdb文...

yanchezuo
2017/12/13
0
0
[VS]VS2017 安装ReportDesigner/ReportViewer的方法

原文:[VS]VS2017 安装ReportDesigner/ReportViewer的方法 解决安装完VS2017后,无法用ReportDesigner/ReportViewer打开.rdlc文件 VS2017初始安装后和VS2015一样,都没有ReportDesigner/Re...

杰克.陈
2017/11/30
0
0
Win10+VS2017配置OpenCV3.3.1

所有资源,都可以找我要:1483653870@qq.com 第一步 下载安装包: 链接:sourceforge.net/projects/opencvlibrary/ 这是一个可执行文件,打开解压即可 如图: 可执行文件 解压 第二步 配置系...

独醉孤亭
2017/12/13
0
0
MSVC conformance improvements in Visual Studio 201

MSVC conformance improvements in Visual Studio 201 Visual C++ Team Blog2017-11-163 阅读 studio The MSVC toolset included in Visual Studio version 15.5 preview 4 includes many C......

Visual C++ Team Blog
2017/11/16
0
0
本机影像生成器(Ngen.exe)工具使用实践

先介绍一点背景知识;.Net程序在运行时会实时(JIT)编译,将.Net程序文件编译成cpu认识的汇编机器码。实时编译需要消耗额外的cpu和内存资源,这对于服务器端程序是无关紧要的,因为实时编译...

长平狐
2012/06/08
174
0
Visual Studio Build Tools now include the VS2017 a

Visual Studio Build Tools now include the VS2017 a Visual C++ Team Blog2017-11-028 阅读 toolsincludestudiobuild The Visual C++ Build tools have been a huge success since we int......

Visual C++ Team Blog
2017/11/02
0
0
Visual Studio 2017 v15.5预览版的新特性先睹为快

Microsoft延续了Visual Studio 2017快速迭代开发的步伐,最新发布了15.5预览版,这是VS2017这一广受欢迎的IDE自发布以来的第五次更新,该预览版的发布使用户可以先睹为快。 该预览版启用了一...

Harriet666
2017/10/25
0
0
如何发布系统

ASP.NET --mvc4.0---vs2015发布系统、部署常见问题! 1、在项目的web层上右击-->重新生成,右击发布! 如图: 接下来就是发布了,按照图片一步一步来就行! 以上就是vs2015的发布,下面就是该...

myy629464
01/03
0
0
Newbe.Mahua 1.4 正式版发布,已经 50 Star

开篇一张图,功能全靠编。 QQ机器人平台意指那些支持通过QQ进行消息收发和群员软件平台。 使用该SDK开发可以实现一次开发,运行于多个不同QQ机器人平台平台的绝佳体验。 基于SDK开发,可以实...

Newbe36524
2017/12/18
646
0
C#连接Access数据库

C#连接Access数据库 Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。 ...

世界都一样
2016/12/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大

华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大!华为nova3超级慢动作酷玩抖音,没有办法我就是这么强大! 在华为最新发布的nova 3手机上,抖音通过华为himedia SDK集成了60fps、超级...

华为终端开放实验室
15分钟前
0
0
多 SSH Key 实现同一台服务器部署多 Git 仓库

本文以以下需求为背景,介绍详细的做法: 需在同一台服务器同时部署两个不同的 Github 仓库(对 Bitbucket 等 git 服务同样适用) root 用户可在远程登录 SSH 后附上预期的 SSH Key 进行 gi...

yeahlife
17分钟前
0
0
003. es6数值的扩展

一、普通扩展 Number 方法,将字符串、数值转为十进制 : Number('0b111') Number.isFinite() 用来检查一个数值是否为有限的:Number.isFinite(15) Number.isNan() 用来检查一个值是否为NaN N...

秋季长青
32分钟前
0
0
rabbitmq学习(二)

基本队列:Producer直接发送信息到Queue中,Consumer接收Queue发送过来的信息 简而言之,一个生产者发送信息,一个消费者接收信息。 获取连接工具类: package com.example.demo.utils;i...

人觉非常君
36分钟前
0
0
C语言数组和指针的语法糖

对于C语言,我可以这样秀:比如当创建一个数组arr[n]之后,一般我们去遍历数组的时候是for (int i = 0; i < n; i++) { a[i]; }但是我知道下表访问符[]是个语法糖,也就是说a[i]在编译器看来是...

ustbgaofan
40分钟前
0
0
Call to undefined function bcmath()的解决方法

乐意黎的ECS主机环境,Centos7.2 + PHP7 由于使用了bcdiv()函数,运行时总在抛错。 Fatal error: Call to undefined function bcmath() in /usr/loca/apache/htdocs/... on line 4 一查得知:......

dragon_tech
45分钟前
0
0
css优先级

..

architect刘源源
50分钟前
0
0
【转】Twitter的分布式自增ID算法snowflake

结构 snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000 第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以...

talen
54分钟前
0
0
hive支持行级修改

Hive从0.14版本开始支持事务和行级更新,但缺省是不支持的,需要一些附加的配置。要想支持行级insert、update、delete,需要配置Hive支持事务。 一、Hive具有ACID语义事务的使用场景 1. 流式...

hblt-j
今天
0
0
Python---scrapy框架的学习

scrapy框架的学习 先熟悉下scrapy项目结构: scrapyTest/scrapyTest/ _init_.py用来初始化项目信息 scrapyTest/scrapyTest/ items.py文件为爬虫项目的数据容器文件,主要用来定义我们的数据....

android-key
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部