VS2005下编译调试保护模式32位汇编程序总结

VS编译汇编语言 第一种方式肯定是嵌入汇编了,利用VS内置的__asm关键字 阅读详情

记得当初学习汇编的时候,由于时间紧张,基本上没怎么整理汇编的开发环境的使用方式。当初也就是用命令还随便编译了几个简单的程序而已,也只能算是小打小闹。好歹现在有时间了,闲来无事,于是重新拾起汇编程序,把用VS2005开发汇编应用程序的方法和大家分享。废话少说,下边开始我们的VS2005下汇编的第一个HelloWord程序。

第一步:准备工具。

下载安装Visual Studio 2005,从链接 http://ishare.iask.sina.com.cn/f/7754633.html?from=isnom 注册下载《Intel汇编语言程序设计第四版》的随书光盘。里边的资料稍后会用到。下载后解压,若不能正常解压,直接打开拖拽出来即可。解压后将setup运行,安装MASM6.15,路径按照默认在C:/Masm615不要修改。好的,准备工作完成。

       第二步:建立工程。

打开VS2005,点击 文件->新建->项目,选择Win32 控制台应用程序,输入项目名(HelloWord),点击确定。

点击下一步,勾选空项目,点击完成。

进入项目后,右键源文件->添加->新建项,选择代码,C++文件,输入汇编源文件名称,以.asm为后缀(HelloWorld.asm),点击添加.

在源文件中键入HelloWorld代码,32位汇编代码如下:

TITLE HelloWorld         (HelloWorld.asm)  ;标题

comment *

    创建的第一个HelloWorld 32位汇编程序

*

INCLUDE Irvine32.inc ; 32位汇编程序必须的包含文件

.data  ;数据段

;要显示的字符串,后跟回车/换行和结尾符

hello byte "Helloworld,this is my first assemble programe !",0dh,0ah,0

.code  ;代码段

main PROC  ;主程序入口

    mov edx,offset hello ;传递参数  

    call WriteString  ;显示字符串

    exit   ;主程序退出

main ENDP

END main

第三步:配置项目。

              针对每一个项目都需要重新配置,虽然有点繁琐,但是只是在项目刚建立的时候配置,配置完后就不需要管了。

1.       右击项目名称->自定义生成规则, 打开“Visual C++ 自定义生成规则文件”窗口, 勾选可用的规则文件“MicrosoftMacro Assembler”,然后单击“确定”按钮关闭窗口。

2.       如果自定义生成规则成功,右击相应项目名称,选择“属性”菜单项,打开“属性页”窗口,在左手框中会出现“Microsoft Macro Assembly”配置属性,否则没有。设置Microsoft Macro Assembly的General的Include Paths项目设置为刚才安装的MASM6.15目录的INCLUDE文件加夹,应该是C:/Masm615/INCLUDE。这么做正是和代码的INCLUDE命令相呼应。INCLUDE文件夹下有文件Irvine32.inc。

3.       还是属性页,展开“连接器”,选择“输入”属性,在右手框中的“附加依赖项”属性后键入值Irvine132.lib,即连接库文件名。这样Irvine32.inc就有依赖库了。

4.       针对依赖库,上边的做法还不够,除非你把他拷贝到当前的程序目录中,否则会找不到,因此我们还是最好指定他们的路径为妙。在安装的Masm6.15目录C:/Masm615/LIB有这个库文件,所以我们应该指定指定“链接器/常规/附加库目录”属性值为C:/Masm615/LIB。

至此,项目的配置工作完成。

第四步:调试运行。

选择调试->启动调试或者开始运行,可以调或者运行试该项目。方法和C++项目相同,可以添加断点,监视变量等,这里不再赘述。下边你可以开始自己的32汇编程序的开发之旅了。

 

附加说明:

这里主要介绍了32为保护模式汇编程序的编写,对于16位实模式或者虚拟8086汇编程序的开发经过我的测试貌似这么做不大支持,大家感兴趣可以自己补充。

