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

合集下载

实验一 汇编语言程序设计的实验环境及上机步骤

实验一  汇编语言程序设计的实验环境及上机步骤

实验一熟悉汇编语言程序设计的实验环境及上机步骤一、实验目的:1、掌握文本编辑程序EDIT的基本使用方法。

2、熟练掌握汇编语言上机操作的基本步骤,学会汇编语言程序的编辑、汇编、连接、运行等操作方法。

二、上机实验指导(一)实验环境1.硬件环境微型计算机(Intel x86系列CPU)一台2. 软件环境⏹Windows98/2000/XP操作系统⏹文本编辑器(NOTEPAD(记事本))⏹汇编程序(MASM.EXE)⏹连接程序(LINK.EXE)(二)上机实验步骤上机步骤总结如下:1.把汇编程序拷贝到 C:\ASM\2.用记事本建立ASM源程序,保存为C:\ASM\HELLO.ASM3.汇编 C:\ASM>MASM HELLO.ASM<回车>4.链接C:\ASM>LINK HELLO.OBJ<回车>5.执行C:>ASM>HELLO〈回车〉下面详细介绍上机步骤:1.确定源程序的存放目录建议源程序存放的目录名为ASM(或MASM),并放在C盘或D盘的根目录下。

创建方法:找到C盘的根目录,在C盘的根目录窗口中点击右键,在弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。

请把MASM.EXE、LINK.EXE都拷贝到此目录中。

2.建立ASM源程序使用NOTEPAD(记事本)文本编辑器建立ASM源程序。

打开记事本,输入源程序后,保存为后缀为.ASM的文件,保存路径为C:\ASM\HELLO.ASM。

3.用MASM.EXE汇编源程序产生OBJ目标文件具体操作如下:在DOS命令提示符窗口中操作选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令:C:\Documents and Settings>cd..(回车,退回到上一级根目录)C:>CD ASM<回车>C:\ASM>MASM HELLO.ASM<回车>操作时的屏幕显示如图2所示。

32位汇编上机指导

32位汇编上机指导
〔习题4.17〕 习题 〕
6/8
循环程序设计实验 实验三 循环程序设计实验
二、实验内容
5.有一个首地址为 5.有一个首地址为string的字符串 ,分别 有一个首地址为 的字符串 统计string中空格、英文字母、数字和其它 中空格、 统计 中空格 英文字母、 字符的个数并输出。 字符的个数并输出。
实验一 熟悉汇编语言开发环境与工具
5/7
二、实验内容 6. 采用小端方式多字节数据在内存中是如何存 采用小端方式 小端方式多字节数据在内存中是如何存 放的?编写代码进行验证。要求记录程序运 放的?编写代码进行验证。 行时各个变量的首地址及字节排列的顺序。 行时各个变量的首地址及字节排列的顺序。 (习题3.15) 7. 编程实现习题 编程实现习题3.14 和3.28
3/8
1/7
实验一 熟悉汇编语言开发环境与工具
二、实验内容
2/7
1.在命令行方式下完成HelloWord.asm的编辑、调试与运行。 1.在命令行方式下完成HelloWord.asm的编辑、调试与运行。 在命令行方式下完成HelloWord.asm的编辑 要求:详细记录实验的每一步骤,查看列表文件。 要求:详细记录实验的每一步骤,查看列表文件。 2.在VC IDE下完成 下完成HelloWord.asm的编辑、调试与运行。 的编辑、 2.在 下完成 的编辑 调试与运行。 要求: 详细记录创建VC IDE下实验环境的每一步骤。 下实验环境的每一步骤。 要求:⑴ 详细记录创建 下实验环境的每一步骤 程序运行时字符变量msg的首地址? ⑵ 程序运行时字符变量msg的首地址? msg的首地址 程序运行时第一条可执行语句的首地址? ⑶ 程序运行时第一条可执行语句的首地址? 的值? 程序加载到内存后寄存器ESP、CS、DS的值 ⑷ 程序加载到内存后寄存器ESP、CS、DS的值?

汇编语言程序设计及上机指导第3章指令格式与寻址方式

汇编语言程序设计及上机指导第3章指令格式与寻址方式

