当前位置:文档之家› 不要把MASM32开发环境和MASM汇编器版本搞混了!

不要把MASM32开发环境和MASM汇编器版本搞混了!

不要把MASM32开发环境和MASM汇编器版本搞混了!
不要把MASM32开发环境和MASM汇编器版本搞混了!

不要把MASM32开发环境和MASM汇编器版本搞混了!

MASM32是一个为那些对学习或者编写32位微软汇编(MASM)感兴趣的程序员提供的工作环境,它最流行的版本是8.0版,而我所知道最新版本是9.0版。但是请大家一定要注意,这里的8.0版和9.0版不是指MASM编译器(即ML)的版本,而是MASM32开发环境的版本。经常看到网上有网友发的贴把这两个概念都搞混了。

那么MASM(ML)编译器的版本到底有哪些呢?教学上常用的版本是 5.0版的,之前还有个 4.0版的记得“全国计算机等级三级考试”就是用的 4.0版。 5.0版之后有个 5.1版本,在这之后,从 6.0版开始MASM就改名ML了,因为它把编译和连接组合在一起了。而且 6.0版还对汇编语言进行了大幅改造,使之支持高级语言的很多特性。 6.0版之后常看到的就是6.11、6.13、6.14MASM32(V8.0和V9.0)就是包含有ML6.14版,而不是ML8.0版。

6.14之后就是6.15但不常见,我手头上有6.15的ML,有兴趣的朋友可以向我索取或点此处进入下载。但Microsoft从 6.15版开始好象就不再单独发布MASM的开发工具包了。

以后的ML还有7.0、7.1版,最新的是ML8.0版。但它们都只包含在Visual https://www.doczj.com/doc/0e3840159.html,和Visual Studio 2005里面。而且如果你安装了Visual Studio 2005的64位开发环境,你将得到一个MASM for x64 (ml64.exe)哈哈,各位这可是支持Intel 和AMD的64位CPU的汇编语言编译器!有志于64位底层开发的赶快去试用看看吧。

MASM 4.00这是最先广泛使用的一个 MASM 版本,适用于 DOS 下的汇编编程。它很精巧,但使用起来不是很智能化,需要用户自己一板一眼地写出所有的东西。

很多教科书上讲的 8086 汇编语法都是针对这个版本的,对程序员来说。它

只比用 Debug 方便一点点

MASM 5.00MASM 5.00 比 4.00 在速度上快了很多,并将段定义的伪指令简化为类

似 .code 与 .data 之类的定义方式,同时增加了对 80386 处理器指令的

支持,对 4.00 版本的兼容性很好

MASM 5.10对程序员来说,这个版本最大的进步是增加了对 @@ 标号的支持。这样,程序员可以不再为标号的起名花掉很多时间。另外, MASM 5.10 增加了对 OS/2

1.x 的支持

MASM 5.10B1989 年推出,比上一个版本更稳定、更快,它是传统的 DOS 汇编编译器中最完善的版本

MASM 6.001992 年发布,有了很多的改进。编译器可以使用扩展内存,这样可以编译更大的文件,可执行文件名相应从 Masm.exe 改为 Ml.exe 。从这个版本开

始可以在命令行上用 *.asm 同时编译多个源文件,源程序中数据结构的使

用和命令行参数的语法也更像 C 的风格。最大的改进之一是开始支

持 .if/.endif 这样的高级语法,这样,使用复杂的条件分支时和用高级语

言书写一样简单,可以做到几千行的代码中不定义一个标号;另外增加了

invoke 伪指令来简化带参数的子程序调用。这两个改进使汇编代码的风格

越来越像 C ,可读性和可维护性提高了很多

MASM 6.00A未发售的版本

MASM 6.00B最后一个支持 OS/2 的 MASM 版本,修正了上一版本中的一些错误

MASM 6.10修正了一些错误,同时增加了 /Sc 选项,可以在产生的 list 文件中列出

每条指令使用的时钟周期数

MASM 6.10A1992 年发布,修正了一些内存管理方面的问题

MASM 6.111993 年 11 月发布,支持 Windows NT ,可以编写 Win32 程序,同时支持Pentium 指令,但不支持 MMX 指令集

MASM 6.11C1994 年发布,增加了对 Windows 95 VxD 的支持

MASM 6.121997 年 8 月发布,增加 .686 , .686P , .MMX 声明和对相应指令的支持

