东北大学汇编实验
汇编语言实验4详细讲解
![汇编语言实验4详细讲解](https://img.taocdn.com/s3/m/86b5e76459fb770bf78a6529647d27284a73376a.png)
汇编语言实验4详细讲解一、引言汇编语言是一种底层的计算机语言,它直接操作计算机的硬件。
在汇编语言实验4中,我们将深入了解汇编语言的一些重要概念和技巧。
本文将详细讲解汇编语言实验4的内容,帮助读者更好地理解和应用汇编语言。
二、实验目的汇编语言实验4的主要目的是学习和掌握在汇编语言中使用条件和循环结构的方法。
通过实验,我们将能够编写能够根据条件执行不同操作的程序,并实现循环执行一定次数的功能。
三、实验内容1. 条件结构条件结构是根据条件的真假来执行不同的操作。
在汇编语言中,我们可以使用条件跳转指令来实现条件结构。
条件跳转指令根据条件寄存器的值来决定是否跳转到指定的地址执行。
常用的条件跳转指令有JZ、JNZ、JC、JNC等。
2. 循环结构循环结构是重复执行一段代码的结构。
在汇编语言中,我们可以使用循环指令来实现循环结构。
循环指令根据计数器的值来判断是否继续执行循环体,并在每次循环结束后更新计数器的值。
常用的循环指令有LOOP、LOOPE、LOOPZ、LOOPNE、LOOPNZ等。
四、实验步骤1. 定义和初始化计数器在循环结构中,我们首先需要定义一个计数器,并对其进行初始化。
计数器可以使用DX寄存器或AX寄存器来保存。
2. 执行循环体在循环结构中,我们需要执行的代码放在循环体中。
循环体的代码将会被重复执行,直到计数器的值为0或满足其他条件。
3. 更新计数器的值在每次循环结束后,我们需要更新计数器的值。
可以使用INC或DEC指令对计数器进行加1或减1操作。
4. 判断是否继续执行循环在每次循环结束后,我们需要判断是否继续执行循环。
可以使用循环指令来实现此功能。
根据计数器的值或其他条件来判断是否继续执行循环。
五、实验示例下面是一个简单的实验示例,演示了如何使用条件和循环结构来实现一个简单的程序:```MOV CX, 10 ; 初始化计数器为10MOV AX, 0 ; 将AX寄存器清零LOOP_START:ADD AX, CX ; 将CX的值加到AX中LOOP LOOP_START ; 循环执行,直到CX的值为0MOV BX, AX ; 将AX的值保存到BX寄存器中```在上面的示例中,我们首先将CX寄存器初始化为10,然后将AX 寄存器清零。
汇编语言程序设计实验报告
![汇编语言程序设计实验报告](https://img.taocdn.com/s3/m/2e3885edcf2f0066f5335a8102d276a20029603e.png)
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
汇编语言实验7实验报告
![汇编语言实验7实验报告](https://img.taocdn.com/s3/m/bb882718443610661ed9ad51f01dc281e53a56b1.png)
汇编语言实验7实验报告一、实验目的本次实验旨在通过汇编语言编写程序,实现对字符串的操作和输出。
二、实验内容1. 编写一个汇编程序,要求从键盘输入一个字符串,并将其逆序输出到屏幕上;2. 编写一个汇编程序,要求从键盘输入两个字符串,并将它们拼接起来后输出到屏幕上。
三、实验过程1. 字符串逆序输出程序首先,需要从键盘输入一个字符串。
为了方便起见,我们可以先规定字符串的最大长度为100。
接着,我们需要定义两个变量:```buffer db 100 ; 用于存储输入的字符串length dw ? ; 存储输入的字符串长度```其中,db代表定义字节型变量,dw代表定义双字节型变量。
然后,我们需要使用INT 21H中断来读取用户输入的字符串。
具体而言,我们可以使用下面这段代码:```mov ah, 0Ah ; 设置INT 21H功能号为0Ahmov dx, offset buffer ; 将buffer的地址传给DX寄存器int 21h ; 调用INT 21H中断```该代码会将用户输入的字符串存储在buffer中,并且将其长度存储在length变量中。
接着,我们需要将该字符串逆序输出到屏幕上。
为了实现这个功能,我们可以使用栈来存储字符串中的每个字符,并逐个弹出来输出。
具体而言,我们可以使用下面这段代码:```mov si, offset buffer + 1 ; 将si寄存器指向字符串的第一个字符mov cx, length ; 将cx寄存器设置为字符串长度dec cx ; 字符串长度需要减1reverse:push byte ptr [si] ; 将当前字符压入栈中inc si ; 指向下一个字符loop reverse ; 循环直到所有字符都被压入栈中mov ah, 02h ; 设置INT 21H功能号为02h,表示输出一个字符print:pop dx ; 弹出栈顶元素int 21h ; 输出该字符loop print ; 循环直到所有字符都被弹出并输出完毕```2. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编语言实验一
![汇编语言实验一](https://img.taocdn.com/s3/m/78bb31d9680203d8ce2f24a9.png)
实验一查看CPU和内存,用机器指令和汇编指令编程一.实验目的:掌握DEBUG 的基本命令及其功能二.实验内容:1. 预备知识:Debug的使用(1) 什么是Debug?Debug是DOS、Windows都提供的实模式(8086方式)程序的调试工具。
使用它,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。
(2) 我们用到的Debug功能●用Debug的R命令查看、改变CPU寄存器的内容;●用Debug的D命令查看内存中的内容;●用Debug的E命令改写内存中的内容;●用Debug的U命令将内存中的机器指令翻译成汇编指令;●用Debug的T命令执行一条机器指令;●用Debug的A命令以汇编指令的格式在内存中写入一条机器指令。
(3) 进入DebugDebug是在DOS方式下使用的程序。
我们在进入Debug前,应先进入到DOS方式。
用以下方式可以进入DOS:①重新启动计算机,进入DOS方式,此时进入的是实模式的DOS。
②在Windows中进入DOS方式,此时进入的是虚拟8086模式的DOS。
(4) 用R命令查看、改变CPU寄存器的内容1)显示CPU内部所有寄存器内容和标志位状态;格式为:-R2)显示和修改某个指定寄存器内容,格式为:-R 寄存器名若要修改一个寄存器中的值,比如AX中的值,可用R命令后加寄存器名来进行,输入“r ax”后按Enter键,将出现“:”作为输入提示,在后面输入要写入的数据后按Enter 键,即完成了对AX中内容的修改。
若想看一下修改的结果,可再用R命令查看(5) 用Debug的D命令查看内存中的内容1)格式:-d 段地址:偏移地址,Debug将列出从指定内存单元开始的128个内存单元的内容。
使用D命令,Debug将输出3部分内容,如图2.34所示。
中间是部分从指定地址开始的128个内存单元的内容,用十六进制的格式输出,每行的输出从16的整数倍的地址开始,最多输出16个单元的内容。
汇编语言程序设计实验报告二(分支循环程序实验)
![汇编语言程序设计实验报告二(分支循环程序实验)](https://img.taocdn.com/s3/m/384ff1dc680203d8ce2f24f8.png)
汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的1、掌握分支程序、循环程序的设计方法。
2、熟悉DEBUG程序的使用方法。
3、掌握汇编语言程序的编辑、汇编、连接以及调试过程。
二、实验内容1、编写一程序,将内存中某一区域的数据传送到另一个区域中(要求用循结构,不考虑数据块重叠问题)。
2、编写一程序,将内存中某一区域的数据传送到另一区域(要求考虑数据块重叠问题)。
三、实验准备1、预习数据传送指令,熟悉分支和循环程序设计方法。
2、预习DEBUG调试程序的使用方法。
3、根据实验内容要求,编写好实验源程序。
四、实验步骤1、用QE或其它编辑软件,在计算机上编辑源程序,使其正确无误。
2、汇编、连接源程序,产生.EXE可执行文件。
3、运行程序。
(1) 进入DEBUG。
打入DEBUGT MYPROG.EXE。
MYPROG为所编程序的文件名。
(2) 先用G命令连续剧连续执行程序,程序执行完毕后,观察运行结果。
如果执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误,则执行下一步。
(3) 检查程序。
在程序中设置若干断点,以便杳出错误所在。
(4) 采用单步命令T或执行程序,观察各寄存器和存储单元内容,以便找到错误之处。
五、实验报告要求1、列出程序清单,并给出程序流程图。
2、总结实现数据传送的几种方法,指出它们的区别。
开始3、分析实验中所遇到的一些问题,分析错误原因。
4、说明本实验中是如何使用DEBUG进行调试的。
CX、SI、DI置初值六、流程图勤开始设置增量方式CX、SI、DI置初值保存SI内容AL [SI] SI SI+源块长度[DI] AL N SI>DIYSI SI+1 恢复SI内容恢复SI内容DI DI+1CX CX-1 设置减量方式N CX=0, SI指向源块末尾DI指向目的块末尾Y结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y结束题二流程图七、程序清单题一程序清单:STACK SEGMENT STACK ‘STACK’DB 100 DUP(0)STACK ENDSDATA SEGMENT PARA ‘DATA’SOUR DB 0、1、2、3、4、5、6、7、8、9 DEST DB 10 DUP(,)DB ‘$’DATA ENDSSEGMENT PARA‘CODE’ASSUME CS:CODEMAIN PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV CX,10MOV SI,offset SOURMOV DI, offset DESTAGAIN: MOV AL,[SI]MOV [DI],ALINC SIIN DILOOP AGAINMOV DX,offset DESTMOV AH,09HINT 21HRETMAIN ENDPCODE ENDSEND START题二程序清单:DATA SEGMENT PARA ‘DATA’STRG DB ‘ABCDEFGHIJKLMNOP’STG1 EQU STRG+4STG2 EQU STHG+8STRSE EQU 6DATA ENDSSTACK SEGMENT PARA ‘CODE’DB 100 DUP(0) STACK ENDSCODE SEGMENT PARA ‘CODE’ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK PROC FARSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,STRSEMOV SI,OFFSET STG1MOV DI,OFFSET STG2CLDPUSH SIADD SI,STRSE-1CMP SI,DIPOP SIJL MOVESTDADD SI,STRSE-1ADD DI,STRSE-1 MOVE: REP MOVSB RETMAIN ENDPCODE ENDSEND START。
东北大学科技成果汇编.
![东北大学科技成果汇编.](https://img.taocdn.com/s3/m/cb2959cc33d4b14e852468ba.png)
RTW-08熔体物性综合测定仪 (5)RDL-02铁矿石还原软化熔滴实验装置 (5)HYQ-01制气配气系统...................................................................................... 错误!未定义书签。
TKJ-03铁矿石还原性、还原膨胀、低温还原粉化 .................................. 错误!未定义书签。
与焦炭反应性及反应后强度综合测定仪....................................................... 错误!未定义书签。
RDS-04全自动炉渣熔点熔速测定仪.............................................................. 错误!未定义书签。
低温铁合金电镀修复强化技术 (6)不锈钢网增强不锈钢粉多孔复合材料 (7)NE-控温发热材料 (7)新型复合微孔过滤介质................................................................................... 错误!未定义书签。
高硬度、高比重、高耐蚀性金属陶瓷复合强化凡尔球凡尔座生产技术. (8)NEAF铝箔亲水有机膜及技术 (9)耐腐蚀光亮铝合金材料 (9)离子镀金靶材的研制与开发 (10)直接发泡法制造泡沫铝材料........................................................................... 错误!未定义书签。
易烧结α–Al2O3超细微粉及其制品........................................................... 错误!未定义书签。
东北大学计算机硬件基础 第一次实验报告
![东北大学计算机硬件基础 第一次实验报告](https://img.taocdn.com/s3/m/612e4920571252d380eb6294dd88d0d232d43c43.png)
东北大学计算机硬件技术基础实验报告专业班级:姓名:学号:实验题目:认识汇编语言日期:一、实验目的(1) 掌握顺序程序设计方法;(2) 学习数据传送及算术和逻辑运算指令的用法;(3) 熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序的过程。
二、实验内容首先将FIRST字变量与SECOND字变量相加,结果存至THIRD1存储字中,然后将FIRST与SECOND两个字变量相乘,结果存至THIRD2 开始的两个字中。
三、算法描述流程四、实验步骤1. 输入源程序:DATA SEGMENTFIRST DW 0D56CHSECOND DW 1F08HTHIRD1 DW ?THIRD2 DW 2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AX,FIRSTADD AX,SECOND ;求和MOV THIRD1,AX ;保存MOV AX,FIRSTMUL SECOND ;求积MOV THIRD2,AX ;保存MOV THIRD2+2,DXMOV AH,4CHINT 21HCODE ENDSEND START2. 保存源文件,执行masm汇编源程序,生成obj目标文件,结果无错误。
3. 执行link连接程序,生成exe可执行文件,结果无错误。
4. 执行debug调试程序,执行程序,在内存中得到结果,验证结果正确,执行d参数命令察看THIRD1和THIRD2所在的地址单元中的数据为0004字节单元和0006中存放结果。
五、实验结果1. 执行masm编译源程序,生成OBJ文件,得到如下界面:2. 执行link连接程序,生成exe可执行文件得到如下界面:3. 执行debug调试程序,使用u进行反编译,得如下界面4. 执行d参数命令察看DATA所在的地址单元中的数据,得到如下界面:5.执行t参数命令,单步查看六、思考题假如FIRST的偏移地址是0000,那么THIRD2的偏移地址是多少?答:如果FIRST的偏移地址是0000,由题可知,FIRST占用两个字节,SECOND 占用两个字节,THIRD1占用两个字节,那么THIRD2的偏移地址为6个字节,由于占用四个字节,所以偏移地址为0006。
汇编语言实验报告_6
![汇编语言实验报告_6](https://img.taocdn.com/s3/m/1d5bf56ebb1aa8114431b90d6c85ec3a87c28ba0.png)
青岛理工大学课程实验报告
课程名称汇编语言程序设计班级实验日期
2013.11.3
姓名学号实验成绩
实验
名称
子程序
实验目的及要求1.掌握子程序设计相关指令和伪指令的使用方法
2.掌握子程序设计方法, 特别是参数传递方法
3.掌握主程序和子程序之间的调用关系和调用方法
4.熟悉循环和子程序结合应用解答问题的思路
实验环境1.命令行方式
2.MASM.EXE LINK.EXE DEBUG.EXE
实验内容1.设DATA1开始的内存单元中, 存放着一串带符号字数据, 要求采用冒泡排序算法(Bubble Sort)按照从小到大的顺序排序并将排好序的数据存在DATA1开始的单元。
然后在显示器输出排好序的数据, 中间用’,’隔开。
2.输出数据使用子程序方式。
算法描述及实验步骤步骤:
(1)设置数据段地址
(2)设置堆栈段地址
(3)设置堆栈指针
(4)调用9号功能, 输出一个提示性字符串。
(5)循环进入子程序, 输出原始数据。
(6)在子程序内循环输出每一位的十进制数字。
(7)主程序进行内外循环, 进行冒泡排序。
(8)再一次调用子程序输出排序后的结果。
调试过程及实验结果调试过程:
(2)(1)在输出时, 调用DOS 9号功能, 并不是只要语句MOV AH,09H
(3)它是存在入口条件的, 入口条件:DS:DX=输出字符缓冲区首地址。
所以前面必须加上MOV DX,OFFSET NOTE1。
(4)汇编语言是不会再输出汉字的。
(5)子程序结束时一定要有RET
(6)冒泡排序也遇到一些困难。
调试结果:。
汇编语言-实验五 输入输出程序设计
![汇编语言-实验五 输入输出程序设计](https://img.taocdn.com/s3/m/05f679d076a20029bd642d7c.png)
实验五输入输出程序设计一、实验目的1) 掌握输入输出程序的编写方法。
2) 熟悉系统功能调用的方法。
3) 熟悉动画程序的编写方法。
二、实验内容1)在CRT上每隔一秒连续显示字符0-9。
编程提示为了使输出的字符之间有空格,在每一个循环中输出一个0-9的字符和一个空格。
为了输出0-9,置寄存器BL初值为0,每循环一次使其增量。
为了保证输出是十进制,增量后用DAA调整指令。
由于输出为一位十进制数,用AND 0FH 指令屏蔽高4位。
2)用系统功能调用将‘HELLO’由键盘输入,再从屏幕输出‘***HELLO***’。
3)编制在屏幕上画线的子程序,调用该子程序画一矩形。
4)编制字母下落一行的子程序,调用该子程序使字母从屏幕顶部下落到底部。
5)创建一磁盘文件,保存从键盘输入的字符串。
6)编写程序用设置系统时间,首先从键盘以十进制数形式输入时间,然后修改系统时间,并重新以十进制形式显示时间。
7)编写程序将屏幕分割成格状,每一格涂上不同颜色,格数从键盘输入。
8)编写程序在屏幕上显示菜单,输入相应菜单的序号后,选种该菜单项。
三、源程序EXAM5-1STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART:MOV BL,0LP:MOV DL,20HMOV AH, 2INT 21HMOV AL,BLADD AL, 0DAAAND AL,0FHMOV BL,ALPUSH BXOR AL,30HMOV DL,ALMOV AH, 2INT 21HMOV BX,3E8HLP2:MOV CX,176H ;延时1msLP1:PUSHFPOPFLOOP LP1DEC BXJNZ LP2POP BXINC BLJMP LPCODE ENDSEND START执行程序EXAM5-1·EXE,屏幕上依次循环显示一个数字一个空格:0 1 2 3 4 5 6 7 8 9 ……EXAM5-2STACK SEGMENT STACKDB 1024 DUP(0)STACK ENDSDA TA SEGMENTBUFF DB 6,7 DUP(?),‘$’DA TA ENDSINPUT MACRO BUFEMOV DX,OFFSET BUFEMOV AH,0AHINT 21HENDMPUTCHAR MACRO CHARMOV DL,CHARMOV AH,02HINT 21HENDMCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK START:MOV AX,DA TAMOV DS,AXINPUT BUFF ;读取字符串➝BUFFPUTCHAR 0DHPUTCHAR 0AH ;光标另起一行MOV CX,0003HNEXT:PUTCHAR 2AHLOOP NEXTMOV CL,BUFF+1SUB CH,CHMOV BX,OFFSET BUFF+2BEGIN:MOV AL,[BX]PUTCHAR ALINC BXLOOP BEGINMOV CX,0003HNEXT1:PUTCHAR 2AHLOOP NEXT1MOV AH,4CHINT 21HCODE ENDSEND START执行程序EXAM5-2·EXE,输入HELLO↙屏幕上显示结果:*** HELLO ***EXAM5-5NAME EXAM6SSTACK SEGMENT STACK ’stack’DB 1024 DUP(?)SSTACK ENDSDATA SEGMENTASKNAME DB 0DH,0AH,’Enter the’DB ’dest file name:$’ASKCONT DB 0DH,0AH,’Enter the string’DB ’as file content:’0dh,0ah,’$’ FILEBUF DB 62,63DUP(?)HAND_D DW?MSGMER DB 0DH,0AH,0AHDB ’Directory full’,0DH,0AH,’$’MSGWER DB 0DH,0AH,0AHDB ’Disk full’,0DH,0AH,’$’MSGSUC DB 0DH,0AH,0AH,DB ’Write file is Successful’DB 0DH,0AH,’$’DATA ENDSDISPLY MACRO TEXTMOV DX,OFFSET TEXTMOV AH,09HINT 21HENDMCRHAND MACRO PATH,ATTRMOV DX,OFFSET PATH ;文件名MOV CL,ATTR ;文件属性XOR CH,CHMOV AH,3CHINT 21HENDMWRHAND MACRO HAND,BUFF,BYTEMOV BX,HANDMOV DX,OFFSET BUFFADD DX,2MOV CL,BYTEXOR CH,CHMOV AH,40HINT 21HENDMCLHAND MACRO HANDMOV BX,HANDMOV AH,3EHINT 21HENDMCODE SEGMENTPROG PROC FARASSUME CS:CODE,DS:DATA,SS:SSTACKPUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXDISPLY ASKNAME ;提示输入文件名MOV DX,OFFSET FILEBUFMOV AH,0AHINT 21HMOV DI,OFFSET FILEBUF[2]MOV BL,FILEBUF[1]XOR BH,BHMOV BYTE PTR[BX][DI],00HCRHAND FILEBUF[2],0 ;创建并打开新文件JC CRTERRMOV HAND_D,AX ;存文件句柄DISPLY ASKCONT ;提示键入文件内容MOV DX,OFFSET FILEBUFMOV AH,0AHINT 21HWRHAND HAND_D,FILEBUF,FILEBUF[1]JC WRITERRCLHAND HAND_DDISPLY MSGSUCJMP EXIT CRTERR:DISPLY MSGMERJMP EXIT WRITERR:DISPLY MSGWER EXIT:RETPROG ENDPCODE ENDSEND PROG。
汇编语言实验报告
![汇编语言实验报告](https://img.taocdn.com/s3/m/de34c191250c844769eae009581b6bd97f19bcc5.png)
汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。
2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。
4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。
4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。
4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。
5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。
希望对你有所帮助!。
汇编语言实验报告
![汇编语言实验报告](https://img.taocdn.com/s3/m/bd963f9ebdeb19e8b8f67c1cfad6195f312be809.png)
实验一汇编程序的汇编及运行1.实验目的和要求1、熟悉汇编程序的汇编、连接、执行过程2、生成LST文件,查看LST文件3、生成OBJ文件,修改语法错误4、生成EXE文件5、执行2.实验环境IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1、将数据段输入,取名1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。
试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DATA SEGMENTORG 20HNUM1=8NUM2=NUM1+10HDA1 DB ‘IBM PC’DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATA ENDSEND2、输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)DATA SEGMENTVAR1 DB 0, 25, ODH, 300VAR2 DB 12H, A4H, 6BHVAR3 DB ’ABCDEF’VAR4 DW 1234H, 5678HVAR5 DW 10H DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DE: DATA BEING MOV AX, DATAMOV DS, AXLEA SI, VAR5MOV BX, OFFSET VAR2MOV [SI], 0ABHMOV AX, VAR1+2MOV [BX], [SI]MOV VAR5+4, VAR4MOV AH, 4CHINT 21HCODE ENDSEND START3、输入正确的程序,汇编、连接、运行STACKS SEGMENT STACKDW 128 DUP(?)STACKS ENDSDATAS SEGMENTSTRING DB ‘WELCOME!’, 13, 10, ‘$’DATAS ENDSCODES SEGMENTASSUME CS: CODES, DS: DATASSTART:MOV AX, DATASMOV DS, AXLEA DX, STRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODES ENDSEND START4.算法描述及实验步骤(1)编写源程序。
汇编实验报告
![汇编实验报告](https://img.taocdn.com/s3/m/a66c7bd9d5d8d15abe23482fb4daa58da0111c96.png)
汇编实验报告一、实验目的本次汇编实验的主要目的是深入了解汇编语言的基本语法和编程结构,掌握汇编程序的编写、调试和运行过程,提高对计算机底层硬件的理解和操作能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与运算编写程序实现不同寄存器之间的数据传送。
进行简单的算术运算,如加法、减法、乘法和除法,并将结果存储在指定的寄存器或内存单元中。
2、逻辑运算与移位操作进行逻辑运算,包括与、或、非和异或操作。
实现移位操作,如左移和右移,并观察数据的变化。
3、分支与循环结构使用条件跳转指令实现分支结构,根据不同的条件执行不同的代码段。
运用循环指令实现循环操作,如计数循环和条件循环。
4、子程序调用编写子程序来完成特定的功能,如计算阶乘、查找最大值等。
在主程序中调用子程序,并传递参数和获取返回值。
四、实验步骤1、数据传送与运算打开 MASM 编程工具,新建一个汇编源文件。
使用 MOV 指令将数据从一个寄存器传送到另一个寄存器,例如:MOV AX, BX 。
进行加法运算,使用 ADD 指令,如:ADD AX, CX 。
进行减法运算,使用 SUB 指令,如:SUB DX, BX 。
乘法运算使用 MUL 指令,除法运算使用 DIV 指令,并将结果存储在合适的位置。
2、逻辑运算与移位操作在源文件中使用 AND 、OR 、NOT 和 XOR 指令进行逻辑运算,例如:AND AX, BX 。
对于移位操作,使用 SHL (左移)和 SHR (右移)指令,如:SHL AX, 2 表示将 AX 的值左移 2 位。
3、分支与循环结构使用 CMP 指令比较两个值,然后根据比较结果使用 JZ (等于零跳转)、JL (小于跳转)、JG (大于跳转)等条件跳转指令实现分支结构。
对于循环结构,使用 LOOP 指令实现计数循环,例如:MOV CX, 10 ;LABEL: ;LOOP LABEL 。
汇编实验2
![汇编实验2](https://img.taocdn.com/s3/m/b2c1a127af45b307e87197b5.png)
汇编实验2.1-2.4软件工程20091120183 李铮2.1数据传送指令的使用1.实验目的:负责把数据、地址或立即数传送到寄存器、存储单元以及I/O端口,或从内存单元、I/O端口中读取数据。
可以分为下面几类:1. 通用传送指令:MOV,PUSH,POP,XCHG,XLA T2. 输入输出指令指令: IN,OUT3. 目的地址传送指令: LEA,LDS,LES4. 标志位传送指令: LAHF,SAHF,PUSHF,POPF2.实验步骤:1. 传送指令1)用A命令在内存100H处键入下列内容:MOV AX,1234MOV BX,5678XCHG AX,BXMOV AH,35MOV AL,48MOV DX,75ABXCHG AX,DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
并注意标志位有无变化。
2.改变标志寄存器psw中tf标志的状态(0——1或1——0),其余位保持不变。
3. 设DS=当前段地址,BX=0300H,SI=0002H,请用DEBUG的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。
在DEBUG状态下使用A 命令送入下面程序,并用单步T命令执行的方法,分析每条指令源地址的形成过程?当数据传送每完成一次,试分析AX寄存器中的内容是什么?程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]HLT4. 使用标志位传送指令,编程序段将标志位寄存器的低八位的值存入内存单元DS:1000H 中或堆栈中,然后将标志位寄存器的低八位置位为10101010。
2.2算术逻辑运算和移位指令的使用1.实验目的:使用算术逻辑运算和移位指令,可以实现对二进制数据的加、减、乘、除等四则运算,与、或、非、异或等逻辑运算,以及移位运算和代码转换运算。
汇编语言编程实验报告
![汇编语言编程实验报告](https://img.taocdn.com/s3/m/e2ab1d4a814d2b160b4e767f5acfa1c7aa0082c8.png)
汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一. 实验题目【汇编语言补充作业T20T20】编写完整程序,利用】编写完整程序,利用DOS 系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二. 程序流程及思路实现字符串输入,需要分成三个步骤:实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS 系统功能调用0AH 号子功能,(DS:DX DS:DX))= = 输入缓冲区首址;输入缓冲区首址;输入缓冲区首址;3、在输入的字符串尾加上‘、在输入的字符串尾加上‘$$’字符,以作为输出结束条件。
’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;和字符串实际字符数;2、输出回车换行可利用字符串:、输出回车换行可利用字符串:CR DB 0AH,0DH,CR DB 0AH,0DH,CR DB 0AH,0DH,’’$’。
’。
三. 源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;MAXLEN DB N ;缓冲区字符的最大长度缓冲区字符的最大长度缓冲区字符的最大长度ACTLEN DB ? ;ACTLEN DB ? ;实际字符个数实际字符个数实际字符个数STRING DB N DUP(?) ;STRING DB N DUP(?) ;字符空间字符空间字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行回车换行MOV BL,MAXLEN+1 ;取实际的字符长度取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上输出结尾要加上$ $MOV DX,SI ;把开始存放字符的首地址赋给DX(注:以下程序采用b方法)方法)。
汇编实验报告一实验总结
![汇编实验报告一实验总结](https://img.taocdn.com/s3/m/062b585153d380eb6294dd88d0d233d4b14e3fd5.png)
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
汇编语言编程实验报告
![汇编语言编程实验报告](https://img.taocdn.com/s3/m/f8fc4d074531b90d6c85ec3a87c24028915f85ac.png)
汇编语言编程实验报告汇编语言程序设计实验报告(一)汇编语言程序设计实验报告(一)一、预备知识汇编语言程序设计是一门实践性很强的课程。
编写程序、上机调试、运行程序是进一步学习和掌握汇编语言程序设计的必要手段。
二、实验目的1、掌握实验运行汇编语言所用的计算机机型2、熟悉常用编辑程序(行编辑程序EDLIN、全屏幕编辑程序QE及其它用于文件编辑的应用程序。
)3、掌握汇编程序ASM、宏汇编程序MASM1.0以上。
4、LINK连接程序5、DEBUG调试程序三、汇编语言源程序上机操作过程2、编辑源文件根据给定的任务,可编写程序。
如果经过检查认为所编程序无错时,就可在计算机上通过编辑程序建立源程序文件了。
一般在编辑过程中总会有错误产生,因此还要进行人工检查、修改以致重新编辑,直到所编辑的源程序无误为止,然后以一个源程序文件(ASM文件)存盘。
将包含QE文件的工作磁盘插入驱动器A:。
进入QEA\QE进入全屏幕后可以开始编程。
文件名取为Myprog。
asm;Ddisplystring (09H)CODESEGMENTPUBLICASSUME CS:CODE,DS:CODEORG 100HSTART:JMP BEGINMSG DB‘Hi ! This ia a dollar sign terminated string.’,’$’BEGIN:MOV AX,CS ;set up to display messageMOV DS,AXMOV DX,OFFSET,SG ;set up to display messageMOV AH,09H;display string function requestINT 21H ;call DOSMOV AH ,4CH ;terminate propram funct requestINT 21H ;Call DOSCODE ENDS;end of code segmentEND START;strat is the entry point输入完毕后,按ALT---X,存盘返回DOS3、汇编源程序文件(ASM,MASM)由编辑程序所建立的ASM文件只是个文本文件,计算机无法执行。
汇编语言程序设计实验报告
![汇编语言程序设计实验报告](https://img.taocdn.com/s3/m/653339c45122aaea998fcc22bcd126fff7055dca.png)
班级 :
二、实验内容 求 1+2+3+4+5+6+7+8+9 的和,并将和显示在屏幕上; 具体要求: 1. 利用重复宏定义实现 1、2、39 数据的定义; 2. 将单个字符显示定义成宏,利用宏调用来实现和的显示。 3. 利用 PWB 集成环境完成程序的编辑、汇编及连接,并最终生成 COM 可执行文件。
二、实验内容 P131 作业 29。
实验三子Βιβλιοθήκη 序设计实验一、实验目的 1.掌握汇编语言源程序子程序设计方法; 2.会使用 CV 软件工具。
二、实验内容 把实验二作为子程序,编写主程序来对能否构成三角形进行 10 判断。
姓名:
汇编语言程序设计实 验报告
实验四
宏汇编程序设计实验
一、实验目的 1.掌握宏汇编程序编程技术及宏调用的方法; 2. 了解 COM 文件的编程方法及特点; 2.会使用 PWB 及 CV 软件工具。
实验五
混合程序的开发实验
一、实验目的 1.了解混合调用中的参数设置; 2. 掌握混合调用的方法;
姓名:
二、实验内容 P156 第 5 题。
汇编语言程序设计实 验报告
班级 :
姓名:
汇编语言程序设计实 验报告
实验一
单指令功能测试实验
一、实验目的 1.会使用 DEBUG 软件; 2.利用 DEBUG 单步执行功能测试指令的执行。
班级 :
二、实验内容 P129,14 题
实验二
完整的汇编语言程序设计实验
一、实验目的 1.掌握完整的汇编语言源程序的设计方法; 2.掌握汇编语言源程序的执行过程。
实验五
多模块程序设计实验
一、实验目的 1.掌握汇编段的属性的含义; 2. 掌握利用 LINK 将多模块连接起来的方法; 3.掌握利用库文件将多模块连接起来的方法。
汇编语言程序设计实验报告
![汇编语言程序设计实验报告](https://img.taocdn.com/s3/m/73d6e1847e21af45b207a87b.png)
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。
e) 使用debug程序调试程序的方法。
五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。
汇编实验报告6
![汇编实验报告6](https://img.taocdn.com/s3/m/2931978edb38376baf1ffc4ffe4733687e21fcc2.png)
汇编实验报告6汇编实验报告6引言:汇编语言是一种底层编程语言,它直接操作计算机硬件,提供了对计算机底层资源的更精确控制。
在本次实验中,我们将继续学习和实践汇编语言的相关知识,探索其在计算机系统中的作用和应用。
一、实验目的本次实验旨在加深我们对汇编语言的理解,并通过实践进一步掌握汇编语言的基本概念、语法和应用。
具体目标如下:1. 掌握汇编语言的基本指令和寻址方式;2. 理解和实现简单的汇编程序;3. 学会使用调试工具调试汇编程序。
二、实验环境本次实验使用的环境为Windows操作系统和MASM汇编器。
在实验开始前,我们需要确保已经正确安装了MASM汇编器,并配置好了相关环境变量。
三、实验过程1. 编写程序本次实验我们将编写一个简单的汇编程序,实现两个数相加并输出结果的功能。
首先,我们需要使用文本编辑器打开一个新的文件,并保存为.asm格式。
接下来,我们将按照汇编语言的语法规则,逐步编写程序。
2. 汇编程序的结构一个标准的汇编程序由三个部分组成:数据段、代码段和堆栈段。
在数据段中,我们定义了需要使用的变量和常量;在代码段中,我们编写了实际的汇编指令;而堆栈段则用于存储程序执行过程中的临时数据。
3. 汇编指令的使用在本次实验中,我们将使用一些常见的汇编指令,如MOV、ADD、SUB等。
这些指令用于操作寄存器、内存和立即数,实现数据的传输、运算和比较等功能。
4. 调试程序编写完汇编程序后,我们需要使用调试工具对程序进行调试,以确保程序的正确性。
调试工具可以帮助我们逐条执行程序,并查看寄存器和内存的变化,从而找出程序中的错误。
四、实验结果与分析经过编写和调试,我们成功地实现了两个数相加并输出结果的功能。
我们可以通过调试工具查看程序执行过程中寄存器和内存的变化,以验证程序的正确性。
同时,我们还可以对程序进行性能分析,了解其在不同输入情况下的执行效率。
五、实验总结通过本次实验,我们深入学习了汇编语言的基本概念和应用。
汇编实验报告DL
![汇编实验报告DL](https://img.taocdn.com/s3/m/26eed86e48d7c1c708a14597.png)
实验1 简单汇编语言程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。
2.掌握简单汇编语言程序的设计方法。
3.熟悉调试工具DEBUG ,并运用DEBUG 工具调试程序。
二、实验内容1. 若X 、Y 、R 、W 是存放8位带符号数字节单元的地址,Z 是16位字单元的地址。
试编写汇编程序,完成)2()5)((+⨯-÷-←R Y X W Z 。
1.程序算法流程图。
2.源程序清单。
DATA SEGMENTX DB 5 ;数据定义Y DB 2R DB 2W DB 25Z DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX ;段寄存器定义MOV AL,W ;开始计算SUB AL,[X] ;W-XCBW ;将AL符号扩展为AH MOV BL,5IDIV BL ;(W-X)/5SUB AL,[Y]MOV BL,RADD BL,2 ;R+2IMUL BL ;最后的乘法运算MOV [Z],AX ;将最后的结果送给ZMOV AH,4CH ;返回DOSINT 21HCODE ENDS3.程序运行结果。
2.试编写一个程序,测试某数是否是奇数。
如该数是奇数,则把DL的第0位置1,否则将该位置0。
1.程序算法流程图。
2.源程序清单。
DATA SEGMENTX DB 9Y DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV AL,[X]SHR DL,1SHR AL,1RCL DL,1MOV [Y],DLMOV AH,4CHINT 21HCODE ENDSEND START3.程序运行结果。
实验2 分支及循环程序设计一、实验目的与要求1.熟悉汇编语言运行、调试环境及方法。
2.掌握分支程序和循环程序的设计方法。
3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(附录二)汇编语言程序设计实验报告实验1 数据传送指令1、实验目的:了解和掌握 MOV、PUSH、POP、XCHG四条指令的作用和在编程中的用法。
2、实验要求:(Ⅰ)采用立即数寻址方式将19E0H,3F56H,0AF37H,9A81H 分别送给EAX、EBX、ECX、EDX四个寄存器。
记录:操作前 EAX= 750A3388 、 EBX= 7EFDE000 、 ECX= 00000000 、 EDX= 01361005操作后 EAX= 000019E0 、 EBX= 00003F56 、 ECX= 0000AF37 、 EDX= 00009A81操作过程中所用到的指令:INCLUDE Irvine32.inc.codemain PROCcall DumpRegsmov eax,19E0Hmov ebx,eaxmov ecx,ebxmov edx,ecxcall DumpRegsexitmain ENDPEND main(Ⅱ)采用采用寄存器寻址方式将19E0H送给EBX、ECX、EDX 三个寄存器。
记录:操作前 EAX= 750A3388 、 EBX= 7EFDE000 、 ECX= 000000000 、 EDX= 013C1005操作后 EAX= 000019E0 、 EBX= 000019E0 、 ECX= 000019E0 、 EDX= 000019E0操作过程中所用到的指令:INCLUDE Irvine32.inc.codemain PROCcall DumpRegsmov eax,19E0Hmov ebx,eaxmov ecx,ebxmov edx,ecxcall DumpRegsexitmain ENDPEND main(2)对EAX、EBX、ECX、EDX四个寄存器进行出入堆栈的操作。
(Ⅰ)将EAX、EBX、ECX、EDX四个寄存器的内容依次压入堆栈中,注意观察栈指针寄存器和堆栈内容的变化。
记录:压入EAX前 ESP= 003AF8E8 ,(ESP)= 750A339A压入EAX后 ESP= 003AF8E4 ,(ESP)= 750A3388压入EBX前 ESP= 003AF8E4 ,(ESP)= 750A3388压入EBX后 ESP= 003AF8E0 ,(ESP)= 7EFDE000压入ECX前 ESP= 003AF8E0 ,(ESP)= 7EFDE000压入ECX后 ESP= 003AF8DC ,(ESP)= 00000000压入EDX前 ESP= 003AF8DC ,(ESP)= 00000000压入EDX后 ESP= 003AF8D8 ,(ESP)= 00241005操作过程中所用到的指令:INCLUDE Irvine32.inc.codemain PROCcall DumpRegsmov eax,[esp]call DumpRegspush eaxcall DumpRegspush ebxcall DumpRegspush ecxcall DumpRegspush edxcall DumpRegsexitmain ENDPEND main(Ⅱ)将堆栈中的内容依次弹出到EAX、EBX、ECX、EDX四个寄存器,注意观察栈指针寄存器和堆栈内容的变化。
记录:弹出到EAX前 ESP= 003AF8D8 ,(ESP)= 00241005弹出到EAX后 ESP= 003AF8DC ,(ESP)= 00000000弹出到EBX前 ESP= 003AF8DC ,(ESP)= 00000000弹出到EBX后 ESP= 003AF8E0 ,(ESP)= 7EFDE000弹出到ECX前 ESP= 003AF8E0 ,(ESP)= 7EFDE000弹出到ECX后 ESP= 003AF8E4 ,(ESP)= 750A3388弹出到EDX前 ESP= 003AF8E4 ,(ESP)= 750A3388弹出到EDX后 ESP= 003AF8E8 ,(ESP)= 750A339A操作过程中所用到的指令:pop eaxcall DumpRegspop ebxcall DumpRegspop ecxcall DumpRegspop edxcall DumpRegsexitmain ENDPEND main(3)已知EAX=3F56H,分别利用存储器直接寻址方式和存储器间接寻址方式,将EAX寄存器的内容送到内存单元中。
(Ⅰ)存储器直接寻址方式记录:送出到EAX前 EAX= 00003F56,[var]=00000000送出到EAX后 EAX= 00003F56 ,[var]=00003F56操作过程中所用到的指令:include Irvine32.inc.datavar dword ?.codemain procmov eax,varcall dumpregsmov eax,3f56hcall dumpregsmov var,eaxcall dumpregscall writehexexitmain endpend main(Ⅱ)存储器间接寻址方式记录:送出到EAX前 EAX= 00003F56 ,[var]=00000000用于存放地址码的寄存器( esi )= 00000000送出到EAX后 EAX=00003F56,[var]=00003F56操作过程中所用到的指令:include Irvine32.inc.datavar dword ?.codemain procmov eax,3F56Hcall dumpregsmov esi,offset varmov [esi],eaxcall dumpregsmov edx,varexitmain endpend main(4)已知EAX =3F56H,ECX =4690H,利用交换指令交换这两个寄存器的内容。
记录:交换前EAX= 00003F56H,ECX= 00004690H交换后 EAX= 00004690H, ECX=00003F56H操作过程中所用到的指令:Include Irvine32.inc.codemain PROCmov eax,3F56Hmov ecx,4690Hcall DumpRegsxchg eax,ecxcall DumpRegsexitmain ENDPEND main实验二逻辑指令、跳转指令与分支程序设计1、实验目的:了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的功能和作用,以及此类指令的使用方法。
2、实验要求:具体了解和掌握逻辑指令、比较指令、无条件/有条件转移类指令的使用和在使用时应注意的问题,学习分支型程序设计的一般方法。
(1)在DEBUG系统状态下,分别编制、调试并记录以下逻辑指令程序段的每一条指令的运行情况:(Ⅰ)mov al,41 ┃EAX = 750A3329H AL=29H or al,20 ┃EAX = 750A333DH AL=3DH (Ⅱ)mov al,66 ┃EAX = 750A3342H AL=42H and al,0df ┃EAX = 750A3342H AL=42H (Ⅲ)mov EAX,5678 ┃EAX = 0000162EHxor EAX,EAX ┃EAX = 00000000H(Ⅳ)mov EAX,0ff00 ┃EAX=0000FF00Hnot EAX ┃FFFF00FFH(Ⅴ)mov EAX,1234 ┃EAX = 000004D2H SF=0 ZF=1 OF=0test EAX,1 ┃EAX = 000004D2H SF=0 ZF=1 OF=0test EAX,2 ┃EAX = 000004D2H SF=0 ZF=0 OF=0test EAX,4 ┃EAX = 000004D2H SF=0 ZF=1 OF=0test EAX,8 ┃EAX = 000004D2H SF=0 ZF=1 OF=0test EAX,10 ┃EAX = 000004D2H SF=0 ZF=0 OF=0test EAX,20 ┃EAX = 000004D2H SF=0 ZF=0 OF=0test EAX,40 ┃EAX = 000004D2H SF=0 ZF=1 OF=0test EAX,80 ┃EAX = 000004D2H SF=0 ZF=0 OF=0test指令的作用是在源操作数和目的操作数之间进行布尔“与”运算,但不改变目的操作数,只是设置相应的CPU标志。
(2) 已知DATA单元开始存放三个带符号数,编制程序,检查三个数据是否同号,若同时为正,则在显示器上显示“+”;同时为负,则显示“-”;否则显示空格“”。
要求:分别用三组数据(同时为正,同时为负,异号)调试程序,验证程序的正确性。
INCLUDE Irvine32.inc.datavar1 sword 2var2 sword -1var3 sword 3.codemain PROC;三个数全部为正RCL var1,1 ;把最高位送到进位位jc A ;进位位为1,即CF为1,符号位为1负数,跳转RCL var2,1jc BRCL var3,1jc Bmov al,'+'call writecharjnc D ;全部为正,跳到结束A: ;三个数全部为负 ,此时已有var1为负RCL var2,1jnc B ;无进位位,符号为正,跳转RCL var3,1jnc B ;如果为正则跳转mov al,'-'call writecharjc D ;全部为负,跳到结束B: ;另外一种情况mov al,' 'call writecharD:exitmain ENDPEND main实验三算术运算类指令、移位指令及循环程序设计1、实验目的:了解和掌握加、减、乘、除指令的在程序设计中的用法和应注意的问题,了解和掌握移位指令的功能、作用和方法。
了解和掌握循环控制类指令的功能、作用和方法。
学会循环程序设计的方法。
学习汇编语言输出输入语句的设计。
2、实验要求:具体了解和掌握算术类指令、移位指令和循环控制类指令的使用,以及在使用时应注意的问题,学习循环程序设计的一般方法。
(1)在DEBUG系统状态下,分别编制、调试并记录以下加、减程序段的每一条指令的运行情况,查看寄存器的结果:(Ⅰ)MOV EAX,2389 ┃EAX = 00000955H EBX = 7EFDE000HMOV EBX,0CEDFH ┃EAX = 00000955H EBX = 0000CEDFHADD EAX,EBX ┃EAX = 0000D834H EBX = 0000CEDFH(Ⅱ)MOV EAX,2389 ┃EAX = 00000955H EBX = 7EFDE000HMOV EBX,0CEDFH ┃EAX = 00000955H EBX = 0000CEDFHSUB EAX,EBX ┃EAX = FFFF3A76H EBX = 0000CEDFH(Ⅲ)MOV EAX,2389 ┃EAX = 00000955H EBX = 7EFDE000HMOV EBX,0CEDFH ┃EAX = 00000955H EBX = 0000CEDFHADD AH,BH ┃EAX = 0000D755H EBX = 0000CEDFH AH=D7H BH=CEHADD AL,BL ┃EAX = 0000D734H EBX = 0000CEDFH AL=34H BL=DFH(Ⅳ)MOV EAX,2389 ┃EAX = 00000955H EBX = 7EFDE000HMOV EBX,0CEDFH ┃EAX = 00000955H EBX = 0000CEDFHADD AH,BH ┃EAX = 0000D755H EBX = 0000CEDFH AH=D7H BH=CEHADC AL,BL ┃EAX = 0000D734H EBX = 0000CEDFH AL=34H BL=DFH(2)在DEBUG系统状态下,分别编制、调试并记录以下乘、除程序段的每一条指令的运行情况:(Ⅰ)MOV AL,23 ┃EAX = 750A3317H EBX =7EFDE000H AL=17HMOV BL,0CEH ┃EAX = 750A3317H EBX =7EFDE0CEH BL=CEHMUL BL ┃EAX = 750A1282H EBX =7EFDE0CEH(Ⅱ)MOV AX,2389 ┃EAX = 750A0955H EBX =7EFDE000HMOV BX,0CEDFH ┃EAX = 750A0955H EBX =7EFDCEDFHMUL BX ┃EAX = 750A870BH EBX =7EFDCEDFH(Ⅲ)MOV AX,2389 ┃EAX = 750A0955H EBX =7EFDE000HMOV BL,0CEH ┃EAX = 750A0955H EBX =7EFDE0CEHDIV BL ┃EAX = 750A7B0BH EBX =7EFDE0CEH(Ⅳ)MOV AX,2389 ┃EAX = 750A0955H EBX = 7EFDE000H EDX = 00C41005HMOV DX,0856 ┃EAX = 750A0955H EBX = 7EFDE000H EDX = 00C40358HMOV BX,0CEDFH ┃EAX = 750A0955H EBX = 7EFDCEDFH EDX = 00C40358HDIV BX ┃EAX = 750A0423H EBX = 7EFDCEDFH EDX = 00C544D8H(3)在DEBUG系统状态下,分别编制、调试并记录以下移位指令程序段的每一条指令的运行情况:(Ⅰ)mov EAX,420 ┃EAX = 000001A4Hshl EAX,1 ┃EAX = 00000348H(Ⅱ)mov EAX,240 ┃EAX = 000000F0H EBX = 7EFDE000H ECX = 00000000Hmov cl,4 ┃EAX = 000000F0H EBX = 7EFDE000H ECX = 00000004Hshl EAX,cl ┃EAX = 00000F00H EBX = 7EFDE000H ECX = 00000004H(Ⅲ)mov EAX,8000 ┃EAX = 00001F40H EBX = 7EFDE000H ECX = 00000000Hmov cl,4 ┃EAX = 00001F40H EBX = 7EFDE000H ECX = 00000004Hshr EAX,cl ┃EAX = 000001F4H EBX = 7EFDE000H ECX = 00000004H(Ⅳ)mov EAX,8000 ┃EAX = 00001F40H EBX = 7EFDE000H ECX = 00000000Hmov cl,4 ┃EAX = 00001F40H EBX = 7EFDE000H ECX = 00000004Hsar EAX,cl ┃EAX = 000001F4H EBX = 7EFDE000H ECX = 00000004H(Ⅴ)mov EAX,8086 ┃EAX = 00001F96H EBX = 7EFDE000H ECX = 00000000Hmov cl,4 ┃EAX = 00001F96H EBX = 7EFDE000H ECX = 00000004Hrol EAX,cl ┃EAX = 0001F960H EBX =7EFDE000H ECX = 00000004H(Ⅵ)mov EAX,8086 ┃EAX = 00001F96H EBX = 7EFDE000H ECX = 00000000Hmov cl,4 ┃EAX = 00001F96H EBX = 7EFDE000H ECX = 00000004Hror EAX,cl ┃EAX = 600001F9H EBX = 7EFDE000H ECX = 00000004H(Ⅶ)mov EAX,8086 ┃EAX = 00001F96H EBX = 7EFDE000H ECX = 00000000Hmov cl,4 ┃EAX = 00001F96H EBX =7EFDE000H ECX = 00000004Hrcl EAX,cl ┃EAX = 0001F960H EBX = 7EFDE000H ECX = 00000004H(Ⅷ)mov EAX,8086 ┃EAX = 00001F96H EBX = 7EFDE000H ECX = 00000000Hmov cl,4 ┃EAX = 00001F96H EBX = 7EFDE000H ECX = 00000004Hrcr EAX,cl ┃EAX = C00001F9H EBX =7EFDE000H ECX = 00000004Hrol与rcl、ror与rcr的区别在于rol和ror是将寄存器中的内容直接进行移位,而rcl和rcr是将寄存器中的内容与进位标志中的内容一起进行移位,因此参加移位的数据比原来的数据位数多一位。