高地址
(2)寄存器间接寻址
返回
操作数在存储器中,而操作数的有效地址EA却在指定的寄存器中,
即 EA=[寄存器]
1)16位寻址时,EA放在SI、DI、BP或BX中。
若以SI、DI、BX间接寻址,则默认操作数在DS段中。
MOV AX,[SI]
;默认DS为段基址
若以寄存器BP间接寻址,则默认操作数在堆栈段中。
BX,BP
SI,DI
不用该分量,默 认为1
0,8,16(位)
所有32位通用寄存器
除ESP外的所有32位 通用寄存器
1,2,4,8(倍)
0,8,32(位)
所有32位/64位通用寄存 器(16个)
所有32位/64位通用寄存 器(16个)
1,2,4,8(倍)
0,8,32,64(位)
如:ADD AX,20[BX][SI]
MOV ECX,[EBP+50] ;也可写成 MOV ECX,50[EBP]
MOV DX,[EAX+BASE] ;也可写成 MOV DX,BASE[EAX]
BASE是符号常量或变量
MOV ECX,[EBP+50]指令执行时,EBP寄存器内容为3000H,再加上 位移量50H之和为3050H,然后把由SS寄存器寻址的段中的3050H 单元的32位数据传送给ECX。
最常用的数据传送指令MOV的格式为: MOV DEST,SRC ;将源操作数SRC的值传送至目的操作数
【例】 MOV EAX,EBX ;将EBX的值送给EAX
2019/6/4
3.2.2 有效地址的概念
返回
在80X86系列CPU中,内存单元的地址由两部分组成:
段基地址和段内偏移地址(也称段内偏移量)

32位汇编语言程序设计课程设计

32位汇编语言程序设计课程设计

32位汇编语言程序设计课程设计设计背景汇编语言是一种基于机器指令的低级语言,它直接面向计算机硬件,可以更加高效地控制计算机的运行。

而32位汇编语言是一种针对32位操作系统的汇编语言,它能够更好地支持内存管理和多线程操作等功能。

因此,学习和掌握32位汇编语言的程序设计能力对于计算机科学专业的学生来说是非常重要的。

课程设计目标本次课程设计旨在通过对32位汇编语言的学习和实践,提高学生的汇编语言程序设计能力,并让学生了解和掌握汇编语言在计算机底层的实现原理,培养学生针对计算机系统底层编程的能力和兴趣。

课程设计内容实验一:Hello World本次实验旨在让学生掌握汇编语言程序的开发流程和常见的汇编语句以及输出调试。

具体实验要求如下:1.编写一个汇编程序,输出“Hello World!”到屏幕上。

2.使用软件调试器运行并测试程序,检查程序是否能正常输出。

实验二:计算器本次实验旨在让学生学会如何进行汇编语言程序设计中的算数运算,以及如何与用户进行交互。

具体实验要求如下:1.编写一个汇编程序,实现基本的加减乘除运算,并从屏幕上获取用户输入。

2.在屏幕上展示运算结果,并让用户随时可以选择是否继续进行计算。

3.使用软件调试器运行并测试程序,检查程序是否能正常运行。

实验三:数组排序本次实验旨在让学生学会如何在汇编程序中处理数组,并了解常用的排序算法。

具体实验要求如下:1.编写一个汇编程序,实现对一个固定长度的数字数组进行排序。

2.输出排序后的数组。

3.使用软件调试器运行并测试程序,检查程序是否能正常运行。

课程学习方法和建议1.理论学习要和实践相结合,通过实践才能更好地理解和掌握汇编语言程序设计中的各种语句、操作和流程。

2.软件调试器是汇编程序的重要工具,学生需要熟练掌握其使用方法和调试技巧,以方便快速地找到程序的问题并解决。

3.学生可以通过阅读相关的教科书和参考资料,或者通过搜索互联网资源来扩充自己的知识和提高自己的能力。

windows环境下32位汇编语言程序设计附书代码

windows环境下32位汇编语言程序设计附书代码

windows环境下32位汇编语言程序设计附书代码汇编语言是一种底层计算机语言,用于编写与计算机硬件直接交互的程序。

在Windows环境下,可以使用32位汇编语言进行程序设计。

本文将介绍一些常见的32位汇编语言程序,并附带相关的代码示例。

1.程序的基本结构:在32位汇编语言中,程序的基本结构由三个部分组成:数据段、代码段和堆栈段。

数据段用来声明和初始化程序中使用的全局变量和常量。

例如,下面的代码段声明了一个全局变量message,存储了一个字符串。