MASM 6.131997 年 12 月发布,增加了 .K3D 声明,开始支持 AMD 处理器的 3D 指令MASM 6.14这是一个很完善的版本,它在 .XMM 中增加了对 Pentium III 的 SIMD 指令集的支持,相应增加了 OWORD ( 16 字节)的变量类型

MASM 6.152000 年 4 月发布

32位汇编语言程序设计上机指导

《32位汇编语言程序设计》上机指导 《32位汇编语言程序设计》上机指导 (1) 实验一建立windows环境下32位汇编语言开发环境 (2) 实验2 指令格式与寻址方式 (4) 实验3 数据操作编程 (5) 实验4 分支和循环程序设计 (6) 实验5 子程序设计 (8) 实验6 输入输出程序设计 (9) 实验7:字符串操作 (10) 实验8:宏结构设计 (11) 实验9:混合编程 (12) Windows环境下32位汇编语言开发环境的建立 (13) 调试程序Windbg (19) 宏汇编命令ML和连接命令LINK常用参数速查 (22) 输入输出宏命令 (23)

实验1 建立windows环境下32位汇编语言开发环境 实验目的:建立windows环境下32位汇编语言开发环境,并熟悉它的使用方法。 实验要求:(1)建立windows环境下32位汇编语言开发环境; (2)熟悉自己建立的开发环境的使用方法; (3)熟悉调试工具的使用 实验内容:(1)定制masm32集成开发环境,使之符合教学要求。 (2)分别建立汇编,连接,和汇编&连接批处理命令,能够生成包含调试信息的目标文件,列表文件,以及能够进行调试的可执行WIN32控制台程序。 (3)建立16位和32位汇编语言框架程序。 (4)在自己建立的开发环境下汇编,连接,运行教材中的例3-1和例3-2。 实验步骤: 1、安装开发环境 运行《32位汇编语言程序设计》教材配套开发环境软件“开发工具.exe”,将MASM32安装在根目录下(例如:c:\masm32)。接着运行Exmasm32.exe,将其它软件安装在masm32的目录下(例如:c:\masm32)。建立masm32文件夹中的qEditor.exe和Windbg.exe桌面快捷方式。 2、定制开发环境 修改文件msm32\bin\buildc.bat中的内容,使得执行Project\Console Assemble & Link后能够汇编连接可调试的32位控制台应用程序,同时生成列表文件。 汇编命令改为: \masm32\bin\ml /c /coff /Fl /Zi “%1.asm” 连接命令改为: \masm32\bin\link /debug “%1.obj” 1、建立汇编连接16位应用程序的批处理文件make16.bat 建立汇编连接16位应用程序的批处理文件make16.bat,可以用于汇编连接可调试的实模式应用程序,同时生成列表文件。 make16.bat的主要内容: \masm32\bin\ml /c /Fl /Zi "%1.asm" \masm32\bin\Link16 /debug "%1.obj" 4、建立适合在定制开发环境下使用的32位应用程序框架 .386 ;必须是第一条非注释语句,说明这是一个32位应用程序 .model flat, stdcall ;定义程序的存储模式(32位应用程序中必须采用flat) include \masm32\include\io32.inc ;可选,如果在程序中使用作者自定义的宏命 令需要这一句 .stack 4096 ;定义堆栈段 .data ;定义数据段 ……;数据定义 .code ;定义代码段 start: ;程序起始点 ……;程序代码 ret ;程序结束点,返回WINDOWS ……;子程序代码 end start ;汇编结束

汇编语言 快速入门

“哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来。”此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛。)别急,别急,让我把这个中原委慢慢道来:一、所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪、调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣……;二、汇编直接与硬件打交道,如果你想搞通程序在执行时在电脑中的来龙去脉,也就是搞清电脑每个组成部分究竟在干什么、究竟怎么干?一个真正的硬件发烧友,不懂这些可不行。三、如今玩DOS的多是“高手”,如能像吾一样混入(我不是高手)“高手”内部,不仅可以从“高手”朋友那儿套些黑客级“机密”,还可以自诩“高手”尽情享受强烈的虚荣感--#$%&“醒醒!” 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指

不要把MASM32开发环境和MASM汇编器版本搞混了!