如果实在需要编译调试16位程序的话,可以使用刚才安装的Masm6.15自带的工具make32.bat(理论上应该使用make16.bat,但是经测试make16.bat不能生成.exe文件,而make32.bat可以)进行开发。详细使用方式可以参考《Intel汇编语言程序设计第四版》(下载链接:http://ishare.iask.sina.com.cn/f/11209526.html  )的附录A。大家感兴趣可以自己学习。

Jev模型入门:从API接入到本地部署的完整实践指南 大模型的应用方式正从单一聊天窗口转向复杂的自动化工作流,而推理模型因具备指令跟随与结构化输出能力,成为构建Agent和数据处理管线的关键组件。Jev作为面向通用场景的推理模型,不仅提供了OpenAI兼容的API接口,还支持本地量化部署,兼顾隐私、可控性与长期成本。本文从模型定位出发,明确Jev与基座模型的差异,随后介绍密钥管理、API调用、参数调优,并深入演示基于Ollama与llama.cpp的本地部署流程,包括GGUF模型文件与chat template的匹配要点。针对实践中的常见问题,如密钥泄露、ma 阅读详情

相关推荐

ENSP:小型企业网络拓扑设计

包含的技术:ospf、dhcp中继、ac+ap、vrrp+mstp、acl、浮动路由、静态路由、vlan划分

weixin_45921302的博客 1万+

用vs2005创建第一个win32程序(附解决error c2731 c2440方法)

我是学习DirectX编程的初学者,对于新安装的vs2005,有一些不熟悉。所以自己在网络上东找找西找找,终于编译成功了自己第一个win32程序。首先自己选用的DirectX教材是《Beginning DirectX9》,就是这本书。 在确保自己具有c++基础上,可以开始进行windows编程了。在28页,我们可以看到怎么编辑win32项目的。首先新建->项目,打开对话框,选择wi

开发游戏,辉煌全中国 2865

TI DSP从COFF切换到EABI输出格式的5个关键修改点(TMS320F280025实测)

本文基于TMS320F280025实测,详细解析了TI DSP从COFF切换到EABI输出格式的5个关键修改点。核心差异在于EABI遵循ELF标准,涉及链接器优化、RAM数据共享、工具链升级、double数据类型位宽变化及链接器命令文件重构。迁移时需使用.retain指令防止关键数据被优化,利用NOINIT段保护共享RAM,并更新hex2000等工具,以确保BootLoader与应用程序稳定运行。

weixin_29189381的博客 265

[笔记]vs2015 编写汇编masm32 Helloworld

文章目录前言准备创建空项目配置入口Main配置子系统为控制台新建asm文件添加代码内容右键项目名 生成依赖项-》生成自定义-》选中masm这步骤很关键:文件右键设置属性Microsoft Macro Assembler添加断点运行 进入断点 前言准备 vs2015 创建空项目 配置入口Main 配置子系统为控制台 新建asm文件 添加代码内容 TITLE Add and Subtract (AddSub.asm) ; This program adds and subtra

二次元怪兽的博客 1391

新手避坑指南:用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR,这些参数设置错了白忙活

本文详细介绍了使用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR时的关键参数设置技巧,帮助新手避免常见错误。重点解析了连接图生成、干涉工作流、DEM处理等环节的12个关键参数,包括Max Normal Baseline、Unwrapping Coherence Threshold等,提供实测安全值范围和优化建议,确保处理效率和结果准确性。

weixin_30694389的博客 557

Netty源码分析系列之writeAndFlush()下

write()只会将数据只是发送到了ChannelOutboundBuffer 缓冲区中,还没有被发送到操作系统的套接字中只有当调用了 flush()方法后,才会真正将数据发送到套接字中。那么 flush()方法的源码又是如何执行的呢?

天堂的博客 1571

从键盘输入字符串并输出该字符串(汇编程序)

原文地址:从键盘输入字符串并输出该字符串(汇编程序) DATAS SEGMENT STR   DB"please input a string:$"    BUF   DB 20       DB ?       DB 20 DUP (?) CRLF  DB 0AH,0DH,"$";此处输入数据段代码  DATAS ENDS STACKS SEGMENT STACK

u011976649的博客 6454

【26美赛D题】2026美赛数学建模(MCM/ICM)思路解析及代码分享

2026美赛D题数学建模竞赛思路解析摘要:本文针对美赛D题提供系统性解决方案,提出四层建模框架(数据层、机理层、模型层、决策层),强调逻辑闭环比模型复杂度更重要。包含通用建模步骤:指标体系构建、状态评估、动态预测和策略优化,并给出Python基础代码框架。论文建议采用七段式结构,突出从现实问题到决策方案的完整闭环。核心在于通过数据驱动方法揭示问题规律,结合多源数据整合、系统行为建模和风险评估,最终形成可落地的决策建议,体现数学建模解决实际问题的能力。

一键难忘的博客 1080

使用 Visual Studio 2017 写纯 64 位汇编(intel 风格)

1. 新建个 Visual C++ 的空项目关闭 [安全开发生命周期(SDL)检查],并选择空项目2.生成依赖性选择 masm 依赖项并生成 (注意:若先创建了 asm 文件再生成依赖项,asm 文件是不会被汇编软件编译的!解决方案在最后!)3.新建 asm 汇编文件4.编写汇编语言 .code ;代码段     !64 位没有 .model 宏指令,无法设置内存模型和生成的代码风格! m...

Alisebeast的博客 1万+

六、Tool 工具系统:让大模型拥有“手脚“

我问你一个问题:大模型能不能告诉你"北京今天天气怎么样"?能——它能用非常流畅的中文回答你不能——它不知道这个答案因为它没有联网能力,也没有实时数据。它可能会自信地编一个"今天晴,25 度"给你——这就是幻觉。问题出在哪?大模型是一个"推理引擎",不是一个"执行引擎"。它知道天气 API 怎么调用,但不能真的发出 HTTP 请求。它知道 Python 代码怎么写,但不能真的运行代码。它知道数学公式,但做不了精确的大数计算。Tool 工具系统解决的,就是这个"最后一公里"问题。

牛肉胡辣汤 156

matplotlib保存图片设置分辨率总是96dpi,好烦躁,教你一招轻松解决

matplotlib保存图片设置分辨率总是96dpi,好烦躁,教你一招轻松解决 目录 matplotlib保存图片设置分辨率总是96dpi,好烦躁,教你一招轻松解决 #使用plt.savefig("cm.png",dpi = 300)为什么不管用 #plt.rcParams也不管用 #解决方案 在做论文的过程中,许多期刊或者会议对图片的分辨率有明确的要求,例如,dpi=300。 之前画曲线图都是采取保存方式为savefig(dpi=300),然后查看保存图片的属性信息,然而你看到的现象是

data+scenario+science+insight 8798

[学习笔记]在windows下编译内核[大杂烩]

最近在做系统引导和实模式-保护模式切换.模仿早期linux的方法,把32位二进制镜像加载到物理地址0x00000000处,覆盖实模式下用的IVT.通常,像这种工作,需要一个虚拟机,比如Virtual PC或者Bochs来调试.而编译呢,GCC,也是个好东东.~ 在windows下,可以使用MinGW GCC或者是cygwin.笔者使用的是MinGW-GCC由于之前真的没有使用过GCC的那些

Crazii的技术专栏 1484

【007】C++编程必知:原码、补码、反码的全面解读

计算机存储的是数据的补码。原码:计算机中对数字的二进制定点表示方法。比如123的原码是0111 1011。无符号数:原码=反码=补码。有符号数:要分正数和负数,正数的最高位为0,负数的最高位为1。其中,正数的原码、反码、补码都是相同的;负数的反码等于原码的符号数(最高位)不变,其他位取反;补码等于反码+1。比如:-123的原码是1111 1011,反码为1000 0100,补码为1000 0101。原码、补码和反码都是用于计算机表示有符号整数的方法。

Lion_Long的博客 2916

C++中使用Lua脚本 和lua中调用c的方法

参考http://blog.youkuaiyun.com/kun1234567/archive/2007/12/11/1929815.aspx 第1步:下载 从官方主页www.lua.org下载Lua源代码,最新版本为5.1.3。(jack-wang注:现在已经是5.1.4了) 解压之后找到“[Lua]/src”文件夹,这里面就是Lua了,不过还不能直接使用。 第2步:编译lua 使用任意ANSI

2754

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

计算机硬件基础之重学8086

好久不发学习笔记了,一部分是因为中秋后这周感冒了,过得实在怠惰,另一部分是因为之前领到老板布置的任务后,实在是很懵逼。 上周一再次和导师沟通了一波,还是很懵逼,没有揣度出来老板究竟想让我们干什么,好像是要做一个实时进程调度的实验方案? 直到上周四晚上,队友徐老板一语点醒梦中人:“老板可能会想‘让你们看点书就这么难吗?’要不然为什么我们都问了他两次了,他都在给我们介绍基础?” 哦哦哦哦,好...

荆赤潮的博客 309

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深入解析x86架构进程与执行环境:从虚拟内存到系统调用的底层原理

进程是操作系统进行资源分配和调度的基本单位,理解其运行机制是系统编程和性能优化的基础。在x86架构下,进程的执行环境由CPU硬件与操作系统内核共同构建,核心原理包括内存管理单元(MMU)实现的虚拟内存隔离、特权级(Ring 0/3)划分带来的用户态与内核态分离,以及基于页表的内存映射机制。这些技术确保了进程间的安全隔离与稳定运行,其价值在于为应用程序提供了统一的抽象接口,同时保障了系统整体安全。在实际应用场景中,无论是高并发服务器开发、性能调优,还是排查'拒绝访问'或'文件被占用'等系统错误,深入理解进程的

weixin_34161083的博客 419

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

自建简单计算机CPU——软硬兼施

教材的一个独特之处是它的广泛性。无论您对学生构建的SAP(simple as possible)简单微处理器、6502、6800/6808、8080/8085/Z80、8086/8088感兴趣,这本教科书都能满足您的需求。关于微处理器的教科书有时很难理解。《Digital Computer Electronics (1993)》以易于理解和有趣的方式介绍微处理器的各个方面。使用这本教科书的唯一先决条件是了解二极管和晶体管。

zashizhi3299的博客 537

汇编实验之字符、字符串

题目描述:   编一个程序,实现从键盘输入一个长度不超过300个字符的串(以回车键作为输入结束),然后在下一行以倒序输出所输入的字符。 DATAS SEGMENT string db 301 dup('$') ctrl db 0ah,0dh,'$' DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV

noveto的博客 4127

用MFC写一个hello word

嗯,姐姐给布置的作业,怕我以后忘了,写篇博客当笔记。 我用的是最新版的VS2019中的MFC应用程序来写一个简单的helloWord。 昨天晚上装的时候没有注意,只选择了有关C++的方面,忘了勾选MFC选项。 今天写的时候才发现VS里没有这个应用程序。 解决了上面的问题后,开始写。 我们是想以对话框的形式来实现helloWord的弹出。 首先,先建立一个新的项目 出现如下界面,如果之前使用过M...

HJWYYQX的博客 952

80386汇编_进入32位保护模式

文章目录效果代码 效果 代码 ;栈段与栈指针 0x07c00 --> 0x07a00 由高地址 到 低地址 mov ax,0x07a0 mov ss,ax mov sp,0x7c00 ;-------------------------------------------------------------------------------- ;计算gdt的逻辑地址 mov dx,[cs:gdt_base+0x7c00+2] mov

dc12499574的博客 370

汇编语言系列Ⅲ 实现字符串操作

软件:emu8086 语言:汇编语言(Assembly) 注意:本文列出了字符串匹配和字符串输入显示的代码,全部代码为博主独自一人编写,会有瑕疵,谨慎使用。 7.字符串匹配设计 7.1设计要求: 要求掌握提示信息的设置及读取键入信息的方法。设计程序,从键盘输入两个字符串进行比较,如相同,则显示“MATCH”,否则显示“NO MATCH”。 7.2设计思路: DOS功能调用输...

a2860049的博客 1936
上一篇: DM9000网卡驱动移植
下一篇: AppWidget的使用
RubyBoss
博客等级 码龄17年 157粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值