```data segmentmessage db 'Hello, World!',0data ends```代码段包含了程序的实际执行代码。

下面的代码段使用`mov`指令将message变量中的字符串存储到寄存器eax中,并使用`int 21h`来调用MS-DOS功能1来显示字符串。

```code segmentstart:mov eax, offset messagemov ah, 09hint 21hmov ah, 4chint 21hcode ends```堆栈段用来存储函数调用过程中的局部变量和返回地址。

2.入栈和出栈操作:在程序中,我们经常需要使用堆栈来保存和恢复寄存器的值,以及传递函数参数和保存函数返回值。

以下是一些常用的堆栈操作指令: ```push reg ;将reg中的值压入堆栈pop reg ;将堆栈顶部的值弹出到reg中```下面的示例演示了如何使用堆栈来保存和恢复寄存器的值:```code segmentstart:push eax ;将eax保存到堆栈mov eax, 10 ;设置eax的值为10pop ebx ;将堆栈顶部的值弹出到ebxadd eax, ebx ;将eax和ebx相加int 3 ;调试中断,用于程序的暂停mov ah, 4chint 21hcode ends```3.条件判断和跳转指令:汇编语言中的条件判断和跳转指令用于根据条件的成立与否来改变程序的执行流程。

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

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

汇编语言程序设计上机指导一、debug的使用Debug是为汇编语言设计的一种8086实模式的调试工具,它通过单步执行、设置断点等方式为汇编语言程序员提供了非常有效的程序调试手段。

Debug可以直接用来检查和修改内存单元内容、装入、运行程序、检查及修改寄存器的值,也就是说Debug可深入到计算机的内部,可使用户更紧密地与计算机中真正进行的工作相联系。

通过Debug能更好的理解代码。

(一)启动Debug方法1:在运行对话框中输入“cmd”启动DOS命令窗口后输入“Debug”回车;方法2:在程序/附件/命令提示符,启动DOS命令窗口后输入“Debug”回车。

Debug的提示符是符号“-”。

即出现提示符“-”就表示可以接受DEBUG命令了。

按Alt+Enter 键可在全屏与窗口之间切换。

(二)Debug命令格式DEBUG的每个命令都是一个字母,后跟一个或多个参数,参数与参数之间,用空格或逗号隔开,参数与命令符之间可用空格隔开,命令的结束符是回车键Enter。

下面对DEBUG命令作几点说明:●字母不分大小写。

●只使用16进制数,且不能带后缀H。

●以空格或逗号作为命令各项之间的分隔符。

分隔符只在两个数值之间是必须的。

●可以用Ctrl+C终止命令的执行。

●若输入的命令有语法错误,则提示“Error”,并用“^”指出错误位置。

(三)Debug常用命令1、R命令格式: R [<寄存器名>](1) R功能:显示当前所有寄存器内容,状态标志及将要执行的下一指令的地址、代码及汇编语句形式(反汇编CS:IP所指的指令),其中对状态标志FLAG以每位的形式显示。

(2) R <寄存器名>功能:显示指定寄存器内容,例如:-R AX <Enter> 等待用户键入新的值,按回车键结束。

当进入DEBUG时,寄存器和标志设成以下数值:DS,ES指向最低可用段处的程序区前缀。

BX和CX为被装入文件的长度值。

32位汇编程序设计二演示文稿.

32位汇编程序设计二演示文稿.

6.File→New建立新文件,输入程序,保 存在c:\masm32下。
7.编译、连接生成可执行文件
8.运行
32位汇编程序设计二
WIN32安装及上机步骤(软件二)
1.找到文件idesetup.exe,双击启动安装.
2. 选择“接受”,输入安装路径。
3.选择“安装”
4.选择“完成”或选择桌面图标启 动
5.选择“文件” →”新建”建立新 文件
6.选择建立汇编文件,“确定”,给 出文件名及保存位置。
7.选择“保存”,输入程序
8.选择“全部建造”,编译、连接
9. 选择“运行”
WIN32安装及上机步骤(软件三)
1.找到文件M32v82r.zip,双击,出现下面窗口后 双击INSTALL.EXE安装.
2.选择安装盘,Start安装。
3.按任意键继续
4.安装成功,任意键继续
பைடு நூலகம்
5.找c:\masm32下的QEDITOR.EXE启动。