不要把MASM32开发环境和MASM汇编器版本搞混了! MASM32是一个为那些对学习或者编写32位微软汇编(MASM)感兴趣的程序员提供的工作环境,它最流行的版本是8.0版,而我所知道最新版本是9.0版。但是请大家一定要注意,这里的8.0版和9.0版不是指MASM编译器(即ML)的版本,而是MASM32开发环境的版本。经常看到网上有网友发的贴把这两个概念都搞混了。 那么MASM(ML)编译器的版本到底有哪些呢?教学上常用的版本是 5.0版的,之前还有个 4.0版的记得“全国计算机等级三级考试”就是用的 4.0版。 5.0版之后有个 5.1版本,在这之后,从 6.0版开始MASM就改名ML了,因为它把编译和连接组合在一起了。而且 6.0版还对汇编语言进行了大幅改造,使之支持高级语言的很多特性。 6.0版之后常看到的就是6.11、6.13、6.14MASM32(V8.0和V9.0)就是包含有ML6.14版,而不是ML8.0版。 6.14之后就是6.15但不常见,我手头上有6.15的ML,有兴趣的朋友可以向我索取或点此处进入下载。但Microsoft从 6.15版开始好象就不再单独发布MASM的开发工具包了。 以后的ML还有7.0、7.1版,最新的是ML8.0版。但它们都只包含在Visual https://www.doczj.com/doc/0e3840159.html,和Visual Studio 2005里面。而且如果你安装了Visual Studio 2005的64位开发环境,你将得到一个MASM for x64 (ml64.exe)哈哈,各位这可是支持Intel 和AMD的64位CPU的汇编语言编译器!有志于64位底层开发的赶快去试用看看吧。 MASM 4.00这是最先广泛使用的一个 MASM 版本,适用于 DOS 下的汇编编程。它很精巧,但使用起来不是很智能化,需要用户自己一板一眼地写出所有的东西。 很多教科书上讲的 8086 汇编语法都是针对这个版本的,对程序员来说。它 只比用 Debug 方便一点点 MASM 5.00MASM 5.00 比 4.00 在速度上快了很多,并将段定义的伪指令简化为类 似 .code 与 .data 之类的定义方式,同时增加了对 80386 处理器指令的 支持,对 4.00 版本的兼容性很好 MASM 5.10对程序员来说,这个版本最大的进步是增加了对 @@ 标号的支持。这样,程序员可以不再为标号的起名花掉很多时间。另外, MASM 5.10 增加了对 OS/2 1.x 的支持 MASM 5.10B1989 年推出,比上一个版本更稳定、更快,它是传统的 DOS 汇编编译器中最完善的版本 MASM 6.001992 年发布,有了很多的改进。编译器可以使用扩展内存,这样可以编译更大的文件,可执行文件名相应从 Masm.exe 改为 Ml.exe 。从这个版本开 始可以在命令行上用 *.asm 同时编译多个源文件,源程序中数据结构的使 用和命令行参数的语法也更像 C 的风格。最大的改进之一是开始支 持 .if/.endif 这样的高级语法,这样,使用复杂的条件分支时和用高级语 言书写一样简单,可以做到几千行的代码中不定义一个标号;另外增加了 invoke 伪指令来简化带参数的子程序调用。这两个改进使汇编代码的风格 越来越像 C ,可读性和可维护性提高了很多 MASM 6.00A未发售的版本 MASM 6.00B最后一个支持 OS/2 的 MASM 版本,修正了上一版本中的一些错误 MASM 6.10修正了一些错误,同时增加了 /Sc 选项,可以在产生的 list 文件中列出

《汇编语言》实验报告-搭建开发环境

《汇编语言》实验报告 得分:

1)VC6平台下的汇编语言开发环境搭建(使用MASM32的汇编器 +VC6) 配置IDE环境: –在VC的tools/option/Directories页面中添加Irvine32.inc等所在的目录到include files中; 添加 Irvine32.lib等所在的目录到library files. –将masm32中的ml.exe和ml.err拷贝到VC的Microsoft Visual Studio\VC98\Bin目录中 创建与配置project: –新建VC的win32 console类型空工程 –创建一个asm后缀的文件,并把汇编代码(教材第85页addsub3.asm)输入该文件中,然后将该asm文件添加到 Source Files –选中asm文件,在project settings/Custom Build页面中命令行加: ml /c /coff /Fo$(TargetDir)\$(InputName).obj $(InputPath) 输出中加上: $(TargetDir)\$(InputName).obj –“Project setting”页面的”link”选项卡中“object/library module ”中加入irvine32.lib 2)汇编与链接不带输出的加减法程序(即教材第85页 addsubTest.asm); 3)在程序最后加入调用DumpRegs过程的语句,以输出各寄存器的 值。 4)以单步执行的方式调试该程序,查看每步结果,并解释每步结果, 并写成注释。(特别注意对标志位的影响) 5)(可选)尝试修改程序。 6)(可选)单步跟踪课件中4.3.3节的程序“ptr应用示例”,结合 VC6的内存查看功能(通过菜单view debug windows Memory 调出内存查看窗口)理解每步的执行结果。(注意课件中只是大部分代码,请补全头文件以及程序退出宏。)

