《汇编语言程序设计》(双语)上机指导
唔。省得每次忘带U盘。。。
《汇编语言程序设计》(双语)上机指导... 1
实验1 建立windows环境下32位汇编语言开发环境... 2
实验2 Instruction Format and Addressing Mode. 3
实验3 Data Operation Programming. 4
实验4 Branching and Loop Programming. 5
实验5 Procedure Programming. 7
实验6 Input/Output Programming. 9
实验7 Macro Design. 10
实验8 Mixed Programming. 11
调试程序Windbg. 18
宏汇编命令ML和连接命令LINK常用参数速查... 21
输入输出宏命令... 22
实验1 建立windows环境下32位汇编语言开发环境
实验目的:建立windows环境下32位汇编语言开发环境,并熟悉它的使用方法。
实验要求: (1)建立windows环境下32位汇编语言开发环境;
实验内容: (1)定制masm32集成开发环境,使之符合教学要求。
(2)分别建立汇编,连接,和汇编&连接批处理命令,能够生成包含调试信息的目标文件,列表文件,以及能够进行调试的可执行WIN32控制台程序。
(4)在自己建立的开发环境下汇编,连接,运行教材中的fig3-1。
修改文件msm32\bin\buildc.bat中的内容,使得执行Project\Console Assemble & Link后能够汇编连接可调试的32位控制台应用程序,同时生成列表文件。
\masm32\bin\ml /c /coff /Fl /Zi “%1.asm”
\masm32\bin\link /debug “%1.obj”
2、在定制后的masm32开发环境中运行教材中的例题fig3-1.
3、利用教材提供的80x86/software在命令行方式下运行例题fig3-1.
.386 ;必须是第一条非注释语句,说明这是一个32位应用程序
.model flat, stdcall ;定义程序的存储模式(32位应用程序中必须采用flat)
include \masm32\include\io32.inc ;可选,如果在程序中使用作者自定义的宏命令需要这一句
5、在自己建立的开发环境下实现教材中P59. Programming Exercises 3.3中第3题。
(1)写出你自己的32位应用程序框架,并说明如何汇编,连接生成可执行文件。
实验2 Instruction Format and Addressing Mode
实验目的:熟悉汇编语言指令格式,掌握常用数据定义伪指令,理解各种寻址方式的应用。掌握调试工具Windbg.exe的使用。
实验要求: (1)通过调试程序理解常用数据定义伪指令的作用。
实验内容:(1)上机汇编连接fig3-1,生成并观察列表文件;用调试工具Windbg单步执行程序,观察寄存器和内存的变化。
(2)编写程序完成教材中P72. Exercises3.5。用Windbg观察内存的分配情况。
(1) 查看列表文件。根据列表文件画出数据段中数据的分配情况。
(2) 用Windbg调试fig3-1。用memory窗口察看prompt1开始的内存空间,并记录下来。
(3) 对比源程序中的数据定义,列表文件的数据分配和在Windbg中记录的数据,理解数据定义伪指令的作用。
2、 用Windbg调试fig3-1,用Disassembly窗口察看指令的机器码。
3、 用Windbg单步执行fig3-1,观察每一条指令的执行结果。
4、 上机编写完整的源程序加入教材中P72. Exercises3.5中的数据定义,汇编连接后,用Windbg观察内存分配的情况。
1、 要使程序能在windbg中调试,执行汇编和连接命令时,需要使用什么参数?
2、 Fig3-1.exe中执行指令input string, 40时,用户如果输入”123”, 该指令的执行结果是什么?atod string指令执行后的结果是什么?
3、 写出P72. Exercises3.5中1,3,5,7,10,12,15,17,23,32定义的内存空间的值。
实验3 Data Operation Programming
实验目的:熟练掌握基本的数据传送指令,算术运算指令和位操作指令在编程中的应用。
3、 完成教材P129. Programming Exercises 4.4中第4题和第5题。
4、 编写代码实现下面的功能:无符号两位十进制字符串转换为对应的二进制数存入AL
5、 编写代码实现下面的功能:将AL中的数值(0-99)转换为无符号十进制数字符串。
6、 编写代码实现下面的功能:将两位的十六进制字符串(0-9)转换为对应的二进制数存入AL
7、 编写代码实现下面的功能:将AL中的数值转换为对应的两位十六进制字符串。
实验要求:提交试验内容1-3源程序,完成实验报告。实验报告中要求写出实现实验内容4,5,6,7的关键代码。
实验4 Branching and Loop Programming
实验目的:熟练掌握分支和循环结构的设计方法,熟悉跳转和循环指令的使用方法。
其中ch调用ReadChar输入,lowerCount, upperCount和otherCount的值用WriteUDecByte显示。
2、 编写程序从键盘输入一系列有符号数,找出其中的最大数和最小数,显示运行结果。建议算法如下:
while(显示 “Another number?(Y or N)”)loop
6、编写程序将EAX的内容转换为有符号十进制字符串,负数字符串以“-“引导。
10、编写程序将十进制字符串表示的有符号数据存入EAX寄存器
实验要求:提交实验内容1,2的源程序,完成实验报告,实验报告中给出3-6题中任一题的关键代码,7-10题中任意一题的关键代码。
实验5 Procedure Programming
实验目的:理解堆栈的工作原理,熟练掌握子程序的设计方法,熟悉子程序相关指令的使用方法。
1、 上机调试下面的代码,单步执行,观察ESP寄存器和EIP寄存器内容的变化情况。观察esp指示的内存单元的内容。画出堆栈的变化过程,标注ESP寄存器的变化情况。
.386 ;必须是第一条非注释语句,说明这是一个32位应用程序
.model flat, stdcall ;定义程序的存储模式(32位应用程序中必须采用flat)
(4)编写子程序将双字补码转换为有符号十进制字符串,负数字符串以“-“引导。
(7)编写子程序将十进制字符串表示的无符号数据存入EAX寄存器
(8)编写子程序将十进制字符串表示的有符号数据存入EAX寄存器
3、利用多模块设计方法实现上面程序的功能,建立子程序库,并编写主程序调用子程序库中的函数。
提示: (1) 编写子程序模块完成上题中的子程序功能,汇编生成目标文件。
(2) 将子程序目标文件组成库文件:
\masm32\bin\lib 目标文件名 /out:库文件名
或者\masm32\bin\link -lib 目标文件名 /out:库文件名
实验要求:提交实验内容3的源程序,并在实验报告中说明子程序库的开发过程,以及可执行程序的执行结果;实验报告中给出实验内容3中子程序源代码(可以在(1)-(4)中任选一题,(5)-(8)中任选一题。)
实验6 Input/Output Programming
实验目的:熟练掌握实现实模式和保护模式下键盘输入和屏幕显示功能的程序设计方法。
1、编写实模式应用程序:利用IN/OUT指令读写CMOS时钟,显示当前的日期和时间。
2、编写实模式应用程序:利用IN/OUT指令编写简单的音乐程序。运行时,当用户按下按键1-7,分别演奏音调dou,re,mi,fa,so,la,si
3、编写完整的16位应用程序:设计子程序完成下面的功能, 在主程序中先调用输入字符串的子程序,将字符串中所有英文字符变为大写,其他字符不变。最后调用输出字符串的子程序,显示原始字符串和转换后的字符串。
(3) 编写实模式子程序利用系统调用完成键盘输入一个字符串。
(4) 编写实模式子程序利用系统调用完成屏幕显示一个字符串。
(1) 编写保护模式子程序利用系统调用完成键盘输入一个字符。
(2) 编写保护模式子程序利用系统调用完成屏幕显示一个字符。
(3) 编写保护模式子程序利用系统调用完成键盘输入一个字符串。
(4) 编写保护模式子程序利用系统调用完成屏幕显示一个字符串。
实验要求:提交第2题源程序;在实验报告中给出第3(3)和(4)题和第4(3)和(4)题的关键代码。
实验7 Macro Design
1、编写完整的32位应用程序:先定义下面的宏,然后在程序中调用宏,生成列表文件。根据列表文件写出宏扩展后的结果。
(1) 定义Move32宏接收两个内存操作数,把源操作数送到目的操作数。
(2) 定义Mult32宏接收两个内存操作数,将他们相乘产生一个32位的乘积。
2、 编写一个ReadUdec的宏,从标准输入上读取一个8位,16位或32位的无符号整数,并在给定的参数中返回。使用条件操作符允许宏能够处理不同大小的输入参数。写一个程序调用宏并传递不同尺寸的操作数。
实验要求:提交1,2,3源程序,在实验报告中写出它们的宏定义方法和宏调用方法。
实验8 Mixed Programming
提示:在C程序中输入两个整数,然后调用汇编子程序对这两个数求积,在主程序中打印计算结果。编程并上机调试通过。
2. 编写程序,在汇编程序中初始化varA=12、varB=6,调用C语言的子程序求积并打印计算结果。编程并上机调试通过。
3. 将排序子程序改写成C语言的嵌入式汇编函数;然后编写一个C语言主程序,提供待排序的数据和显示排序后的结果。
4. 将排序子程序改写成可供C语言调用的模块;然后编写一个C语言主程序,提供待排序的数据和显示排序后的结果。
5. 编写识别CPU的汇编语言过程,供Visual C++6.0调用的形式,然后编写一个Visual C++主程序,并上机调试通过。
实验要求:完成实验报告,在实验报告中写出1,3,4的关键代码,并写出运行结果
附录:
首先下载一个MASM615开发工具包。在许多汇编网站和汇编教材的配套光盘中都提供了该工具包。根据提示,进行安装。然后就可以用它来开发汇编程序。
Ml [/option] 源文件 [/link option]
例如,要汇编test.asm源文件,生成coff格式的目标文件,列表文件和调试信息,可以使用命令行:
为了避免每次汇编源文件的时候都要输入许多参数,可以建立一个批处理文件。例如批处理文件mlbat.bat
if exist "%1.obj" del "%1.obj"
if exist "%1.exe" del "%1.exe"
path\ml /c /coff /Fl /Zi "%1.asm"
有了这个批处理文件以后,如果汇编test.asm,就可以用命令:
在建立自己批处理文件的时候,可以根据需要设定参数,指定路径。
目标文件仍然不能执行,还需要运行连接程序,将目标文件和库文件连接起来,才能生成最后可以执行的.exe文件。
LINK /subsystem: console /DEBUG filename
LINK /subsystem: windows /DEBUG filename
例如,将前面生成的目标文件test.obj连接生成控制台程序test.exe所用的命令行是:
LINK /subsystem:console /DEBUG test.obj
为了避免每次连接的时候都要输入许多参数,同样也可以建立一个批处理文件。例如批处理文件linkbat.bat
if not exist “%1.obj” goto errlink
path\Link /SUBSYSTEM:CONSOLE /OPT:NOREF /DEBUG "%1.obj"
在建立自己批处理文件的时候,可以根据需要设定参数,指定路径。
如果建立一个类似VC里build的命令,就可以执行一个命令对原程序进行汇编和连接。下面的批处理文件buildc.bat执行的就是先汇编再连接的功能:
if exist "%1.obj" del "%1.obj"
if exist "%1.exe" del "%1.exe"
path\Link /SUBSYSTEM:CONSOLE /OPT:NOREF "%1.obj"
就会对test.asm进行汇编,并生成windows控制台程序test.exe.
下载安装MASM32之后,将Qeditor图标拖到桌面上以方便以后的使用。
单击Qeditor图标启动MASM32,在主窗口中输入源代码,选择File/Save保存文件。然后再选择Project菜单下的命令进行汇编和连接。该菜单中主要使用的命令有:
Assemble ASM file:汇编生成32位应用程序,对应的批处理文件是masm32\bin\assembl.bat.
Link OBJ file : masm32\bin\lnk.bat
Link OBJ file : masm32\bin\lnkC.bat
这些批处理文件的内容都与前面所讲的汇编和连接批处理的内容类似,读者可以根据需要修改这些命令。
MASM32将编辑,汇编和连接很好的结合在一起,对于windows图形界面的变成也非常方便,它提供了一个资源编辑器。窗口应用程序可以在该环境中直接运行,但是控制台程序则需要启动命令行方式窗口运行。
VC是微软开发的C++ 6.0的集成开发环境,在安装了MASM615之后,也可以用作汇编语言程序开发的集成环境。有两种方法可以用VC来开发汇编程序。
单击OK,在接下来的对话框中选择An Empty project,单击Finish。
在左面的列表窗口的下面选择FileView标签,列出当前project中的文件,现在没有文件在projects中。
单击新建按钮,在右侧的编辑窗口中输入汇编源程序,存盘到test目录下,命名为test.asm。
编译和连接信息显示在Output视图中。接下来可以直接在VC环境中运行和调试该程序。
".\testmak.exe" : $(LINK32_OBJS)
$(LINK32_FLAGS) $(LINK32_OBJS)
下面建立一个汇编源文件testmak.asm加入工程文件的源文件夹中:
printf PROTO C: ptr sbyte, :vararg
szMsg byte "hello world!",0ah,0
如果一切正常,下面就可以选build命令F7,生成你的可执行文件了。如果没有错误单击执行按钮,可以看见执行的结果。
在VC中开发汇编程序建立工程时的设置工作稍显繁琐,但是一旦设置好后,开发的四个步骤一气呵成,在进行多模块设计的时候,这是一个很好的选择。
调试程序Windbg
WinDbg是微软开发的免费源码级图形界面调试工具,可以调试Win32应用程序,服务器应用程序调试和Kernel模式驱动调试。本文介绍Windbg在调试Win32应用程序时的常用命令。
windbg [-a] [-g] [-h] [-i] [-k [platform port speed]] [-l[text]]
[-m] [-p id [-e event]] [-s[pipe]] [-v] [-w name] [-y path]
[-z crashfile] [filename[.ext] [arguments]]
在WindowsXP/2000操作系统下,可以直接双击Windbg图标启动。
被调试的应用程序在汇编和连接时应加入调试信息。汇编时使用参数/Zi;连接程序使用参数/debug。
在Address Expression编辑框中填入要察看的地址信息。地址信息有两种常用的输入方式:
例如:在Address Expression 中填入0x0040103f,点击按钮OK后出现指定地址开始的内存单元的内容:
其中0x0040103F至0x004010BF是Windbg显示以十六进制表示的单元地址,中间用十六进制表示每个字节,右边用ASClI字符表示每个字节。
例如:在Address Expression 中填入&b_var1,点击按钮OK后出现b_var1开始的内存单元的内容:
其中EFL是标志寄存器内容,对应每一位判断标志位的值。EA是内存寻址方式指示的有效地址。
运行程序按钮是。从应用程序入口地址开始执行程序,遇到断点停止。
单步执行命令,当遇到子程序调用指令时,进入子程序内部逐条执行指令。
单步执行命令,当遇到子程序调用指令时,不进入子程序内部逐条执行指令,而把调用子程序当作一条指令执行。
窗口中的内容从左至右依次是:地址,机器码,指令。随着程序的执行,反汇编窗口也随之变化。
宏汇编命令ML和连接命令LINK常用参数速查
ML [/参数选项] 文件列表 [/LINK 连接参数选项]
ML允许汇编和连接多个程序形成一个可执行文件;它的常用参数选项如下,注意参数是大小写敏感的):
/Fr 文件名——创建一个可在PWB下浏览的.SBR源浏览文件
/Fo 文件名——根据指定的文件名生成模块文件,而不是采用缺省名
/Fe 文件名——根据指定的文件名生成可执行文件,而不是采用缺省名
/I 路径名——设置需要包含进(INCLUDE)源程序的文件的所在路径
/Zi——生成模块文件时,加入调试程序CodeView需要的信息
LINK连接一个或多个程序形成一个可执行文件;它的常用参数选项如下,
/DEBUGTYPE:{CV|COFF}——指定调试信息类型
/DRIVER[:{UPONLY|WDM}]——创建驱动程序
/EXPORT:symbol——定义可以被其他模块使用的符号
/INCREMENTAL:{YES|NO}——是否为增式连接器
/SUBSYSTEM:{NATIVE|WINDOWS|CONSOLE|WINDOWSCE|POSIX}——指定操作系统类型
输入输出宏命令
宏命令 |
格式 |
功能 |
ReadBinByte |
ReadBinByte b_var |
读入二进制字节数据存放到字节类型参数b_var中 |
ReadBinWord |
ReadBinWord w_var |
读入二进制字数据存放到字类型参数w_var中 |
ReadBinDword |
ReadBinDword d_var |
读入二进制双字数据存放到双字类型参数d_var中 |
ReadHexByte |
ReadHexByte d_var |
读入十六进制双字数据存放到双字类型参数d_var中 |
ReadHexWord |
ReadHexWord w_var |
读入十六进制字数据存放到字类型参数w_var中 |
ReadHexDword |
ReadHexDword b_var |
读入十六进制字节数据存放到字节类型参数b_var中 |
ReadUDecByte |
ReadUDecByte b_var |
读入无符号十进制字节数据存放到字节类型参数b_var |
ReadUDecWord |
ReadUDecWord w_var |
读入无符号十进制字数据存放到字类型参数w_var |
ReadUDecDword |
ReadUDecDword d_var |
读入无符号十进制双字数据存放到双字类型参数d_var |
ReadSDecByte |
ReadSDecByte b_var |
读入有符号十进制字节数据存放到字节类型参数b_var |
ReadSDecWord |
ReadSDecWord w_var |
读入有符号十进制字数据存放到字类型参数w_var |
ReadSDecDword |
ReadSDecDword d_var |
读入有符号十进制双字数据存放到双字类型参数d_var |
ReadChar |
ReadChar char |
读入字符,其ASCII码存放到字节类型参数char |
ReadString |
ReadString buffer |
读入字符串,字符串输入以回车结束,输入的字符串存放到buffer指向的内存空间。 |
WriteString |
WriteString string |
显示以0结尾的字符串string.字符串的长度不超过128。 |
WriteBinByte |
WriteBinByte b_var |
显示二进制字节数据b_var |
WriteBinWord |
WriteBinWord w_var |
显示二进制字数据w_var |
WriteBinDword |
WriteBinDword d_var |
显示二进制双字数据d_var |
WriteHexByte |
WriteHexByte b_var |
显示十六进制字节数据b_var |
WriteHexWord |
WriteHexWord w_var |
显示十六进制字数据w_var |
WriteHexDword |
WriteHexDword d_var |
显示十六进制双字数据d_var |
WriteUDecByte |
WriteUDecByte b_var |
显示无符号十进制字节数据b_var |
WriteUDecWord |
WriteUDecWord w_var |
显示无符号十进制字数据w_var |
WriteUDecDword |
WriteUDecDword d_var |
显示无符号十进制双字数据d_var |
WriteSDecByte |
WriteSDecByte b_var |
显示有符号十进制字节数据b_var |
WriteSDecWord |
WriteSDecWord w_var |
显示有符号十进制字数据w_var |
WriteSDecDword |
WriteSDecDword d_var |
显示有符号十进制双字数据d_var |
WriteChar |
WriteChar char |
显示字符char |
《汇编语言程序设计》(双语)上机指导相关推荐
- 计算机组成原理汇编语言设计实验,《计算机组成原理汇编语言程序设计》实验指导书.doc...
<计算机组成原理汇编语言程序设计>实验指导书,汇编语言实验指导书,微机原理与汇编语言,微机原理及汇编语言,汇编转c语言原理,汇编语言原理,汇编语言和编译原理,汇编语言编译原理,计算机原理与 ...
- c语言同步控制程序设计,C语言程序设计之上机指导及同步训练
内容简介: C语言程序设计之上机指导及同步训练 目 录 第一部分 实验篇1 第一章 Turbo C 的使用1 1.1 Turbo C的工作窗口1 1.2 编辑一个新文件2 1.3 编辑一个已存在的文件 ...
- C语言程序设计及上机指导,《C语言程序设计上机指导》全套教案
<C语言程序设计上机指导>全套教案 项目一 C 语言概述[实验内容.步骤]1.检查所用计算机是否已经安装 Visual C++2012.2.为了让实验程序保存在自己的目录中,在磁盘上新建一 ...
- c语言上机指导实验7,[C语言程序设计上机指导与同步训练(刘迎春张艳霞)]实验7.pdf...
您所在位置:网站首页 > 海量文档  > 计算机 > C/C++资料 [C语言程序设计上机指导与同步训练(刘迎春张艳霞 ...
- Java语言程序设计实验指导_《java语言程序设计》上机实验指导手册(4).doc
<java语言程序设计>上机实验指导手册(4).doc 1JAVA语言程序设计上机实验指导手册(4)2实验四JAVA面向对象编程1[目的]①通过编程和上机实验理解JAVA语言是如何体现面向 ...
- 为什么c语言程序设计书不介绍文件删除,C语言程序设计上机指导书2010.doc
C语言程序设计上机指导 目录 1常用DOS命令2 1.1帮助命令help2 1.2显示文件和目录命令dir2 1.3显示或改变当前目录命令cd2 1.4创建目录命令md3 1.5删除目录命令rd3 1 ...
- 合肥工业大学2021汇编语言程序设计上机实验一
实验一 基本汇编程序设计 实验目的 1.熟悉在PC机上建立.汇编.连接.调试和运行8086/8088汇编语言程序的过程: 2.掌握基本汇编语言程序设计方法. 3.熟悉DOSBOX下运行dos程序方法 ...
- C语言教辅书答案,《C语言程序设计上机指导与习题解答》任正云 主编;李素若_孔网...
本书是中国水利水电出版社出版的<C语言程序设计>的配套教材.书中内容分三个部分,第一部分是"C语言上机指南",这部分介绍了Turbo C 2.0.Turbo C++ 3 ...
- java程序设计题解与上机指导_Java程序设计习题解析与上机指导
第一部分 习题与解析 第1章 Java语言概述 1.1 知识点回顾 1.2 典型题分析 结束语 结合练习一 一.选择题 二.填空题 三.判断题 四.程序设计题 第2章 Java语言基础 2.1 知识点 ...
最新文章
- python staticmethodclassmethod
- 常用机器学习算法原理及推导
- 原型图Mockplus:怎样使用图片裁切功能
- 陕西国防 c语言第三章实训三答案,C语言程序设计(上)
- 计算机类对口升学都可以升啥专业,计算机专业对口升学专业试题.doc
- 如何把数据库从sql变成mysql_如何将数据库从SQL Server迁移到MySQL
- 【ambari】Ambari 环境安装
- 联想g510拆键盘的简单方法_你也可以轻松学会的最简单、最实用、最有效的方法——联想记忆法...
- 21天Jmeter打卡Day12 逻辑控制器之循环控制器
- 中的工程图怎样才能做成正规图纸_新一代一拖二口罩机图纸详细设计三维模型带工程图...
- 《从零开始学Swift》学习笔记(Day 32)——计算属性
- Hibernate的双向N-N关联(六)
- 从0开始学习 GitHub 系列之「02.加入 GitHub」
- 一个bat文件运行多个java jar包
- Unity3D Odin Inspector 简单介绍与入门
- xlsxwriter php,xlsxwriter(PHP工作表插件)
- codevs 2980 买帽子 题解报告
- Chinese-LLaMA-Alpaca:优秀的开源中文语言模型预训练工具
- LeetCode 2312. 卖木头块
- shell入门基础知识
热门文章
- Unity3d 动态字体
- PM应该了解的九大项目管理问题
- 论文阅读笔记《Few-Shot Learning with Global Class Representations》
- RPG Maker mv框架代码解析之窗口文字显示
- 代写计算机ei,骗子 张爱荣 以代写代发EI期刊骗钱 钱收到后QQ不上,手机关机
- docker容器网络配置之容器间的链接(默认桥接网络下的links)
- 学生搭配问题数据结构报告c语言,数据结构课程设计_学生搭配问题.doc
- 【懒懒的Python学习笔记四】
- iOS城市选择器-包含搜索功能
- 7z和winrar命令行压缩方法