汇编语言上机指导

汇编语言上机指导

汇编语言上机指导一、概述汇编语言是一种低级别的程序设计语言,它直接使用计算机的指令集架构来编写程序。

而在进行汇编语言的实际操作时,上机指导是必不可少的一环。

本文将为您提供一份汇编语言上机指导,以帮助您在实践中更好地掌握汇编语言的应用。

二、实验环境与所需工具在进行汇编语言的上机实验之前,您需要准备以下工具和环境:1. 计算机:一台能够运行汇编语言开发环境的计算机;2. 汇编语言开发环境:例如MASM、NASM等;3. 文本编辑器:用于编写汇编源代码的工具,例如Notepad++、Sublime Text等;4. 模拟器或调试器:用于模拟或调试汇编程序的工具,例如DOSBox、Emu8086等。

三、实验步骤1. 安装汇编语言开发环境:根据您选择的汇编语言开发环境,下载并安装相应的软件。

2. 创建汇编源代码文件:使用文本编辑器创建一个新的文本文件,并将其保存为.asm文件格式。

3. 编写汇编程序:根据实验要求或题目要求,使用汇编语言编写相应的程序代码。

在编写过程中,需要熟悉所选汇编语言的语法和指令集。

4. 保存源代码文件:在编写完成后,保存源代码文件,并注意文件的命名规范和格式要求。

5. 编译源代码:打开所选汇编语言开发环境,并将源代码文件导入到该环境中。

使用编译器将源代码文件转换为可执行文件。

6. 运行汇编程序:在模拟器或调试器中加载生成的可执行文件,并运行程序。

通过观察程序的运行结果,验证程序代码的正确性和准确性。

7. 调试程序:如果程序在执行过程中出现错误或异常,可以使用调试器来逐步调试程序,找出错误的原因,并进行修正。

8. 优化程序:经过测试和调试后,可以根据实验需求对程序进行优化或改进,提高程序的性能和效率。

9. 文档整理:在上机实验结束后,对实验过程、实验结果和实验心得进行文档整理。

将实验相关的代码、截图和注释整理成文档,并附上你的实验心得和体会。

四、注意事项1. 在编写汇编程序时,需要遵循所使用汇编语言的语法和规范,注意标识符的命名规则和字符集的使用限制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《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 ;汇编结束5、建立适合在定制开发环境下使用的32位应用程序框架.model small, stdcall;定义程序的存储模式(一般采用small).386 ;可选,如果有该语句,可以使用386指令集include \masm32\include\io16.inc ;可选,如果在程序中使用作者自定义的宏命令需要这一句.stack ;定义堆栈段.data ;定义数据段……;数据定义.code ;定义代码段.startup: ;程序起始点……;程序代码.exit 0 ;程序结束点,返回DOS……;子程序代码end ;汇编结束4、在自己建立的开发环境下汇编,连接,运行教材中的例3-1和例3-2。

实验2 指令格式与寻址方式实验目的:熟悉汇编语言指令格式,掌握常用数据定义伪指令,理解各种寻址方式的应用。

掌握调试工具Windbg.exe的使用。

实验要求:(1)通过调试程序理解常用数据定义伪指令的作用。

(2)通过调试程序理解各种寻址方式的应用。

(3)熟练掌握调试工具Windbg的使用方法。

实验内容:(1)上机汇编连接例3-4--例3-9,通过列表文件和windbg察看数据在内存中的分配情况。

(2)上机汇编连接例4-1--例4-9,通过windbg察看机器码,并单步执行,观察每一条指令的执行结果。

实验步骤:1、上机汇编连接例3-4(1)查看列表文件。

根据列表文件画出数据段中数据的分配情况,同时标出const1和const2的内存单元。

(2)用Windbg调试例3-4。

用memory窗口察看const1开始的29个字节空间的内容,并记录下来。

(3)对比源程序中的数据定义,列表文件的数据分配和在Windbg中记录的数据,理解数据定义伪指令的作用。

2、按照上题的要求,上机汇编连接例3-5—例3-9。

3、上机汇编连接例4-1(1)用Windbg调试例4-1,用Disassembly窗口察看机器码。

指出指令的中操作数。

(2)在Windbg下单步执行例4-1,观察eax寄存器的内容变化情况。

4、按照上题的要求,上机汇编连接例4-2—例4-7。