详解VS2010如何搭配汇编程序开发环境的图解教程

详解VS2010如何搭配汇编程序开发环境的图解教程 本文和大家分享一下如何搭配汇编程序开发环境的图解教程,非常不错的文章哦。 引子 由于这些日子一直都在研究底层的技术,从Windows 驱动程序,到Windows 内核等等技术的学习, 让我对底层的技术越发有兴趣了,而刚好,在研究WRK 时, 对内存管理,寄存器,地址总线,数据总线,控制总线等的理解不够透彻, 所以越发的想学习汇编程序设计来提升功力, 而由于近来在公司里一直都有项目压着,所以在公司里也实在不好拿本汇编程序设计看, 所以只好晚上回来学习了,汇编看了几个晚上,也算是蛮有感觉的。 今天就先来搭个开发环境再说吧。 开发环境搭配 我介绍四种开发汇编程序的方式: 第一种:直接在Dos 环境下使用Edit 命令调出源码编辑框, 生成源码后,可以使用由微软提供的masm 汇编编译器来对源码进行编译, 编译完后再使用Linker 连接器即可得到可执行文件, 这种方式现在几乎被灭绝了(当然使用masm 汇编编译器还是很普遍的), 除非你真要在DOS 环境下运行汇编程序; 第二种:通过简化第一种方式而来; 第三种:直接使用Masm for Windows 集成实验环境,这个开发环境呢,非常适合汇编语言的初学者,

因为这个IDE 本身就是由一些从事汇编程序教学的大学老师开发的出来用于汇编初学者进行学习和实验的, 所以使用简单,方便,这里可以对这个IDE 稍加推荐; 第四种:则是通过Visual Studio 这个强大的IDE 来实现汇编程序的编译,运行和调试,至于Visual Studio 就不多做介绍了,.Net 用了这么多年,这东西强大到什么程度那是总所周知的; 第一种方式:使用Edit + MASM 5.0 编译器+ Linker 连接器 其实这种方式是很简单的,只是很麻烦,因为简单而且麻烦, 所以我采用尽可能的将截图传上来,然后稍加注解的方式进行介绍, 软件准备: 需要MASM 5.0 或者以上的汇编编译器 首先,是要编辑汇编源代码: 其实对于源码的编辑根本不需要向如下这么麻烦,直接拿个记事本就OK 了 运行cmd 命令

基本演示汇编语言实验操作方法

基本演示1汇编语言实验操作方法 一.实验的基本方法(MASM宏汇编子目录下) 1.在DEBUG下运行汇编指令或简单小程序 在DEBUG提示符下,用汇编命令A:输入汇编指令或简单小程序,用单步命令T 或全程命令G来执行,并检查执行中间结果与最后结果。 2.标准汇编程序上机方法 A.建立ASM文件,用https://www.doczj.com/doc/0e3840159.html,全屏幕编辑文件或其他编辑文件建立扩展名为ASM的源程序. B.用MASM(或ASM)产生扩展名为OBJ目标文件。 C.用LINK产生扩展名为EXE可执行文件。 D.在DEBUG下,把文件调入内存,调试程序。 E.在DOS下可直接执行扩展名为EXE的文件。(详细过程) 二.汇编语言的工作环境. A.硬件环境 IBM-PC及其系列机 内存256K字节以上 外存:硬盘或至少一个软驱 CPU:80586以上 显示器:单色或彩色显示器 键盘:标准ASCII码键盘 B.软件环境 编缉程序:https://www.doczj.com/doc/0e3840159.html,或其他编缉程序 汇编程序:MASM.EXE或ASM.EXE 连接程序:LINK.EXE 调试程序:https://www.doczj.com/doc/0e3840159.html,或DEBUG.EXE

A命令 在命令A后跟地址,按回车输入程序,可以连续输入,当按下回车后,就退回到DEBUG下。 T命令

T命令为跟踪命令。 G命令 该地址指定了运行的起始地址,如不指定则从当前的cs:ip开始运行EDIT.EXE

怎样生成.exe文件

生成.obj文件

