汇编实验报告分析解析
- 格式:doc
- 大小:136.00 KB
- 文档页数:9
汇编语言实验报告在计算机科学中,汇编语言是一种底层的编程语言,直接使用计算机的指令集来写程序。
与高级语言(如C ++或Java)不同,汇编程序被编写为显式的机器代码,它们可以直接在计算机上执行。
在本次实验中,我们学习了汇编语言的基础知识,并设计了一个简单的程序来演示操作系统,此程序可以打印字符串、读入字符和执行其他一些简单的操作。
我们了解了汇编语言的基本概念,例如寄存器、指令和标志位。
寄存器是CPU内部的存储空间,可用于存储数据或执行算术操作。
指令是CPU执行的单个操作,例如将数据移动到寄存器中,从寄存器中加载数据,或将数据存储到内存中。
标志位是CPU中的一些标志,用于指示例如进位或溢出等特定条件的发生情况。
之后,我们学习了如何使用汇编语言来执行简单的操作。
我们使用了mov指令将数据移动到寄存器中,使用int指令调用中断,以及使用jmp指令跳转到不同的程序行。
我们设计了一个简单的操作系统,它通过汇编程序来控制计算机的操作。
该操作系统具有以下主要功能:1. 打印字符串。
我们使用了mov指令将字符串中的数据加载到寄存器中,并使用int 指令调用中断来打印字符串。
2. 读入字符。
我们使用了int指令调用中断来读取用户输入的字符,然后将其存储在寄存器或内存中。
3. 执行简单的操作。
我们使用了jmp指令和标志位来执行条件分支,或使用算术指令来进行加减等操作。
在实验中,我们还学习了如何在调试模式下运行程序,以及如何使用汇编编译器将汇编代码转换为机器代码。
我们还使用了调试器来跟踪程序运行时的寄存器和内存内容,以及使用断点来在程序执行时停止并检查状态。
本次实验使我们更深入地了解了汇编语言的工作原理,并学习了如何设计和实现简单的操作系统。
通过了解和理解汇编语言,我们的编程能力将得到提高,帮助我们更好地理解计算机的内部工作原理。
汇编语言实验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. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编南邮实验报告一、实验目的了解汇编语言的基本概念和基本语法,学会使用汇编指令编写简单的汇编程序。
二、实验内容1. 学习汇编语言的基本概念和基本语法;2. 编写一个简单的汇编程序。
三、实验原理汇编语言是计算机中最底层的一种语言,它直接操作计算机的硬件资源。
汇编语言使用面向机器的指令,利用指令的组合和操作数的变化实现各种功能。
在编写汇编程序时,需要注意寄存器的使用、内存的操作以及指令执行流程的控制。
四、实验步骤1. 学习汇编语言的基本概念和基本语法,了解常用的寄存器、指令和标志位等;2. 编写一个简单的汇编程序,要求实现将一个字节的数据存入内存中,并读取出来进行显示的功能。
五、实验代码assemblySECTION .textGLOBAL _start_start:mov al, 65 ; 将字节数据65存入al寄存器mov byte [data], al ; 将al寄存器中的值存入内存中的data变量mov dl, [data] ; 从内存中读取data变量的值到dl寄存器add dl, 30h ; 将dl寄存器的值加上30h,将结果存回dl寄存器add dl, 0 ; 非必要指令,用于演示指令执行流程的控制add dl, 0 ; 非必要指令,用于演示指令执行流程的控制add dl, 0 ; 非必要指令,用于演示指令执行流程的控制mov ah, 0eh ; 设置显示模式int 10h ; 控制显示mov al, 0 ; 程序退出mov ah, 0x4cint 0x21SECTION .datadata db 0 ; 定义一个字节的变量data六、实验结果运行该汇编程序后,屏幕上显示出字符"A"。
七、实验总结通过此次实验,我了解了汇编语言的基本概念和基本语法,学会了使用汇编指令编写简单的汇编程序。
汇编语言是一种底层的语言,能够直接操作计算机的硬件资源,具有高效性和灵活性。
在编写汇编程序时,需要注意寄存器的使用、内存的操作以及指令执行流程的控制。
《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。
实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。
汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。
本实验通过编写汇编语言程序,加深对汇编语言的理解。
二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。
2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。
3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。
b.设置段寄存器,将数据段地址加载到DS寄存器中。
c.设置显示模式和光标位置。
d.将字符串逐个字符输出到屏幕上。
e.关闭显示模式。
4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。
5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。
三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。
通过程序分析和调试过程,加深了对汇编语言的理解和掌握。
四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。
通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。
同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。
在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。
总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。
汇编指令实验报告汇编指令实验报告汇编指令是计算机中非常重要的一部分,它们直接操作着计算机的硬件,实现各种功能。
在本次实验中,我们学习了汇编指令的基本知识,并通过实践掌握了它们的使用方法。
本文将对我们的实验过程进行详细的总结和分析。
实验一:汇编指令的基本概念和使用方法在实验的第一部分,我们首先了解了汇编指令的基本概念和使用方法。
汇编指令是一种低级语言,它直接操作计算机的寄存器和内存单元。
我们通过学习不同的指令集和指令格式,了解了如何使用汇编指令来实现各种功能。
在实验中,我们使用了一款常见的汇编语言工具,例如MASM(Microsoft Macro Assembler)和NASM(Netwide Assembler)。
通过这些工具,我们可以将汇编代码转换成可执行的机器码,并在计算机上运行。
实验二:汇编指令的应用实例在实验的第二部分,我们通过一些实际的应用实例,进一步加深了对汇编指令的理解和掌握。
我们学习了如何使用汇编指令来实现字符串处理、数学运算、条件判断等常见的功能。
例如,我们学习了如何使用汇编指令来实现字符串的反转功能。
通过对字符串的每个字符进行逆序排列,我们可以实现字符串的反转。
这个实例不仅帮助我们理解了汇编指令的基本操作,还锻炼了我们的逻辑思维能力。
实验三:汇编指令的性能优化在实验的第三部分,我们探讨了如何通过优化汇编指令来提升程序的性能。
通过对程序的瓶颈进行分析,我们可以找到一些可以改进的地方,并通过修改和优化汇编指令来提升程序的执行效率。
例如,我们学习了如何通过使用SIMD(Single Instruction Multiple Data)指令集来实现并行计算。
通过同时对多个数据进行操作,我们可以大大提高程序的运行速度。
这个实例不仅帮助我们理解了汇编指令的高级应用,还培养了我们的优化思维能力。
实验四:汇编指令的错误处理和调试技巧在实验的第四部分,我们学习了如何处理汇编指令中的错误,并掌握了一些常用的调试技巧。
汇编语言实验十实验报告一、实验目的本次实验的主要目的是通过学习汇编语言中的输入输出指令和字符串操作指令,掌握如何在汇编语言中进行简单的输入输出和字符串操作。
二、实验内容本次实验主要包括以下内容:1. 输入输出指令:学习如何使用INT 21h中断来进行简单的键盘输入和屏幕输出操作。
2. 字符串操作指令:学习如何使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。
3. 实现一个简单程序:通过上述知识点,完成一个简单的程序,可以进行键盘输入和屏幕输出,并对两个字符串进行比较。
三、实验过程1. 输入输出指令在汇编语言中,我们可以使用INT 21h中断来进行键盘输入和屏幕输出操作。
其中,AH寄存器用于指定不同的功能号码。
例如:- AH=01h:在屏幕上显示一个字符- AH=02h:在屏幕上显示一个ASCII码值所代表的字符- AH=06h:从键盘读取一个字符下面是一个示例程序,可以让用户从键盘上输入一个字符,并将其显示在屏幕上:```mov ah, 06h ; 将06h存入AH寄存器int 21h ; 调用中断21hmov dl, al ; 将读取的字符存入dl寄存器mov ah, 02h ; 将02h存入AH寄存器int 21h ; 调用中断21h,显示字符```2. 字符串操作指令在汇编语言中,我们可以使用MOV、LEA、LDS等指令来进行字符串的存储、传递和比较等操作。
例如:- MOV:可以将一个字符串从一个内存地址复制到另一个内存地址- LEA:可以将一个字符串的地址加载到寄存器中- LDS:可以将一个段地址和偏移地址加载到DS和SI寄存器中下面是一个示例程序,可以将一个字符串从一个内存地址复制到另一个内存地址,并比较两个字符串是否相等:```mov si, offset str1 ; 将str1的偏移地址加载到SI寄存器中lea di, str2 ; 将str2的地址加载到DI寄存器中mov cx, length ; 将字符串长度加载到CX寄存器中copy_loop:lodsb ; 从SI指向的内存单元读取一字节数据,并自动将SI加1 stosb ; 将AL所包含的数据写入DI指向的内存单元,并自动将DI 加1loop copy_loop ; 循环执行,直至CX为0cmp str1, str2 ; 比较str1和str2是否相等je equal ; 如果相等,跳转到equal标签not_equal:; 如果不相等,执行一些操作jmp endequal:; 如果相等,执行一些操作end:```三、实验结果通过本次实验,我学会了如何在汇编语言中进行简单的输入输出和字符串操作。
汇编实验报告姓名:班级:学号:实验指导教师:陆勤实验一:汇编运行环境及方法、简单程序设计——比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
一.实验目的1.熟悉汇编语言运行环境和方法2.了解如何使用汇编语言编制程序3.熟悉debug有关命令的使用方法4.利用debug掌握有关指令的功能。
5.利用debug运行简单的程序段。
二.实验内容1.学会输入、编辑汇编语言程序。
2.学会对汇编语言程序进行汇编、连接和运行。
3.进入和退出debug程序。
4.学会debug中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。
对于U命令、N命令、W命令等,也应试一下。
三:实验要求:绘制程序流程图开始输入两个字符串string1和string2比较是否相同相同返回match 不相同返回no match结束四:实验步骤步骤1:可以用汇编程序edit在磁盘上建立如下源程序ex.asm步骤2:源程序建立后,用汇编程序masm对汇编程序ex.asm进行汇编,汇编正确后产生二进制目标文件ex.obj步骤3:汇编程序已产生出二进制的目标文件,但obj文件不是可执行文件还必须使用连接程序(link)将obj文件转化为可执行的exe文件。
步骤4:在建立了exe文件后,就可以直接从dos执行程序。
另一种调试程序的方法是使用debug程序,调用如下:C:\Users\yumin>debug EX.EXE此时,debug已将执行程序装入内存,可直接用g命令运行程序-g五:实验代码DSEG SEGMENTSTRING1 DB ‘move the cursor backward’STRING2 DB ‘move The cursor backward’MESS1 DB ‘Match!’,0dh,0ah,’$’MESS2 DB ‘No Match!’,13,10,’$’DSEG ENDSCSEG SEGMENTMAIN PROC FARASSUME CS:CSEG,DS:DSEG,ES:DSEGSTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DSEGMOV DS,AXMOV ES,AXLEA SI,STRING1 LEA DI,STRING2 CLDMOV CX,24REPZ CMPSBJZ MATCHLEA DX,MESS2 JMP SHORT DISP MATCH:LEA DX,MESS1 DISP:MOV AH,9INT 21HRETMAIN ENDPCSEG ENDSEND START实验二:用DEBUG编程:使用堆栈段将AX和BX的内容进行交换——设堆栈指针SP=2000H,AX=3000H,BX=5000H;编一程序段将AX和BX的内容进行交换。
计算机组成与汇编语言(实验报告)内容: 实验一、六、七、八院系专业:计算机学院计算机科学与技术姓名:xxxxxxxxx学号:*******xxxxx完成时间:2012年12月1日计算机组成与汇编语言实验报告printf("输入的二进制数不正确!!");break;}}}if(a[15]=='1')s++;for(i=1;i<16;i++){if(a[15-i]=='1')s+=(1<<i);}printf("二进制: ");puts(a);printf("对应的十进制为: ");printf("%d\n",s);}程序1运行结果:实验情况与体会:运行过程中出现过不能判断是否输错的情况以及权位判断有误等情况,经过思考和修改后修改正确,说明理解好二进制与十进制之间的转换过程很重要。
编程过程中主要碰到的问题是,不够十六位的时候要在前面补零。
转换方法主要是除二求余的方法。
注:篇幅不够,可以另外附页。
计算机组成与汇编语言实验报告姓名xxxx 学号2011004xxxx 计分专业软件工程班级xxxxx 实验日期2012年 12 月 1日实验名称实验六分支结构程序设计实验目的●熟悉有符号定点数的表示。
●掌握原码、补码、反码之间的相互转换程序设计。
实验内容说明:该程序中X=23,Y=45,他们之差的绝对值为22,用16进制表示为0016H,即图中显示的结果2.调试程序2:DATA SEGMENTADD AL, 07HLP4: ADD AL, 30H ;将低四位转化为相应的ASCII码并以字符形式输MOV DL, ALMOV AH, 2INT 21HMOV AH, 4CHINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。
上机实验过程:说明:求出三个数里面的最大数73;3. 编写程序1:编程实现从键盘输入一位数字,判断其奇偶性,并在屏幕上输出一个标志,若为奇数,则输出1,否则输出0。
计算机汇编语言实验报告一、实验目的本实验旨在通过编写计算机汇编语言程序,加强对计算机组成原理和汇编语言的理解,同时熟悉实际编写和调试过程。
二、实验内容1.用汇编语言编写一个简单的计算器程序,实现加法和减法操作。
2.编译并运行程序,测试其功能的正确性。
3.运用调试工具进行程序的调试,检查代码的运行流程。
三、实验步骤1.确定程序功能和设计思路:本次实验的目标是编写一个计算器程序,能够对两个数进行加法和减法操作。
我们可以通过定义一些操作码来表示不同的操作,再通过输入不同的操作码来执行相应的操作。
2.编写汇编语言程序:首先,需要定义一些变量和常量来存储输入的数和操作码。
然后,使用汇编语言的运算指令和控制指令来实现加法和减法操作,并将结果存储到指定的变量中。
最后,使用输出指令来显示结果。
3.编译并运行程序:将汇编语言程序编译为机器码,并通过计算机的指令集执行程序。
4.调试程序:利用调试工具,逐步执行程序,检查代码的运行流程和结果的正确性。
如有错误,进行适当的修改和调试。
5.测试功能和性能:使用不同的数和操作码进行测试,验证程序的功能和正确性。
四、实验结果经过编写、编译和调试,我们成功实现了一个简单的计算器程序。
程序能够根据输入的操作码,对两个数进行加法和减法操作,并将结果显示出来。
经过多次测试,程序的功能、正确性和性能都符合预期要求。
五、实验感想通过本次实验,我们对计算机组成原理和汇编语言有了更深入的理解。
在编写程序的过程中,我们发现汇编语言相比高级语言更加底层,需要考虑更多的细节和机器指令的使用。
同时,我们也意识到了调试的重要性,调试工具能够帮助我们分析和修正代码的错误,提高程序的质量。
六、实验总结通过本次实验,我们对计算机汇编语言的应用有了更深入的了解。
我们掌握了汇编语言程序的基本结构和语法规则,学会了使用汇编语言指令进行计算和控制。
同时,我们也提升了调试和测试的能力,加深了对计算机组成原理和汇编语言的理解。
福建农林大学金山学院实验报告系:信息与机电工程专业:电子信息工程年级:2013班级:3姓名:单瑞学号:136710101实验课程:汇编语言实验室号:金综B705 实验时间: 2015/6/12 指导教师签字:刘永芬成绩:班实验三分支循环程序设计1.实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。
2.实验环境实验的硬件环境是:IBM— PC机及其兼容机实验的软件环境是:操作系统: DOS2.0 以上;调试程序: ;文本编程程序: EDIT.EXE、WPS.EXE;宏汇编程序: MASM.EXE(或 ASM .EXE);连接装配程序: LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1.有10 个数,统计正数的个数,存放在变量M 中中。
经过汇编后,形成EXE文件。
在DEBUG中,先用G=0 命令执行程序,用D命令查看M单元的内容,会发现结果不正确。
用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL 寄存器中值的变化是否正确。
( AL 寄存器中存放正数的个数)DSEG SEGMENTMSGDB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOVAX, DSEGMOVDS, AXMOVCX, 10MOVAL, 0LEA SI, MSGL1:MOVBL, [SI]CMP BL, 0JBE NEXTINC ALNEXT: INCSILOOP L1MOVM, ALMOVAL, 0MOVAH, 4CHINT21HCSEG ENDSENDSTART2.数据段中是一组无符号数,将最小数存放在 M单元中。
按上题方法查找一处逻辑错误。
DSEG SEGMENTMSGDB 13, 15, 7, 25, 24M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOVAX, DSEGMOVDS, AXMOVCX, 4MOVAL, MSGMOVSI, OFFSET MSG+1L1:CMP AL, [SI]JB NEXTMOVAL, [SI]NEXT: LOOP L1MOVM, ALMOV AL, 0MOVAH, 4CHINT21HCSEG ENDSEND START3.编程:在首地址为 BUF开始的内存单元中存有 10 个字节数,求其中 0 的个数,并将结果存于RESULT中。
课程实验报告课程名称:汇编语言程序设计实验实验名称:实验五汇编语言与C语言混合编程实验时间: 2016-4-19,14:00-17:30 实验地点:南一楼804室74号实验台指导教师:张勇专业班级:计算机科学与技术201409班学号:U201414813 姓名:唐礼威同组学生:无报告日期:2016年4月23日原创性声明本人郑重声明:本报告的内容由本人独立完成,有关观点、方法、数据和文献等的引用已经在文中指出。
除文中已经注明引用的内容外,本报告不包含任何其他个人或集体已经公开发表的作品或成果,不存在剽窃、抄袭行为。
特此声明!学生签名:日期:成绩评定指导教师签字:日期:目录1实验目的与要求 (1)2实验内容 (1)3实验过程 (2)3.1任务1 (2)3.1.1设计思想及存储单元分配 (2)3.1.2流程图 (3)3.1.3源程序 (3)3.1.4实验步骤 (6)3.1.5实验记录 (6)3.2任务2 (7)3.2.1设计思想及存储单元分配 (7)3.2.2流程图 (8)3.2.3源程序 (8)3.2.4实验步骤 (11)3.2.5实验记录 (11)4体会 (11)参考文献 (12)1实验目的与要求(1)掌握汇编语言程序与C语言程序混合编程的方法;(2)熟悉C编译器的基本优化方法;(3)了解C语言编译器的命名方法,主、子程序之间参数传递的机制。
2实验内容任务1:在C 语言程序中嵌入汇编语言指令语句序列对于实验二的程序进行改造,主控程序、以及输入输出等功能用C语言实现,学生姓名搜索和成绩计算用C程序中嵌入汇编指令语句序列的方式实现。
任务2:在C语言程序中调用汇编语言实现的函数对于实验二的程序进行改造,主控程序、以及输入输出等功能用C语言实现,学生姓名搜索和成绩计算用独立的汇编语言子程序的方式实现;在C语言程序中调用汇编语言子程序。
要求:(1)在不同的C语言开发环境中实现与汇编语言程序的混合编程,其操作方法有可能是不同的。
汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际操作和编程实践,深入理解汇编语言的基本概念、指令系统和编程方法,提高对计算机底层硬件操作的认识和编程能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据传送与算术运算实现两个 16 位整数的加法和减法运算,并将结果存储在指定的内存单元中。
使用不同的数据传送指令,如 MOV、PUSH、POP 等,将数据在寄存器和内存之间进行传输。
2、逻辑运算与移位操作对给定的 8 位二进制数据进行逻辑与、或、异或运算,并观察结果。
执行移位操作,包括逻辑移位(SHL、SHR)和算术移位(SAL、SAR),理解移位对数据的影响。
3、分支与循环结构使用条件跳转指令(如 JZ、JE、JC 等)实现根据不同条件执行不同代码段的功能。
编写循环结构程序,如使用 LOOP 指令实现对数组元素的求和操作。
4、子程序调用定义一个子程序,实现特定的功能,如计算一个数的阶乘。
在主程序中调用子程序,并传递参数和获取返回值。
四、实验步骤1、数据传送与算术运算实验首先,在代码编辑器中编写汇编代码,定义数据段和代码段。
在数据段中初始化两个 16 位整数,例如 MOV WORD PTR DATA1, 1000H 和 MOV WORD PTR DATA2, 2000H 。
在代码段中使用 ADD 和 SUB 指令进行加法和减法运算,如 ADD WORD PTR RESULT_ADD, DATA1 和 SUB WORD PTRRESULT_SUB, DATA2 。
编译和链接代码,生成可执行文件。
运行程序,查看内存中存储的运算结果。
2、逻辑运算与移位操作实验类似地,定义数据段和代码段。
在数据段中初始化 8 位二进制数据,如 MOV AL, 01010101B 。
在代码段中使用AND、OR、XOR 指令进行逻辑运算,以及SHL、SHR、SAL、SAR 指令进行移位操作。
合肥工业大学计算机与信息学院实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一.实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。
2、掌握8086/8088的寻址方式及多字节数据的处理方法。
二.实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。
2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。
要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。
三.实验过程和程序1、启动DOS操作系统2、运行程序(若当前盘为C)C:>DEBUG↙– ;(“–”为DEBUG提示符,仅当屏幕出现该提示符后,才可输入DEBUG 命令)3、用“A”命令编辑和汇编源程序–A ↙186E:0100 MOV AX,[0200]↙186E:0103 MOV BX,[0202]↙186E:0107 ADD AX,[0204]↙186E:010B ADC BX,[0206]↙186E:010F MOV [0208],AX↙186E:0112 MOV [020A],BX↙186E:0116 ↙4、用“U”命令反汇编验证源程序–U CS:0100↙186E:0100 A10002 MOV AX,[0200]186E:0103 8B1E0202 MOV BX,[0202]186E:0107 03060402 ADD AX,[0204]186E:010B 131E0602 ADC BX,[0206]186E:010F A30802 MOV [0208],AX186E:0112 891E0A02 MOV [020A],BX186E:0116注意:●检查源程序是否有错误,若有则返回到第3步用“A 地址”命令进行修改,直到程序无错误。
汇编语言实验报告班级学号学生姓名提交日期成绩实验1-1如下:用E命令将指令写入内存:用A命令将指令写入内存:实验1-2代码如下:用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。
如图:实验1-3:用D命令输入内存fff0h~fffffh,则可看到:生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有:在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。
实验1-4代码如下:内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节实验2-1:(按实验结果填空)Mov ax,ffffMov ds,axMov ax,2200Mov ss,axMov sp,0100Mov ax,[0];ax=5BEAAdd ax,[2];ax=5CCAMov bx,[4];bx=30F0Add bx,[6];bx=6026Push ax;sp=00FE;修改的内存单元的地址是2200:00FE内容是5CCA Push bx;sp=00FC;修改的内存单元的地址是2200:00FC内容是6026 Pop ax;sp=00FE;ax=6026.Pop bx;sp=0100;bx=.5CCAPush[4];sp=00FE;修改的内存单元的地址是2200:00FE内容是30F0 Push[6];sp=00FC;修改的内存单元的地址是2200:00FC内容是2F36实验截图如下:实验2-2(分析问答实验)答:因为T命令是单步中断,我们在后面学习后知道,CPU执行中断时会保留现场,即将标志寄存器,CS,IP等入栈,而实验中栈的地址正好是要查询的内存地址,所以即便未对内存单元进行写入命令,但里面的值会因为CPU要保留现场自动被改了实验3(1)代码:ASSUME CS:CODES CODES SEGMENT START:mov ax,2000hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxMOV AH,4CHINT21HCODES ENDSEND START(2)debug跟踪:(3)用debug跟踪查看PSP中的内容:可见PSP的头两个字节是CD20,与书上的一致实验4-1代码如下:ASSUME CS:CODESCODES SEGMENTSTART:mov ax,0mov ds,axmov bx,200hmov cx,64s:mov[bx],alinc alinc bxloop sMOV AH,4CHINT21HCODES ENDSEND START实验4-1运行图如下:实验4-2代码如下:ASSUME CS:CODESCODES SEGMENTSTART:mov ax,200hmov ds,axmov bx,0mov cx,64s:mov[bx],bxinc bxloop sMOV AH,4CHINT21HCODES ENDSEND START运行结果同实验4-1的一样实验4-3(补全代码)ASSUME CS:CODESCODES SEGMENTSTART:mov ax,csmov ds,axmov ax,20hmov es,axmov bx,0mov cx,16hs:mov al,[bx]mov es:[bx],alinc bxloop sMOV AH,4CHINT21HCODES ENDSEND START因为要将代码复制到0:200处,则必须知道代码的地址,和代码的长度,代码的地址在cs和IP中,代码的长度可以编译后用U命令查看后确定,这个之前随便打一个数就可以,不影响代码的长度,因为那个数占的空间和真实的长度一样,所以用U命令后在改过来即可实验4-3的运行图如下:实验5-1代码如下:DATAS SEGMENTdw0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987hDATAS ENDSSTACKS SEGMENTdw0,0,0,0,0,0,0,0STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,stacksMOV ss,AXmov sp,16mov ax,datasmov ds,axpush ds:[0]push ds:[2]pop ds:[2]pop ds:[0]MOV AH,4CHINT21HCODES ENDSEND START实验5-1运行图如下:①CPU执行程序后,程序返回前,data段中的数据为多少?答:不变如上图②CPU执行程序后,程序返回前,CS=144Ch,SS=144Bh,DS=144Ah。
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
实验一查看CPU和内存用机器指令和汇编指令编程
一、实验目的
1.掌握debug的使用方法,会用基本的D,R命令查看、显示内存和寄存器
2.了解汇编指令编程的方法。
二、实验任务
1检查在存储器低端的BIOS数据区的内容。
(1)检查串行与并行端口
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2 考察ROM BIOS
目的:检查在存储器高端的ROM BIOS中的数据。
(1)检查版本通告
(2)检查ROM BIOS数据
3.用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改。
三、实验结果及分析
1、检查在存储器低端的BIOS数据区的内容
(1)检查串行与并行端口
说明:检查后发现有四个串行端口,分别是03F8、02F8、03E8、02E8;并行端口也有四个,分别是03BC、03BC、0378、0278、9FC0
(2)检查系统设备
(3)检查键盘Shift状态
(4)检查显示状态
2、考察ROM BIOS (1)检查版本通告
(2)检查ROM BIOS数据
3、用D、R命令查看、显示内存和寄存器,可对寄存器内容进行修改
四、实验总结(心得、体会)
1、通过对检查在存储器低端的BIOS数据区的内容的查看,可以了解计算机的各种状态,而考察ROM BIOS可以鉴定计算机的出厂信息。
2、通过用D、R命令查看、显示内存和寄存器,可以了解计算机运行的过程步骤,并且可以通过偏移地址读取内容。
3、在读取时需要注意的是,在DEBUG显示中是低位至高位的显示,而我们需要的是高位至低位的显示方式,所以在操作时对于双字节的读取,需要将前后字节地址内容互换。
汇编实验一实验报告一、实验目的本次汇编实验一的主要目的是熟悉汇编语言的基本语法和编程环境,通过实际编写和调试简单的汇编程序,加深对计算机底层工作原理的理解,并提高解决问题的能力。
二、实验环境1、操作系统:Windows 102、编程工具:MASM(Microsoft Macro Assembler)三、实验内容1、数据存储与操作定义不同类型的数据变量,如字节(BYTE)、字(WORD)和双字(DWORD)。
对这些数据进行赋值、运算和输出。
2、流程控制使用条件跳转指令(如 JE、JNE 等)实现简单的分支结构。
运用循环指令(如 LOOP )编写重复执行的代码段。
3、子程序调用编写具有特定功能的子程序,并在主程序中进行调用。
四、实验步骤1、数据存储与操作实验在代码中使用`DB` (定义字节)、`DW` (定义字)和`DD` (定义双字)指令定义变量,例如:```assemblyDATA1 DB 10HDATA2 DW 2000HDATA3 DD 40000000H```对定义的数据进行加法、减法等运算,并将结果存储在新的变量中。
使用`MOV` 指令将数据输出到屏幕上。
2、流程控制实验设定条件,根据条件的满足与否执行不同的代码段。
例如:```assemblyMOV AX, 10MOV BX, 20CMP AX, BXJE EQUALJNE NOT_EQUALEQUAL:;执行当 AX 等于 BX 时的代码MOV DX, 'E'JMP END_CONDITIONNOT_EQUAL:;执行当 AX 不等于 BX 时的代码MOV DX, 'N'END_CONDITION:;后续的通用代码```使用循环指令实现重复操作,如计算 1 到 10 的累加和:```assemblyMOV CX, 10MOV AX, 0LOOP_START:ADD AX, CXLOOP LOOP_START```3、子程序调用实验编写一个计算两个数之和的子程序,例如:```assemblySUM PROCMOV AX, BP + 4ADD AX, BP + 6RETSUM ENDP```在主程序中调用该子程序,并传递参数进行计算。
汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同’,否则显示‘No match’。
则显示‘Match在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1’和‘Nomatch’。
再代码段比较字符串string1和string2,和mess2,分别代表‘Match通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘No match’。
二、调试说明再EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。
再用Debug进行调试。
其中常用到的指令有:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存用器和修改寄存器的值,-q命令用来退出debug程序。
在这些命令的后面加上地址,可以将命令执行到相应的地方。
如用-g指令运行程序后,再用-u指令显示程序的执行借给如下:若将string2改为'Move the cursor backwards.',程序的其他部分不做改动,执行结果:若将mov cx,25语句改成mov cx,24,结果为:此时少做了一次循环,得到的结果就不正确了。
实验二、用DEBUG编程:使用堆栈段将AX和BX的内容进行交换等一、程序说明本实验包括两个部分,第一个部分是将AX和BX的内容进行交换,并用堆栈作为两寄存器交换内容的中间存储单元;第二部分是用DEBUG的命令将存储器偏移地AH, 0BH,0CH,0DH,0EH。
在DEBUG状态址300H,304H连续单元顺序装入0 下送入给出的程序中。
第一个程序先将AX的内容进栈,然后将BX的内容赋给AX,再将出栈的内容赋给BX即可。
第二个程序是在进入debug后,用-a指令输入给出的程序,然用-r指令安要求修改内存的内容,再用-t指令逐步执行每条指令,看修改的内存内容对指令执行结果的影响。
实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUF DB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FHCN EQU $-BUFDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: PUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV BX,OFFSET BUFMOV CX,CNDEC CXMOV AL,[BX]INC BXLP: CMP AL,[BX]JBE NEXTMOV AL,[BX]NEXT: INC BXDEC CXJNZ LPMOV AH,4CHINT 21HCODE ENDSEND START键入以下命令:C:\>EDIT ABC.ASM此时屏幕的显示状态如图1所示。
图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM对源程序文件进行汇编,其操作过程如图2所示。
福建农林大学金山学院实验报告系:信息与机电工程专业:电子信息工程年级: 2013 班级: 3班姓名:单瑞学号: 136710101 实验课程:汇编语言实验室号:金综B705实验时间:2015/6/12指导教师签字:刘永芬成绩:实验三分支循环程序设计1.实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。
2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录1.有10个数,统计正数的个数,存放在变量M中中。
经过汇编后,形成EXE文件。
在DEBUG中,先用G=0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。
用单步执行命令T=0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确。
(AL寄存器中存放正数的个数)DSEG SEGMENTMSG DB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV AL, 0LEA SI, MSGL1: MOV BL, [SI]CMP BL, 0JBE NEXTINC ALNEXT: INC SILOOP L1MOV M, ALMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START2.数据段中是一组无符号数,将最小数存放在M单元中。
按上题方法查找一处逻辑错误。
DSEG SEGMENTMSG DB 13, 15, 7, 25, 24M DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 4MOV AL, MSGMOV SI, OFFSET MSG+1L1: CMP AL, [SI]JB NEXTMOV AL, [SI]NEXT: LOOP L1MOV M, ALMOV AL, 0INT 21HCSEG ENDSEND START3.编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。
4.编程:∑-=* =81iiiBAY,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。
4.算法描述及实验步骤1.操作步骤:(1)编写源程序,并命名为1.ASM保存到D盘m文件夹中;(2)在DOS状态下,进入MASM目录;(3)输入命令:MASM 1.ASM;(4)在系统出现的提示中输入:object filename[.obj]:按回车键;source listling[nul.lst]:输入:1;cross-reference [nul.crf]:按回车键;(5)系统没有提示错误,汇编完成,产生.obj文件;(6)输入:LINK 1.OBJ;run file [.exe]:按回车键。
list file [nul.map]:按回车键。
libraries [.lib]:按回车键。
(7)没有提示错误,汇编过程结束,产生.EXE可执行文件;(8)输入DEBUG 1.EXE;使用G命令执行程序。
使用D命令查看M单元的内容。
使用T命令查看分步执行过程并找出错误原因。
使用Q命令退出DEBUG。
(9)修改程序并保存。
(10)重复上述1至8步。
2.操作步骤:(1)编写源程序,并命名为2.ASM保存到D盘m文件夹中;(2)在DOS状态下,进入MASM目录;(3)输入命令:MASM 2.ASM;(4)在系统出现的提示中输入:object filename[.obj]:按回车键;source listling[nul.lst]:输入:2;cross-reference [nul.crf]:按回车键;(5)系统没有提示错误,汇编完成,产生.obj文件;(6)输入:LINK 2.OBJ;run file [.exe]:按回车键。
list file [nul.map]:按回车键。
libraries [.lib]:按回车键。
(7)没有提示错误,汇编过程结束,产生.EXE可执行文件;(8)输入DEBUG 2.EXE;使用G命令执行程序。
使用D命令查看M单元的内容。
使用T命令查看分步执行过程并找出错误原因。
使用Q命令退出DEBUG。
(9)修改程序并保存。
(10)重复上述1至8步。
3.程序算法:DSEG SEGMENTBUF DB 4, -2, -6, 0, 5, 0, 8, 0, 5, 6RESULT DB ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 10MOV AL, 0LEA SI, BUFL1: MOV BL, [SI]CMP BL, 0JNZ NEXTINC ALNEXT: INC SILOOP L1MOV RESULT, ALMOV AL, 0MOV AH, 4CHINT 21HCSEG ENDSEND START操作步骤:(1)编写源程序,并命名为3.ASM保存到D盘m文件夹中;(2)在DOS状态下,进入MASM目录;(3)输入命令:MASM 3.ASM;(4)在系统出现的提示中输入:object filename[.obj]:按回车键;source listling[nul.lst]:输入:3;cross-reference [nul.crf]:按回车键;(5)系统没有提示错误,汇编完成,产生.obj文件;(6)输入:LINK 3.OBJ;run file [.exe]:按回车键。
list file [nul.map]:按回车键。
libraries [.lib]:按回车键。
(7)没有提示错误,汇编过程结束,产生.EXE可执行文件;(8)输入DEBUG 3.EXE;使用G命令执行程序。
使用U命令查看程序执行过程。
使用D命令查看RESULT单元的内容。
使用Q命令退出DEBUG。
4 .程序算法:DSEG SEGMENTNUM1 DB 4, 2, 6, 5, 8, 3, 6NUM2 DB 5, 9, 8, 4, 2, 3, 7REST DW ?DSEG ENDSCSEG SEGMENTASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEGMOV DS, AXMOV CX, 7MOV AL, 0MOV DX, 0LEA SI, NUM1LEA DI, NUM2L1: MOV BL, [SI]MOV AL, [DI]MUL BLADD DX, AXINC SIINC DINEXT: LOOP L1MOV REST,DXMOV AH, 4CHINT 21HCSEG ENDSEND START实验步骤:(1)编写源程序,并命名为4.ASM保存到D盘m文件夹中;(2)在DOS状态下,进入MASM目录;(3)输入命令:MASM 4.ASM;(4)在系统出现的提示中输入:object filename[.obj]:按回车键;source listling[nul.lst]:输入:4;cross-reference [nul.crf]:按回车键;(5)系统没有提示错误,汇编完成,产生.obj文件;(6)输入:LINK 4.OBJ;run file [.exe]:按回车键。
list file [nul.map]:按回车键。
libraries [.lib]:按回车键。
(7)没有提示错误,汇编过程结束,产生.EXE可执行文件;(8)输入DEBUG 4.EXE;使用G命令查看执行程序。
使用U命令查看程序执行过程。
使用D命令查看REST单元的内容。
使用Q命令退出DEBUG。
5.调试过程1.无错误。
2.无错误。
3.无错误4.将REST拼写成了RSET导致错误。
6.实验结果1.从下面截图可以看见:原来的程序执行后,M的值为9,结果出错。
因为原程序中JBE为无符号数的跳转指令,从下面截图中可以看出,当负数的补码存在寄存器中时,直接与0比较大小,AL的值加1,导致错误将程序中的JBE改为JLE后,从下面的截图中看出M中的值为6,结果正确。
2.从下面截图中可以看出,原来的程序执行后,M中的值为13,结果出错。
从下面截图中可以看出:整个循环语句中没有将SI移动的语句,所有循环语句全部是13与13比较,导致结果出错,将NEXT后面 LOOP L1前面加上一句INC SI即可。
修改后的程序执行后,M中的值为7,结果正确。
3.从下面的截图可以看出当BUF单元中的数为 4,-2,-6,0,5,0,8,0,5,6时,RESULT单元中的结果为3。
4.从下面的截图可以看出,当NUM1中的数值为4,2,6,5,8,3, 6,NUM2中的数值为5,9,8,4,2,3,7时,REST单元中的结果为173.7. 总结从此次实验中学会了调试程序,查找逻辑错误;学会了分支语句的编程和调试;学会了循环语句的编程和调试;学会了LOOP、JB、JBE、JNZ、INC等指令的应用等。