5、上机汇编连接例4-8(1)用Windbg调试例4-8,用Disassembly窗口察看机器码(2)在Windbg下单步执行例4-8,观察EIP寄存器内容的变化情况。

(3)分析指令jmp start的机器码的含义。

观察这条指令执行前后EIP寄存器内容的变化。

6、上机汇编连接例4-9(1)用Windbg调试例4-9,用Disassembly窗口察看机器码(2)在Windbg下单步执行例4-9,观察EIP寄存器内容的变化情况。

(3)察看内存address的内容,观察它与地址quit的关系。

(4)观察指令jmp address执行前后EIP寄存器内容的变化。

实验3 数据操作编程实验目的:熟练掌握基本的数据传送指令,算术运算指令和位操作指令在编程中的应用。

实验要求:按照要求编写程序,调试运行。

实验内容:1、编写32位控制台应用程序提示用户输入32位有符号整数x, y, z,计算result=x-2y+4z的值,并显示计算结果。

调用WriteString显示字符串“Input 32-bit signed integer x:”;调用ReadSDecDword输入数据保存到x;调用WriteString显示字符串“Input 32-bit signed integer y:”;调用ReadSDecDword输入数据保存到yy=y+y;result=x-y;调用WriteString显示字符串“Input 32-bit signed integer z:”;调用ReadSDecDword输入数据保存到z;z=4*zresult=result+z;调用WriteString显示字符串“x-2y+4z=:”;调用WriteSDecDword显示result.2、写32位控制台应用程序:提示用户输入长方形的长和宽,计算它的周长和面积,并分别显示结果。

调用WriteString显示字符串“Input length of rectangle x:”;调用ReadUDecDword输入数据保存到x;调用WriteString显示字符串“Input width of rectangle y:”;调用ReadUDecDword输入数据保存到y;周长=x+y;面积=x*y;调用WriteString显示字符串“detmer of rectangle is:”;调用WriteUDecDword显示周长;调用WriteString显示字符串“area of rectangle is:”;调用WriteUDecDword显示面积;3、编写32位控制台应用程序:分解AX寄存器的内容:取高7位存入value1,取中间5位存入value2,取最后4位存入value3。

提示:使用移位和逻辑运算指令实现。

4、编写32位控制台应用程序:将value1的低7位,value2的低5位,value3的低4位合并到AX寄存器中。

提示:使用双精度移位指令。

5、编写32位控制台应用程序:利用作者提供的输入输出宏从键盘接收一个字节的十进制数,利用教材中例题5-47的代码,将这个十进制数转换成十六进制字符存放到HexStr 中,用输出字符串宏WriteString显示转换的结果。

实验4 分支和循环程序设计实验目的:熟练掌握分支和循环结构的设计方法,熟悉跳转和循环指令的使用方法。

实验要求:按照要求编写程序,调试运行。

实验内容:1、编写程序实现下面的算法:ifthenlowerCount+1;elseif(ch≥’A’) and (ch≤’Z’)thenupperCount+1elseotherCount+1;endifendif其中ch调用ReadChar输入,lowerCount, upperCount和otherCount的值用WriteUDecByte显示。

2、编写程序从键盘输入一系列有符号数,找出其中的最大数和最小数,显示运行结果。

建议算法如下:显示“First number?”;调用ReadSDecDword输入双字有符号数;minimum:=number;maximum:=number;while(显示“Another number?(Y or N)”)loopif (输入Y) then调用ReadSDecDword输入双字有符号数;if(number<minimum)thenminimum:=number;endifif(number>maximum)thenmaximum:=number;endifendwhile3-6题中任选一题:3、编写程序将EAX的内容转换为二进制字符串4、编写程序将EAX的内容转换为十六进制字符串5、编写程序将EAX的内容转换为无符号十进制字符串6、编写程序将EAX的内容转换为有符号十进制字符串,负数字符串以“-“引导。

7-10题中任选一题:7、编写程序将二进制字符串表示的数据存入EAX寄存器8、编写程序将十六进制字符串表示的数据存入EAX寄存器9、编写程序将十进制字符串表示的无符号数据存入EAX寄存器10、编写程序将十进制字符串表示的有符号数据存入EAX寄存器实验5 子程序设计实验目的:理解堆栈的工作原理,熟练掌握子程序的设计方法,熟悉子程序相关指令的使用方法。

相关文档
最新文档