基本演示2DEBUG命令的使用 A.程序调用命令 C>DEBUG[D:][PATH][FILENAME[.EXT]][PARM1][PARM2] 其中,文件名是被调试文件的名字。如未键入文件名。可用DEBUG命令N和L 把需要文件装入存储器后再调试。D指定驱动器,PATH为路径,FILENAME为文件名,PARM为命令参数 B.显示存储单元命令 -D[ADDRESS]或;ADDRESS地址 -D[RANGE];RANGE范围 C.修改存储单元内容命令 -E ADDRESS[LIST] D.检查和修改寄存器内容命令 -R[REGISTER NAME];Register name寄存器名字 E.汇编命令 -A[ADDRESS] F.跟踪命令 -T[=ADDRESS][VALUE];Value变量值 G.运行命令 -G[=ADDRESS][ADDRESS2[ADDRESS3] H.反汇编命令 -U[ADDRESS] -U[RANGE]

使用VS2015调试罗云彬的32位汇编语言源代码

使用VisualStudio2015 调试罗云彬的32位汇编语言附属光盘中的汇编源代码 (第三版琢石成器版) 整理:太虚野老

本文介绍使用Visual Studio 2015 调试汇编源代码。以罗云彬的《Windows环境下32位汇编语言程序设计(最新琢石成器版)》附属光盘中的汇编源代码为例。 1.创建ASM项目 打开Visual Studio 2015,选择新建一个VC++项目。选择“空项目”,输入项目名称,点确定。 在工程中的“源文件”文件夹新建“.asm”类型的源文件: 在这里会发现不能新建“.asm”类型的文件,选择“C++文件(.cpp)”,然后在文件结尾加上扩展名.asm。

现在项目和源文件都有了,但是这毕竟是个VC++的空项目,VC++项目在默认情况下是不会编译.asm类型的源文件的。所以你点击“生成解决方案”发现根本什么都没有生成,Debug文件夹是空的,就会出现这样的现象。 事实上在创建源文件时,可以使用任意格式的源文件。例如使用文本文件:

要经过下面两步设置。 第一步,右击解决方案选择“生成依赖项”→“生成自定义”: 把“MASM”那项勾上,确定。

第二步,右击你创建的.asm源文件,选择属性,在配置属性->常规->项类型下拉菜单中选择“Microsoft Macro Assembler”。这样就指定了你源文件的类型是.asm格式的,如果不指定默认就是按照.cpp也就是c++语法去编译自然是行不通的。 设置这些之后还要去修改项目配置,这样程序才能得以运行。这包括是否连接其他的库文件(.lib)、是否调试、子系统的原型环境。这些全部都在项目属性中设置。打开项目属性的方法:你可以在刚才右键点“生成自定义”那里选择最下面的属性,也可以在项目选项卡里找到“属性”一项然后选择。 选择配置属性->连接器。 把调试->生成调试信息改为“是(/Debug)”。在Visual Studio 2015中默认是“true”; 把系统->子系统改为“控制台(/SUBSYSTEM:CONSOLE)”:

汇编语言入门

汇编语言入门教程 对初学者而言,汇编的许多命令太复杂,往往学习很长时间也写不出一个漂漂亮亮的程序,以致妨碍了我们学习汇编的兴趣,不少人就此放弃。所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样)。某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了。为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ……)。但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP、WINRAR…依次压迫,嘿嘿!)教程。大言不惭的说,看通本文,你完全可以“不经意”间在前辈或是后生卖弄一下DEBUG,很有成就感的,试试看!那么――这个接下来呢?――Here we go!(阅读时看不懂不要紧,下文必有分解) 因为汇编是通过CPU和内存跟硬件对话的,所以我们不得不先了解一下CPU和内存:(关于数的进制问题在此不提) CPU是可以执行电脑所有算术╱逻辑运算与基本I/O 控制功能的一块芯片。一种汇编语言只能用于特定的CPU。也就是说,不同的CPU其汇编语言的指令语法亦不相同。个人电脑由1981年推出至今,其CPU发展过程为:8086→80286→80386→80486→PENTIUM →……,还有AMD、CYRIX等旁支。后面兼容前面CPU的功能,只不过多了些指令(如多能奔腾的MMX指令集)、增大了寄存器(如386的32位EAX)、增多了寄存器(如486的FS)。为确保汇编程序可以适用于各种机型,所以推荐使用8086汇编语言,其兼容性最佳。本文所提均为8086汇编语言。寄存器(Register)是CPU内部的元件,所以在寄存器之间的数据传送非常快。用途:1.可将寄存器内的数据执行算术及逻辑运算。2.存于寄存器内的地址可用来指向内存的某个位置,即寻址。3.可以用来读写数据到电脑的周边设备。8086 有8个8位数据寄存器,这些8位寄存器可分别组成16位寄存器:AH&AL=AX:累加寄存器,常用于运算;BH&BL=BX:基址寄存器,常用于地址索引;CH&CL=CX:计数寄存器,常用于计数;DH&DL=DX:数据寄存器,常用于数据传递。为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址:CS(Code Segment):代码段寄存器;DS(Data Segment):数据段寄存器;SS(Stack Segment):堆栈段寄存器;ES(Extra Segment):附加段寄存器。当一个程序要执行时,就要决定程序代码、数据和堆栈各要用到内存的哪些位置,通过设定段寄存器CS,DS,SS 来指向这些起始位置。通常是将DS固定,而根据需要修改CS。所以,程序可以在可寻址空间小于64K的情况下被写成任意大小。所以,程序和其数据组合起来的大小,限制在DS 所指的64K内,这就是COM文件不得大于64K的原因。8086以内存做为战场,用寄存器做为军事基地,以加速工作。除了前面所提的寄存器外,还有一些特殊功能的寄存器:IP(Intruction Pointer):指令指针寄存器,与CS配合使用,可跟踪程序的执行过程;SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置。BP(Base Pointer):基址指针寄存器,可用作SS 的一个相对基址位置;SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。还有一个标志寄存器FR(Flag Register),有九个有意义的标志,将在下文用到时详细说明。 内存是电脑运作中的关键部分,也是电脑在工作中储存信息的地方。内存组织有许多可存放

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

汇编语言基本关键字

汇编语言基本关键字 aaa对非压缩BCD码加法之和调整 aas 对非压缩BCD码减法之差调整 aam乘法调整aad被除数调整 add不带进位标志位的加法adc带进位标志位的加法 and逻辑与 assume指定段寄存器 bswap双字单操作数内部交换 bt位测试bts位测试并置一 btr位测试并清零btc位测试并取反 bsf/bsr正,反向位扫描 call调用 cbw字节转换为字cwd字转换为双字cwde字转换为扩展的双字cdq双字转换为四字 cmp比较cmpxchg比较并交换 cmps串比较 code定义简化代码段 const定义简化常数数据段 daa对压缩BCD码加法之和调整das对压缩BCD码减法之差调整 data定义简化数据段 db/dw/dd/dq/dt定义字节/字/双字/四字/十字变量 dec减一

df定义32位便宜地址的远地址指针 div无符号数除法 equ等价textequ文本等价 even取偶偏移地址 fardata,fardata定义简化独立数据段 group定义段组 idiv有符号整数除法 imul有符号整数乘法 in输入 inc加一 ins/outs输入/输出串元素 jcxz/jecxz若cx=0/ecx=0,跳转 jmpdopd无条件跳转到DOPD 处取出指令继续执行 label为$定义符号 Lahf 标志位低八位送AH lea 偏移地址送通用寄存器lda传送进入数据段的地址指针 les传送进入附加数据段的地址指针lfs传送进入FS段的地址指针lgs传送进入GS段的地址指针lss传送进入堆栈段的地址指针 local说明局部变量 lods读出串元素 Loop/loopd无条件循环cx/ecx为循环次数 loopnz/loopnzd非零或不等时循环,cx/ecx为循环次数

汇编语言基础知识

汇编语言基础知识 汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有 效地应用汇编语言对其编程,因此,本章对硬件系统结构的问题进行部分探讨,首先介绍了计算机的基本结构、Intel 公司微处理器的发展、计算机的语言以及汇编语言的特点,在此基础上重点介绍寄存器、内存组织等汇编语言所涉及到的基本知识。 1.1 微型计算机概述 微型计算机由中央处理器(Central Processing Unit ,CPU )、存储器、输入输出接口电路和总线构成。CPU 如同微型计算机的心脏,它的性能决定了整个微型计算机的各项关键指标。存储器包括随机存储器(Random Access Memory ,RAM )和只读存储器(Read Only Memory ,ROM )。输入输出接口电路用来连接外部设备和微型计算机。总线为CPU 和其他部件之间提供数据、地址和控制信息的传输通道。如图1.1所示为微型计算机的基本结构。 外部设备存储器输入输出接口电路中央处理器 CPU 地址总线 数据总线 控制总线 图1.1 微型计算机基本结构 特别要提到的是微型计算机的总线结构,它使系统中各功能部件之间的相互关系变 为各个部件面向总线的单一关系。一个部件只要符合总线结构标准, 就可以连接到采用这种总线结构的系统中,使系统功能得到扩展。 数据总线用来在CPU 与内存或其他部件之间进行数据传送。它是双向的,数据总线 的位宽决定了CPU 和外界的数据传送速度,8位数据总线一次可传送一个8位二进制数据(即一个字节),16位数据总线一次可传送两个字节。在微型计算机中,数据的含义是广义的,数据总线上传送的不一定是真正的数据,而可能是指令代码、状态量或控制量。 地址总线专门用来传送地址信息,它是单向的,地址总线的位数决定了 CPU 可以直接寻址的内存范围。如 CPU 的地址总线的宽度为N ,则CPU 最多可以寻找2N 个内存单 元。

STM32汇编语言 左右跑马灯

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;; STM32 LED左右跑马灯实验 ;;8个LED接在PE口(PE[0..7]) ;;LED先向右跑,跑完再向左跑,不停左右跑动 ;;2011-5-3 by 追梦;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BIT6 EQU 0X00000040 GPIOE EQU 0X40011800 ;GPIOE 地址 GPIOE_CRL EQU 0X40011800 ;低配置寄存器 GPIOE_CRH EQU 0X40011804 ;高配置寄存器 GPIOE_ODR EQU 0X4001180C ;输出,偏移地址0Ch GPIOE_BSRR EQU 0X40011810 ;低置位,高清除偏移地址10h GPIOE_BRR EQU 0X40011814 ;清除,偏移地址14h IOPEEN EQU BIT6 ;GPIOE使能位 RCC_APB2ENR EQU 0X40021018 STACK_TOP EQU 0X20002000 AREA RESET,CODE,READONLY DCD STACK_TOP ;MSP主堆栈指针 DCD START ;复位,PC初始值 ENTRY;指示开始执行 START LDR R1,=RCC_APB2ENR LDR R0,[R1] ;读 LDR R2,=IOPEEN ORR R0,R2 ;改 STR R0,[R1] ;写,使能GPIOE时钟 ;PE[0..7] 8个引脚均设置成推挽式输出 LDR R0,=0x33333333 LDR R1,=GPIOE_CRL STR R0,[R1] LDR R1,=GPIOE_ODR LDR R0,=0X7F ;初始时最高位点亮 MOV R2,#0 LOOP STR R0,[R1] PUSH {R0} MOV R0,#300 BL.W DELAY_NMS ;延时300ms POP {R0} ADD R2,#1

实验一 搭建开发环境

实验一搭建开发环境 一、实验目的 搭建汇编语言的开发环境,熟悉汇编程序开发的基本步骤,掌握基本的调试操作。 二、实验内容与要求 基于VISUAL STUDIO 平台,结合MASM32的汇编器,构建IA-32汇编语言的开发环境。 三、仪器、设备 PC机 四、实验步骤 1)VC6平台下的汇编语言开发环境搭建(使用MASM32的汇编器+VC6) 配置IDE环境: –在VC的tools/option/Directories页面中添加Irvine32.inc等所在的目录到include files中; 添加Irvine32.lib等所在的目录到library files. –将masm32中的ml.exe和ml.err拷贝到VC的Microsoft Visual Studio\VC98\Bin目录中 创建与配置project: –新建VC的win32 console类型空工程 –创建一个asm后缀的文件,并把汇编代码(教材第85页addsub3.asm)输入该文件中,然后将该asm文件添加到Source Files –选中asm文件,在project settings/Custom Build页面中命令行加: ml /c /coff /Fo$(TargetDir)\$(InputName).obj $(InputPath) 输出中加上: $(TargetDir)\$(InputName).obj –“Project setting”页面的”link”选项卡中“object/library module ”中加入irvine32.lib

2)汇编与链接不带输出的加减法程序(即教材第85页addsubTest.asm); 3)在程序最后加入调用DumpRegs过程的语句,以输出各寄存器的值。 4)以单步执行的方式调试该程序,查看每步结果,并解释每步结果,并写 成注释。(特别注意对标志位的影响) 5)(可选)尝试修改程序。 6)(可选)单步跟踪课件中4.3.3节的程序“ptr应用示例”,结合VC6的 内存查看功能(通过菜单view→debug windows→Memory调出内存查看 窗口)理解每步的执行结果。(注意课件中只是大部分代码,请补全头文 件以及程序退出宏。) 参考资料1: 1. VC6.0等visual studio集成开发环境对标志位的称呼与通常的不同,它们的对应关系如下:OV=overflow flag (OF) UP=direction flag (DF) EI=interrupt flag (IF) PL= Sign Flag (SF) ZR=zero flag (ZF) AC=auxiliary flag (AF) PE= parity flag (PF) CY=carry flag (CF) 2. 参考资料2: 上述实验使用的是Visual Studio 6.0。实验完成以后也可以偿试其它的开发环境的配置。以下是Visual Studio 2010环境的配置,供参考: VS2010平台下的汇编语言开发环境搭建 a.在VC++ 中新建一个空项目,取名为Test

SI02汇编语言集成开发环境的设计开发.

SI02汇编语言集成开发环境的设计开发 摘要:实现了一种全集成可变带宽中频宽带低通滤波器,讨论分析了跨导放大器-电容(OTA—C)连续时间型滤波器的结构、设计和具体实现,使用外部可编程电路对所设计滤波器带宽进行控制,并利用ADS软件进行电路设计和仿真验证。仿真结果表明,该滤波器带宽的可调范围为1~26 MHz,阻带抑制率大于35 dB,带内波纹小于0.5 dB,采用1.8 V电源,TSMC 0.18μm CMOS工艺库仿真,功耗小于21 mW,频响曲线接近理想状态。关键词:Butte 汇编语言作为可以直接对计算机硬件进行操作的语言,无论语言和架构如何发展,其最高的执行效率和最直接的硬件操作都是不可替代的,这也是为什么绝大多数语言中都可以内嵌汇编语言的原因。而在实际工作中,能使用汇编语言熟练编写程序的工作人员却相当匮乏,究其原因,除了汇编语言比较抽象,难于掌握以外,一个主要的原因就是汇编语言的上机环境普遍使用的是基于命令行的编译、链接程序,没有集成开发环境,造成程序在编制和调试上的困难。 基于上述原因及实际工作需要,我们开发一个专用于SI02汇编语言的集成开发环境,以改善程序开发环境、提高编程效率。 2.SI02汇编语言简介 SI02是自行研制的一种16位的微处理器芯片,该芯片有自己的指令系统和汇编语言—SI02。SI02汇编语言不支持数据结构和数据类型,但是在语法、格式和结构等方面和C语言几乎完全一致,从而使用户更加易于掌握。SI02编程语言不区分大小写,但建议用户用小写字母编写程序,以便提高编译效率;SI02编程语言支持十进制和十六进制两种数据表示方法,其中十六进制的数据应以“0x”作为数据的开头。在使用该汇编语言编程时,要求遵循图1所示的程序结构。 以上各结构之中,除主程序之外都不是必要部分,但如若用到,则必须按照图中所示顺序出现。另外,程序结构中的数据块是指在一些应用问题中,需使用一些固定数据,如变换表格等,这些数据在SI02编程语言中以数据块的形式出现,数据块部分一般出现在程序的末尾,格式如下: 标号:数据1;[注释] ………………

16、32位微机原理、汇编语言与接口技术教程课后复习题答案

《16/32位微机原理、汇编语言及接口技术教程》 部分习题参考解答 第1章微型计算机系统概述 〔习题1.2〕 什么是通用微处理器、单片机(微控制器)、DSP芯片、嵌入式系统? 〔解答〕 通用微处理器:适合较广的应用领域的微处理器,例如装在PC机、笔记本电脑、工作站、服务器上的微处理器。 单片机:是指通常用于控制领域的微处理器芯片,其部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。 DSP芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,部集成有高速乘法器,能够进行快速乘法和加法运算。 嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。 〔习题1.5〕 说明微型计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。 存储器:存储器是存放程序和数据的部件。 外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。

总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。 〔习题1.6〕 什么是总线?微机总线通常有哪3组信号?各组信号的作用是什么? 〔解答〕 总线:传递信息的共用通道,物理上是一组公用导线。 3组信号线:数据总线、地址总线和控制总线。 (1)地址总线:传输将要访问的主存单元或I/O端口的地址信息。 (2)数据总线:传输读写操作的数据信息。 (3)控制总线:协调系统中各部件的操作。 〔习题1.7〕 简答如下概念: (1)计算机字长 (2)取指-译码-执行周期 (3)ROM-BIOS (4)中断 (5)ISA总线 〔解答〕 (1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。 (2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。 (3)ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。 (4)中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。 (5)ISA总线是指IBM PC/AT机上使用的系统总线。 〔习题1.8〕 下列十六进制数表示无符号整数,请转换为十进制形式的真值: (1)FFH (2)0H (3)5EH (4)EFH 〔解答〕 (1) 255 (2) 0 (3) 94 (4) 239

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

相关主题
文本预览
相关文档 最新文档