期末来了。跑啊炒啊作业题来的汇编实验一
- 格式:doc
- 大小:1.58 MB
- 文档页数:14
实验一 MASM for Windows 环境下的汇编语言编程环境使用一、实验目的(1)掌握MASM for Windows 环境下的汇编语言编程环境使用;(2) 掌握汇编语言程序设计的基本流程;(3) 掌握8086/8088基本指令的使用方法和功能;(4) 熟练掌握DEBUG的使用方法。
二、实验基本原理运行“调试”命令,在提示符“-”下才能输入命令,在按“回车”后该命令才开始执行;命令是单个字母,命令和参数的大小写可混合输入:(1) DEBUG 使用的数以十六进制来表示;(2) DEBUG 中的命令不区分大小写。
1、R命令格式1:R功能1:显示所有寄存器中的内容。
格式2:R 寄存器名功能2:显示修改寄存器的内容。
2、D命令用 DEBUG 的 D 命令查看内存的内容;功能: 显示内存单元内容。
格式一:D起始位置DEBUG从起始位置显示128个字节的内容。
输入命令D 0C0B:100格式二:D 起始位置结束位置DEBUG 从起始位置一直显示到结束位置格式三: D 起始位置 L 长度DEBUG 从起始位置开始显示指定长度的内容3、E命令用 DEBUG 的 E 命令改写内存的内容。
格式一:E 起始地址字节值表功能:用字节值表中的值替换从“起始地址”开始的内存单元内容。
格式二:E 起始地址功能:采用提问的方式一个一个地改写内存单元的内容4、A命令功能:输入汇编指令。
格式:A 起始地址首先用A命令以汇编语言的形式输入程序,以D命令显示内存,输入的是汇编指令,DEBUG 把它们翻译成机器指令,以机器码写入内存。
5、U命令功能:反汇编,显示机器码所对应的汇编指令。
格式1:U[地址]功能1:从指定地址开始反汇编格式2:U 地址范围功能2:对指定的地址范围进行反汇编。
6、T命令格式:T[=地址]功能:从指定地址起执行一条语句后停下来,显示所有寄存器的内容及标志位的值与下一条将要执行的指令。
格式:T[=地址][x]功能:从指定的地址开始跟踪x 条指令。
汇编实验报告姓名:班级:学号:实验一熟悉汇编程序使用及调试一、实验目的1、熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序的过程2、熟悉DEBUG中一些常用命令的功能和使用。
二、实验内容1、查找资料,掌握利用宏汇编工具Masm建立,汇编,连接,调试程序(也可以选择集成开发环境,就是我上课讲的工具)2、用记事本建立汇编源文件,程序可以在教材中随便选一个完整程序例子,或下面的参考程序,该程序的功能是在屏幕上显示出一个字符串。
读懂该程序。
3、用DEBUG调试上述生成的可执行文件,分别用U命令查看程序中的指令机器码,用D命令查看数据区中的字符串,用R命令查看寄存器,用T命令执行单步调试,用G 命令设置执行断点。
参考程序如下:data segmentstring db "Welcome to Network Engineering 10 Classes!$"data endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,datamov ds,axmov dx,offset stringmov ah,9int 21hmov ah,4chint 21hcode endsend start三、调试要求:1、汇编源程序经过汇编,连接无误后,运行得到的可执行程序,观察并记录程序运行结果。
2、如果有错误提示,记录并弄懂其中含义,改正错误后在经汇编,连接后得到并记录运行结果3、用DEBUG调试,注意观察指令的形式,数据排列,寄存器显示,特别是标志寄存器内容4、以上内容做好记录,形成实验报告。
四、实验步骤1、用文本编辑器输入汇编程序源程序,存盘,注意文件名为*.asm2、用MASM汇编,生成相应的.OBJ文件3、用LINK连接,生成相应的.EXE文件4、记录调试过程的一切问题,解决方法以及运行结果5、调试过程中用DEBUG调试命令五、调试结果stack没有定义,注释掉,ss:stacku命令反汇编d命令查看数据区中的字符串中间是内存单元内容,每行显示16个字节的内容,右边以字符的形式显示内存单元的值。
课程名称:汇编语言程序设计实验名称:DEBUG调试程序的使用姓名:胡彬彬专业:计算机科学与技术班级:计算机14级2班学号:1404010210计算机科学与技术学院实验教学中心2016 年 4 月12 日实验项目名称:DEBUG调试程序的使用一、实验目的1.熟悉 DEBUG 调试程序中的常用命令。
2.学会在 DEBUG 下调试运行汇编语言源程序。
二、实验内容1.熟悉DEBUG常用命令的使用: A、U、D、E、R、G、T、L、W、Q常用命令。
2.在DEBUG下编写汇编语言程序,实现多字节(5个字节)十进制加法。
三、实验用设备仪器及材料硬件:计算机软件:DEBUG调试软件四、实验原理及代码-A010013E0:0100 MOV BX,013013E0:0103 MOV SI,014013E0:0106 MOV CX,513E0:0109 MOV AL,[BX]13E0:010B ADD AL,[SI]13E0:010D DAA13E0:010E MOV [BX+20],AL13E0:0111 INC BX13E0:0112 INC SI13E0:0113 LOOP 010913E0:0115五、实验操作步骤1.在【开始菜单】\【程序附件】\【命令提示符】下,进入 DOS环境。
或在【开始菜单】\【运行】下,直接键入cmd进入。
2.在DOS目录下启动DEBUG。
3.熟悉DEBUG常用命令,详细记录每一步所用的命令及查看结果的方法和具体结果。
4.在DEBUG下编写程序,实现多字节十进制加法实验。
六、实验结果分析。
实验一汇编语言程序设计上机及debug的使用一、实验目的及要求1.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
2.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、实验内容一,.编辑一个源程序经汇编,链接成可执行程序,然后debug,练习各种指令的用法;编辑源程序:开始汇编如图:执行程序:DEBUG:采用执行过程命令P进行调试,g输出结果;二,,DEBUG的使用;1.进入DEBUG,使用A命令将源程序写入内存并汇编,然后使用G命令执行程序,接着用D命令观察运算结果后,再用U命令反汇编,用Q命令退出DEBUG,返回DOS提示符。
用A 指令写入程序,用E命令将0102H, 0304H分别写入 0120H和0122H单元如图:用G执行程序,用D输出结果:用U命令反汇编程序和用Q退出程序如图:2.进入DEBUG,先显示200H处开始的一片单元,接着用E命令将一段机器代码指令写入200H~208H,然后用G命令执行,再用U命令反汇编。
具体操作如下:(1)首先进入DEBUG,接着显示200H处开始的一片单元(如果不指明显示范围,则默认显示128个存储单元),如图12所示。
_d 200(2)用E命令将机器代码指令写入200H开始的内存单元,如图13所示。
接着观察由200H开始的单元,确实写入的机器指令代码,如图14所示。
(3)用G命令从200H处开始执行程序,如图15所示。
执行结果是在屏幕上显示字符“3”。
(4)用U命令反汇编,显示200H处存放的程序,如图:3.进入DEBUG,用A命令写入程序,接着用R命令显示状态,并用T命令单条执行,注意在执行命令的同时观察相应寄存器的状态。
具体操作如下:(1)进入DEBUG,用A命令写入汇编源程序,Ctrl+C退出A命令,如图:(2)用R命令显示寄存器状态,可以只显示AH和AL寄存器状态,也可以显示所有寄存器状态,如图18和图19所示。
由图中可以看出,在没有执行指令之前,AH和AL寄存器没有被赋值,其值为0。
汇编语言程序设计实验报告实验名称上机过程及顺序结构与分支结构程序设计实验班级学号姓名日期成绩评阅人软件学院一、实验目的与意义1、掌握汇编语言程序设计的基本方法和技能;2、熟练掌握使用全屏幕编辑程序EDIT编辑汇编语言源程序;3、熟练掌握宏汇编程序MASM的使用;4、熟练掌握连接程序LINK的使用;5、学习数据传送及算数和逻辑运算指令的用法;6、掌握分支程序的结构;7、掌握分支程序的设计、调试方法;8、熟悉在PC机上建立、汇编、连接、调试和运行8086汇编语言程序;二、实验环境操作系统:Windows XP调试软件:Edit Plus 3,MASM 5.0上机地点:综合楼311三、实验的预习内容(1)熟悉上机练习过程和伪指令实验实验预习内容:在实验前,充分熟悉Edit Plus 3的环境以及配置方法,熟悉各种debug 的常用指令:U、D、T、P、G、A、E及R命令的使用和含义,了解数据传送指令和算数以及逻辑运算指令的用法,在理论上了解数据的存储情况以及DD,DB,DW伪指令的用法和含义。
实验思路:按照书上的程序打入代码,进行汇编、连接和运行程序查看此时程序的运行情况,之后进入debug界面,分别使用U、D、T、P、G、A、E及R命令等常用指令,可查看此时的程序的执行状况以及此时寄存器的存储情况以及对于内存的使用情况。
程序一流程图:程序二流程图:(2)顺序结构程序设计实验实验预习内容:在实验前了解十进制,十六进制和ASCII 码之间的转换,了解如何从键盘中输入字符和回车换行,以及在屏幕中显示的汇编指令。
实验思路:从键盘中输入要计算的数字,将其进行平方运算,利用计算得到数字,了解十进制数字、十六进制数字与其对应ASCII 码的转换方法,将数字显示到屏幕上。
程序流程图:(3)分支程序设计实验实验预习内容:在实验前了解分支结构的特点,明白跳转指令和程序转移指令的使用的使用,以及两个数进行比较后各个标志位的变化。
《汇编》实验报告一、实验内容1、试编制一程序,计算下列公式的值,并存放在FUN存储单元中。
F=[10*(x+y)-3*(z-1)]/22、试编制一程序,从键盘输入一字符串,并将该字符串从屏幕上显示出来。
例如:显示’hello computer!’二、实验目的及要求1、实验目的:1.了解熟悉DEBUG命令;2.熟悉数据传送指令、算术运算指令、逻辑指令、段寄存器装在的内容;3.掌握简单的汇编语言程序编写与调试。
2、实验要求:1.仔细阅读有关DEBUG命令的内容,对有关命令,要求事先准备好使用的例子;2.阅读数据传送指令、算术运算指令、逻辑指令、段寄存器装在的内容;3.用DEBUG的有关命令调试本实验中的求多项式结果程序段与从键盘输入一字符串并将该字符串从屏幕上显示出来的程序段。
三、设计分析第一题的设计分析:一、实现变量的三个步骤:①、在数据段中定义变量并赋予初值,为计算多项式做准备;②、利用算术指令ADD、SAL、SUB、INC、DEC、SAR实现多项式的运算。
二、计算变量与计算变量结果的存放:①、代码段第三条指令开始计算变量,倒数第三条指令存放变量的结果,即多项式的计算终止;②、变量的奇数倍用ADD与SAL指令完成,而偶数倍只需SAL指令完成;③、注意MOV指令的操作数不能同时为存储单元。
第二题的设计分析:一、实现字符串输入,需要分成三个步骤:①、在数据段中定义一个缓存区为存放字符串做准备;②、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;③、在输入的字符串尾加上‘$’字符,以作为输出结束条件。
二、实现字符串输出,则需要注意的问题是:①、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;②、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。
四、程序的调试过程第一题:第二题:五、运行结果分析第一题的运行结果分析:第二题的运行结果分析:六、附件:带注释的源程序第一题的源代码:TITLE EXAMPLE PROGRAMDATA SEGMENTVARX DW 123H ;定义X变量VARY DW 456H ;定义Y变量VARZ DW 789H ;定义Z变量FUN DW ? ;定义存放结果的存储单元DATA ENDSSTACK1 SEGMENT PARA STACKDW 20H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXMOV AX,VARX ;取变量XADD AX,VARY ;计算(X+Y)MOV BX,AXSAL AX,1 ;计算2*(X+Y)SAL AX,1 ;计算4*(X+Y)ADD AX,BX ;计算5*(X+Y)SAL AX,1 ;计算10*(X+Y)MOV BX,VARZ ;取变量ZDEC BX ;计算(Z-1)MOV CX,BXSAL BX,1 ;计算2*(Z-1)ADD BX,CX ;计算3*(Z-1)SUB AX,BX ;计算10*(X+Y)-3*(Z-1) SAR AX,1 ;计算[10*(X+Y)-3*(Z-1)]/2 MOV FUN,AX ;存放结果MOV AH,4CH ;终止用户程序,返回DOS INT 21HCODE ENDSEND START第二题的源代码:DATA SEGMENTN EQU 50MAXLEN DB N ;缓冲区字符的最大长度ACTLEN DB ? ;实际字符个数STRING DB N DUP(?) ;字符空间CR DB 0AH,0DH,'$'DATA ENDSSTACK1 SEGMENT PARA STACKDW 200H DUP(0)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入MOV AH,09H ;字符串输出LEA DX,CR ;回车换行INT 21HMOV BL,MAXLEN+1 ;取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$ MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09H ;字符串输出INT 21HMOV AH,4CH ;终止用户程序,返回DOSINT 21HCODE ENDSEND START。
实验一汇编指令实验一、实验目的1、初步掌握开发环境及ARM软件模拟器。
2、掌握简单的ARM、THUMB汇编指令的使用方法。
3、通过实验观察不同类型指令的工作原理。
二、实验步骤(一)、掌握ARM程序开发环境RealView MDK。
1、在“我的电脑”中新建一个目录,比如:“Exp01”。
(注意:目录尽量建立在自带的U盘上,以防实验工程被还原)2、打开Keil uVision软件,点击菜单中的“File->Project->New uVision Project”选项,启动新建工程向导程序,新建一个uVision工程。
工程文件保存在第1步创建的目录中,工程命名为:“Exp01”。
图1 新建工程向导启动图2 向导开始首先为新建工程命名为:Exp013、新建工程向导的第一步是:选择设备即处理器的选择(Select Device for Target ‘Target1’)。
在对话框的左下方有一个列表,列表中选择“NXP->LPC2138”。
注:LPC2138是实验箱采用的ARM芯片型号。
图3 向导第1步,设置处理器类型点击确定按钮后,向导程序会弹出一个“提示框”。
这个提示框是询问你是否要向工程中添加LPC2000系列处理器的启动代码。
这里可以点击“否”按钮。
注:启动文件在生成可下载的运行文件时是必须的,这里只是测试汇编程序所以不需要启动文件。
图4 添加启动代码4、工程建立完成后,uVision软件的主窗口左边就是工程空间浏览器窗口。
可以看到已经建立好的工程默认处理器名:“Target 1”,默认源文件组名:“Source Group 1”。
图5 新建工程后的主窗口右键列表中的“Target 1”,在弹出菜单中选择“Manage Components”选项。
可以打开“Components, Enviromentand Books”窗口。
这里可以对默认处理器和源文件组重新命名。
图6 “Components, Environment and Books”窗口5、在软件主窗口的工具条上点击“新建图标”,就会新建一个文本文件用于编辑源程序代码。
汇编语言程序设计实验报告课程名称汇编语言程序设计班级姓名学号指导教师汇编语言程序设计实验一DEBUG 程序使用技巧1.寄存器和内存开始Debug 程序。
输入“Q ” 退出程序。
再次启动Debug。
输入“r ”来显示CPU的当前状态和寄存器中的当前内容。
输入“r AX ”和“1234”,AX 寄存器中的内容变为1234。
输入“r DS ”和“2000”,DS 寄存器中的内容变为2000。
输入“d DS:1000 ”来显示数据段中80H 字节数据,把数据抄在这里:输入“f DS:1000 1100 77 ”再显示一次这80H 字节。
判断这条指令的作用是什么?答:从DS:1000地址七,将1100H字节的内容赋值为77H再输入“d 2000:1000 ”来显示数据段中80H 字节数据。
观察与前面的数据有无不同。
输入“d 1900:0100 ”和“d 1ff0:0100 ”来显示两个存储段中的内容。
比较其中2000:0000 段中的数据。
相同段落中的数据相同么?根据你的观察,得出结论,是否程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
答:相同段落中的数据相同, 程序员可以用不同的段起始地址和偏移量组合,把不容内容存入相同的内存段中。
2.输入机器码,使用单步和断点退出Debug,再重新启动Debug。
输入“r ”观察CPU 的状态,下一条指令是什么?答:下一条指令是ADD [BX+SI],AL使用两种方式输入一段程序,第一种方式:直接输入机器码。
输入“u ”来显示程序段中的指令序列。
然后输入“d CS:100 ” 来显示代码段中的数据。
观察显示内容。
“u CS:100 106 ”做反汇编,就是显示出汇编语句。
将这几句汇编语句记录下来:使用输入“r ”观察CPU 的状态,使用“t ”来跟踪程序,直至最后一条指令执行完毕。
注意,跟踪程序前,要让IP 寄存器中的值是100H。
一直监视AX 和IP 寄存器的内容变化,尤其是标志位的变化。
实验一查看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、实验目的熟悉使用宏汇编程序MASM汇编,并运用源程序的方法,掌握使用该方法的上机步骤,并将预先编好的程序上机调试运行。
了解并掌握汇编程序的输入,调试和运行过程。
搞清程序在运行中,寄存器、存储单元以及状态标志的影响变化。
2、实验要求通过对以及上机实验,查看显示结果,熟悉MASM的基本界面以及程序编译运行过程。
3、实验补充Debug 常用命令:A 汇编,直接输入汇编语句R 查看、改变CPU寄存器的内容r 寄存器D 查看内存中的内容 d 段地址:偏移地址T 单步执行一条机器指令P 单步执行,与T的区别是直接跳过循环,不跟踪子程序G 执行到断点后停止4、实验内容(1)输入以下程序,编译并运行,查看显示内容,并将内容记在实验报告上。
(2)如果要使窗体显示;1+1=2Oh! You are right!程序将改成什么样?(3)更改程序,使得自己的名字(拼音)出现在窗体中。
(4)将下面源程序粘贴在新文件中:CODES SEGMENTSTART:mov AX,0MOV AL,18HADD AL,0FCHCODES ENDSEND START首先自己预判加法运行后6个标志位的变化。
写在实验报告中。
(5)保存文件为test2。
预判运行ADD语句后SF,ZF,CF,AF,OF,PF标志位的值,记录下来。
根据下表,在DEBUG中显示的8个标志位:.输入t命令跟踪运行后,查看到计算完后各个寄存器以及标志位的值,截图下来。
看看与自己的预判一不一致,不一致的话自己查找原因。
运用DEBUG 的命令进行调试、查看内存等功能。
5、实验学时:4学时。
填写实验报告,上传到FTP服务器。
贵州民族大学信息工程学院计算机科学与技术系上机实验报告)如果要使窗体显示;1+1=2等语句。
汇编实验报告概述:本次实验主要通过汇编语言的学习和实践,加深对汇编语言的理解并掌握其基本操作和使用方法。
我们使用了x86汇编语言,以及相关的工具和环境。
一、实验背景汇编语言是计算机底层的一种编程语言,通过对计算机底层指令的直接操作,可以实现对硬件的控制。
汇编语言是学习高级编程语言的基础,也是了解计算机运行机理的关键。
二、实验目的1. 理解汇编语言的基本原理和特点;2. 掌握汇编语言的基本指令和语法;3. 学会使用汇编语言进行简单的程序设计和调试。
三、实验环境和工具1. 操作系统:Windows 10;2. 开发工具:MASM(Microsoft Macro Assembler);3. 测试工具:DOSBox。
四、实验过程1. 安装和配置实验环境首先,我们需要安装和配置MASM和DOSBox。
MASM是一款由微软开发的汇编语言开发工具,通过它可以将汇编语言代码转化为可执行文件。
DOSBox是一个模拟DOS环境的工具,能够在现代操作系统上运行旧版的DOS程序。
2. 学习和练习基本指令接下来,我们通过学习和练习基本指令,来掌握汇编语言的基本用法。
我们开始学习如何在汇编语言中定义和初始化变量,以及如何进行算术运算和逻辑运算。
同时,我们还学习了如何使用循环和条件语句。
3. 编写和运行简单程序在掌握了基本指令之后,我们开始编写一些简单的程序,并通过MASM将其转化为可执行文件。
我们编写了一个通过计算两个数的和来演示算术运算的程序,并使用DOSBox来运行这个程序,观察其运行结果。
4. 调试和优化程序在运行程序的过程中,我们发现了一些问题和bug。
我们使用调试工具对程序进行调试,通过逐步执行代码并观察变量的值来发现问题所在。
我们找到了一个变量定义错误的bug,并进行了修复。
此外,我们还通过代码优化来提高程序的性能和效率。
五、实验结果和分析经过一系列的实验和练习,我们成功地掌握了汇编语言的基本操作和使用方法。
我们能够编写简单的汇编程序,并通过MASM将其转化为可执行文件。
汇编语言实验报告(实验一)一.实验目的1.掌握汇编语言程序的上机步骤;(1)用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件)。
(2)用MASM程序产生OBJ文件。
(3)用LIINK程序产生EXE文件。
(4)程序的运行(用DEBUG或在DOS下直接运行)。
2.掌握DEBUG的使用方法。
二.程序说明1.在数据段DATA中有两个数据X和Y,假设X=1122H,Y=3344H,编程求两个字的和,结果存放到Z单元中。
2.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串传送到DEST_BUFFER开始的单元中。
3.从SOURCE_BUFFER单元开始存放了20个字母A,编程将这个20个字母A 的字符串向下移10个单元。
三.设计思想1、将1122H和3344H分别存放在双字x,y中,定义双字Z,x,y带进位相加放入Z中。
2、定义数据段source_buffer,把数据段地址放入ds寄存器,定义附加段extra_buffer,把附加段地址放入es寄存器,移动整个字符串。
3、定义数据段附加段,先移高位,这样要移20次。
四.程序代码1、DATA SEGMENTX DW 1122HY DW 3344HZ DW ?DATA ENDS ;数据段定义结束STACK SEGMENT ;堆栈段定义开始DW 40 DUP(0)STACK ENDS ;堆栈段定义结束CODE SEGMENT ;代码段定义结束ASSUME CS:CODE,SS:STACK,DS:DATASTART: MOV AX,DATAMOV DS,AX ;设置数据段的开始地址MOV DX,XADC DX,YMOV Z,DXMOV AH,4CH ;返回DOCINT 21HCODE ENDSEND START2、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV AX,EXTRAMOV ES,AXLEA SI,SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START3、DATA SEGMENT ;定义数据段SOURCE_BUFFER DB 20 DUP(‘a’) ;定义个小写a DATA ENDSEXTRA SEGMENT ;定义附加段DEST_BUFFER DB 20 DUP(?)EXTRA ENDSCODE SEGMENT ;定义代码段MAIN PROC FARASSUME CS:CODE,DS:DATA,ES:EXTRASTART:PUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS, AXMOV AX, EXTRAMOV ES, AXLEA SI, SOURCE_BUFFERLEA DI,DEST_BUFFERCLDMOV CX,20REP MOVSB ;移动整个串RET ;返回到DOSMAIN ENDPCODE ENDSEND START五.结果分析并回答:1.设计的程序包含了几个段第1段包含数据段、堆栈段、代码段第2、3个包含数据、附加段、代码段2.你的代码经过编译和连接之后,总共占用多少个字节第1、2个占30个字节,第3个占32个字节3.调用DEBUG进行反汇编,查看程序的第一条指令的地址码是多少?最后一条指令的地址码是多少?程序1第一条指令:1454:000 BB4B14 MOV AX,144B最后一条指令:1451:001E 807F0400 CMP BYTE PTR [BX+04],00程序2第一条指令:1450:0000 1E PUSH DS最后一条指令:1450:001E 8B0? MOV AX,[BX]程序3第一条指令:144D:0000 1E PUSH DS最后一条指令:144D:0020 8B5702 MOV DX,[DX+02]。
汇编实验报告一实验总结
实验报告一:汇编实验总结
实验目的:通过汇编实验,掌握汇编语言的基本语法和编程技巧,加深对计算
机底层工作原理的理解。
实验过程:在实验中,我们首先学习了汇编语言的基本语法和指令格式,包括
寄存器的使用、内存地址的访问、算术运算和逻辑运算等。
随后,我们进行了
一系列的编程练习,包括编写简单的程序来实现加法、乘法、比较大小等功能。
在实验的最后阶段,我们还学习了如何调用系统中断来实现输入输出操作。
实验结果:通过本次实验,我们深入了解了汇编语言的编程技巧和应用场景。
我们不仅掌握了汇编语言的基本语法,还学会了如何编写简单的汇编程序来实
现一些基本的功能。
同时,通过实验,我们对计算机底层的工作原理有了更深
入的理解,对计算机系统的运行机制有了更清晰的认识。
实验总结:本次汇编实验让我们深入了解了汇编语言的基本知识和编程技巧,
为我们今后的学习和工作打下了坚实的基础。
通过实验,我们不仅学会了如何
使用汇编语言编写程序,还对计算机系统的底层工作原理有了更深入的理解。
希望在今后的学习和工作中,我们能够继续深入研究汇编语言,不断提高自己
的编程水平,为计算机科学技术的发展贡献自己的力量。
实验五汇编语言程序设计实验(一)一、实验目的1、了解和掌握汇编语言子程序和主程序的设计。
2、掌握循环程序的设计。
3、掌握汇编语言主程序与子程序的调用和参数传递。
4、进一步熟悉在PC机上建立,汇编,链接,调试和运行8086、8088汇编语言程序的过程。
二、实验内容1、复习汇编语言源程序的上机过程:2、编写一个完整程序(包含循环设计和子程序设计)在以strg为首地址的缓冲区中存放着1个字符串,以-1作为结束标志,编程统计字符串长度,并将结果存入lenth单元。
要求统计字符串用子程序完成。
data segmentstrg db ‘abcd’,-1lenth dw ?data endscode segmentassume cs:code,ds:datastart:mov ax,datamov ds,axlea dx,strgcall scountmov lenth,bxmov ah,4chint 21hscount proc nearpush sixor bx,bxmov si,dxnext:cmp byte ptr[si],-1jz overinc bxinc sijmp nextover:pop siretscount endpcode endsend start三、实验器材IBM PC 微机一台四、实验要求1、正确理解本次实验的目的,内容和原理。
2、能编写相应的程序五、实验报告要求完成下面任务:从键盘输入1个长度小于100的字符串,存入以buff 为首地址的缓冲区,其中如有大写字母,要求用子程序转换成小写字母,字符串以回车键作为结束。
写出操作步骤,程序清单,程序注释,实验现象。
实验一数据传送一、实验目的1.1.熟悉8086指令系统的数据传送指令及8086的寻址方式。
2.2.利用Turbo Debugger调试工具来调试汇编语言程序。
二、实验预习要求1.复习8086指令系统中的数据传送类指令和8086的寻址方式。
2.预习Turbo Debugger的使用方法(见附录二):a)如何启动Turbo Debugger;b)如何在各窗口之间切换;c)如何查看或修改寄存器、状态标志和存储单元的内容;d)如何输入程序段;e)如何单步运行程序段和用设置断点的方法运行程序段。
3.按照题目要求预先编写好实验中的程序段。
三、实验任务1.通过下述程序段的输入和执行来熟悉Turbo Debugger的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:MOV BL,08HMOV CL,BLMOV AX,03FFHMOV BX,AXMOV DS:[0020H],BX序出栈,观察出栈后数据的变化情况。
压栈程序段如下:MOV AX,0102HMOV BX,0304HMOV CX,0506HMOV DX,0708HPUSH AXPUSH BXPUSH CXPUSH DX出栈程序段请自行编写(用不同的出栈顺序)。
3.指出下列指令的错误并加以改正,上机验证之。
(1) MOV [BX],[SI]两个参数不能同时为存储单元(2) MOV AH,BX两个寄存器位数不同,其中AH为8位寄存器,BX为16位寄存器(3) MOV AX,[SI][DI]不能用两个变址寄存器来实现寻址操作(4) MOV BYTE PTR[BX],2000H两个参数位数不同(5) MOV CS,AX两个寄存器位数不同,其中CS为16位寄存器,AX为8位寄存器(6) MOV DS,2000HDS作为目的操作数时,源操作数只能为AX4. 设置各寄存器及存储单元的内容如下:(BX)=0010H,(SI)=0001H(10010H)=12H,(10011H)=34H,(10012H)=56H,(10013H)=78H (10120H)=0ABH,(10121H)=0CDH,(10122H)=0EFH说明下列各条指令执行完后AX寄存器中的内容,并上机验证。
汇编实验报告汇编实验报告引言:汇编语言是一种低级语言,用于编写计算机程序。
在计算机科学领域中,汇编语言是一门重要的学科,它可以帮助我们更深入地了解计算机的内部工作原理。
本实验报告将介绍我在学习汇编语言过程中的实验经历和所学到的知识。
实验一:汇编语言的基本概念在本实验中,我首先学习了汇编语言的基本概念。
汇编语言是一种用于编写机器指令的低级语言,它直接操作计算机的硬件。
通过学习汇编语言,我了解了计算机内存、寄存器、指令和数据的存储方式,并学会了如何编写简单的汇编程序。
实验二:汇编语言的数据表示在这个实验中,我学习了汇编语言中的数据表示方法。
汇编语言中的数据可以用不同的方式表示,例如二进制、十进制和十六进制。
我还学习了如何使用数据寄存器和内存寻址来处理不同类型的数据。
实验三:汇编语言的指令集在本实验中,我学习了汇编语言的指令集。
汇编语言中的指令可以分为数据传送指令、算术运算指令、逻辑运算指令和控制指令等多种类型。
通过学习不同类型的指令,我可以编写更加复杂和功能强大的汇编程序。
实验四:汇编语言的程序设计在这个实验中,我学习了如何使用汇编语言进行程序设计。
通过学习汇编语言的程序设计技巧,我可以编写出高效、精确和可靠的程序。
我还学习了如何使用子程序、循环和条件语句等控制结构来实现不同的功能。
实验五:汇编语言的调试和优化在本实验中,我学习了如何调试和优化汇编语言程序。
调试是指在程序运行过程中发现并修复错误的过程,而优化则是指对程序进行性能提升的过程。
通过学习调试和优化技巧,我可以提高程序的效率和可靠性。
结论:通过这些实验,我对汇编语言有了更深入的了解。
汇编语言虽然复杂,但它可以帮助我们更好地理解计算机的内部工作原理,并且可以编写出高效、精确和可靠的程序。
通过学习汇编语言,我不仅提升了自己的编程能力,还对计算机科学有了更全面的认识。
我相信,在今后的学习和工作中,汇编语言将会发挥重要的作用。
汇编实验一实验报告一、实验目的1.了解汇编语言的基本概念和基本语法。
2.掌握常见汇编指令的使用方法。
二、实验器材1.计算机一台。
2.汇编语言开发环境。
三、实验原理和方法1.汇编语言是低级程序语言,是计算机可以直接识别并执行的语言。
2.汇编语言采用助记符表示计算机指令,并且每一条汇编指令都对应一条机器指令。
四、实验过程及结果1.编写一个汇编程序,实现将两个数相加并输出结果的功能。
2.打开汇编语言开发环境,创建一个新的源文件。
3.在源文件中编写汇编程序,并保存。
4.汇编程序的伪指令section .data用于定义数据段,section .text用于定义代码段。
5.使用汇编指令mov将要相加的两个数赋值给寄存器,使用汇编指令add将两个数相加,并将结果保存到一个寄存器中。
6.使用汇编指令mov将结果从寄存器中取出,并输出到屏幕。
7.编译和运行汇编程序,查看结果是否正确。
五、实验结果分析经过编译和运行,实验程序顺利执行,结果正确输出。
通过这个实验,加深了对汇编语言的理解和掌握。
六、实验总结通过本次实验,我了解了汇编语言的基本概念和基本语法,并掌握了常见汇编指令的使用方法。
在实验过程中,我遇到了一些问题,如如何正确使用汇编指令以及如何调试程序等,但在同学和老师的帮助下,我顺利完成了实验,并且收获了很多。
通过这次实验,我深刻认识到汇编语言是一种非常底层的语言,需要对计算机底层原理有一定的了解,才能编写出正确的汇编程序。
同时,我也意识到汇编语言虽然复杂,但它的执行效率非常高,可以在一些特定场景下发挥出很大的作用。
总而言之,本次实验让我对汇编语言有了更深入的了解,也提高了我的编程能力。
希望在以后的学习中能够深入学习汇编语言,并能够熟练地使用它。
汇编器实验报告篇一:汇编实验报告实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。
2.学会使用EDIT、MASM、LINK、DEBUG等软件工具。
3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。
二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。
设定源程序的文件名为ABC。
DATA SEGMENTBUFDB 23H,16H,08H,20H,64H,8AH,91H,35H,2BH,7FH CN EQU $-BUFDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START: PUSH DSXOR AX,AXPUSH AXMOVAX,DATAMOV DS,AXMOV BX,OFFSET BUF MOV 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图1 用EDIT编辑ABC.ASM程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。
2.将源程序文件汇编成目标程序文件一般情况下,MASM汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。
(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.OBJ。
(3)若程序中使用了宏指令,则汇编程序将展开宏指令。
源程序建立以后,在DOS状态下,采用宏汇编程序MASM 对源程序文件进行汇编,其操作过程如图2所示。
汇编实验报告一实验总结汇编实验报告一实验总结实验背景汇编语言是一种低级语言,用于编写计算机程序。
在汇编实验一中,我们学习了基本的汇编指令和程序结构,并通过实践掌握了如何编写简单的汇编程序。
本文将对实验过程和结果进行总结和分析。
实验过程在实验一中,我们首先了解了汇编语言的基本概念和特点。
然后,我们使用汇编语言编写了一个简单的程序,目的是将两个数相加并输出结果。
在编写程序的过程中,我们学习了如何使用汇编指令进行算术运算、内存操作和输出。
我们还学习了如何使用调试器来调试和测试我们的程序。
实验结果经过编写和调试,我们成功地完成了实验一的目标。
我们的程序可以正确地将两个数相加并输出结果。
这个结果验证了我们对汇编语言和指令的理解和掌握。
通过这个实验,我们不仅学会了如何编写简单的汇编程序,还加深了对计算机底层运行原理的理解。
实验收获通过实验一,我们深刻认识到汇编语言的重要性和应用价值。
汇编语言虽然比高级语言更加底层和繁琐,但它可以直接操作计算机的硬件,提高程序的执行效率。
同时,学习汇编语言也有助于我们更好地理解计算机的工作原理和内部结构。
此外,实验一还培养了我们的逻辑思维和问题解决能力。
在编写程序的过程中,我们需要仔细思考每一条指令的含义和作用,并保证程序的正确性和效率。
通过调试和测试,我们学会了如何发现和解决程序中的错误和问题。
总结通过实验一,我们不仅掌握了汇编语言的基本知识和技巧,还提高了我们的编程能力和计算机思维。
汇编语言作为一种底层语言,虽然在现代编程中使用较少,但它对于理解计算机底层原理和优化程序仍然具有重要意义。
在今后的学习和工作中,我们将继续深入学习汇编语言,并将其应用于更复杂和实际的问题中。
我们相信,通过不断学习和实践,我们的汇编编程能力将不断提高,为我们的学术和职业发展打下坚实的基础。
总之,实验一是我们学习汇编语言的第一步,通过这个实验,我们对汇编语言有了更深入的了解和认识。
我们相信,在今后的学习和实践中,我们将能够更好地应用汇编语言,并取得更大的成果。
实验一:汇编语言程序设计基础班级计机105 学号201010214516 姓名刘桂文预备知识:在进行实验之前,熟悉基本的DOS命令:CD,DIR,DEL,RENAME,COPY。
第一部分:汇编语言程序上机过程实验目的:1、掌握常用工具软件WordPad,MASM和LINK的使用。
2、伪指令:SEGMENT, ENDS, ASSUME, END, OFFSET, DUP。
3、掌握汇编源程序的基本架构4、了解.EXE文件及用INT 21H 4C号功能返回系统的方法。
程序:TITLE move and add operations; ---------------------------------------------STACK SEGMENT PARA STACK 'Stack'DW 32 DUP(0)STACK ENDS; ----------------------------------------------DATASEG SEGMENT PARA 'Data'FLDD DW 215FLDE DW 125FLDF DW ?DATASEG ENDS; -----------------------------------------------CODESEG SEGMENT PARA 'Code'MAIN PROC FARASSUME SS:STACK,DS:DA TASEG,CS:CODESEGMOV AX,DA TASEG ;Set address of dataMOV DS,AX ; segment in DSMOV AX,FLDD ;Move 0215 to AXADD AX,FLDE ;Add 0125 to AXMOV FLDF,AX ;Store sum in FLDFMOV AX,4C00H ;End processingINT 21HMAIN ENDP ;End of procedureCODESEG ENDS ;End of segmentEND MAIN ;End of program实验步骤:1、用设置好的文字编辑工具WordPad将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件。
若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
4、在DOS状态下运行LINK产生的.EXE文件,并且用DEBUG跟踪检查可执行文件的执行状态。
实验报告要求:1、汇编,连接及调试时产生的错误,其原因及解决办法。
2、思考:1)若在源程序中把INT 21H的'H'省去,会产生什么现象?答:H是必须的,如果没了H那么就会找不到所想要的中断程序了。
2)把INT 21H 4CH号功能改为INT 20H,行不行?答: 行.第二部分:DEBUG 命令使用实验目的:通过实验掌握下列知识1、DEBUG的基本使用2、DEBUG命令: A,D,E,F,H,R,T,U。
3、掌握ASCII码和十六进制数据的存储表示。
实验内容:1、输入DEBUG 进入DEBUG 控制,显示提示符_。
2、用命令F100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令D100 10F 观察内存中的16进制码及屏幕右边的ASCII 字符。
4、用命令F110 11F 41 重复上二项实验,观察结果并比较。
5、用命令E100 30 31 32 ……3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用H命令检查下列各组16进制数加减结果,并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH注:H命令完成两个十六进制数的加减法,显示出结果。
例如(1)输入H 34 12回车后,显示出加减法结果:0056 0012。
完成上述的各个数据的运算。
7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP 及标志位中ZF,CF和AF的内容。
第三部分:8088常用指令练习实验目的通过实验掌握下列知识:1、8088指令:MOV,ADD,ADC,SUB,SBB,XCHG。
2、8088寄存器: AX,BX,CX,DX,IP,标志寄存器。
3、8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。
实验内容:1、传送指令1)用A命令在内存100H处键入下列内容:MOV AX, 1234MOV BX, 5678XCHG AX, BXMOV AH, 35MOV AL, 48MOV DX, 75ABXCHG AX, DX2)用U命令检查键入的程序并记录,特别注意左边的机器码。
3)用T命令逐条运行这些指令,每运行一行检查并记录有关寄存器及IP的变化情况。
2、加减法指令:1)用A命令在内存100H处键入下列内容:MOV AH, 34MOV AL, 22ADD AL, AHSUB AL, 78MOV CX, 1284MOV DX, 5678ADD CX, DXSUB CX, AXSUB CX, CX2)用U命令检查键入的程序及对应的机器码。
3)用T命令逐条运行这些指令,检查并记录有关寄存器及注意标志位有无变化,例如ZF、CF等情况。
思考:这次运行还是打入T,行不行?怎么办?用R命令检查一下IP 的内容。
注意T命令与IP的关系。
答:不行,因为IP寄存器指向的内容不是我们刚才写的那程序的开关地址。
可以用-R指令改变IP的值,让它指向代码的第一句的有效地址。
3、带进位加减法:1)用A命令在内存200H处键入下列内容,并用U命令检查:MOV AH, 12MOV AL, 84MOV CH, 56MOV CL, 78ADD AL, CLADC AH, CHMOV DH, A7MOV DL, 58SUB DL, 7FSBB DH, 342)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。
3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。
4、内存操作数及各种寻址方式使用:在debug的A命令下,编辑以下指令:MOV AX,1234MOV [1000],AXMOV BX,1002MOV BYTE PTR[BX],20MOV DL,39INC BXMOV [BX],DLDEC DLMOV SI,3MOV [BX+SI],DLMOV [BX+SI+1],DLMOV WORD PTR[BX+SI+2],2846步骤:1)用A命令键入上述程序,并用T命令逐条运行。
2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。
MOV AX,1234 (立即数寻址)MOV [1000],AX (直接寻址)MOV BX,1002 (立即数寻址)MOV BYTE PTR[BX],20 (寄存器间接寻址)MOV DL,39 (立即数寻址)INC BX (自增1)MOV [BX],DL (寄存器间接寻址)DEC DL (自减1)MOV SI,3 (立即数寻址)MOV [BX+SI],DL (基址变址寻址)MOV [BX+SI+1],DL (相对基址变址寻址)MOV WORD PTR[BX+SI+2],2846(相对基址变址寻址)注意D命令显示结果中右边的ASCII字符及双字节数存放法。
思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。
答:不可以。
第四部分:实验总结实验报告要求1、必要之处,需要说明手工预计结果及实验结果的比较2、常用指令练习部分的逐条运行记录,列出自编程序。
附录:DEBUG 使用1、打DEBUG 进入DEBUG,显示提示符_ 。
2、退出DEBUG命令:Q3、显示内存命令:D 起始地址结束地址4、修改内存命令:E 起始地址,连续修改打空格键。
打回车键退出E命令。
5、检查寄存器命令R6、修改寄存器命令:R 寄存器名7、汇编命令:A 起始地址,不输入指令打回车键退出A命令。
8、反汇编命令:U 起始地址结束地址9、文件命名命令:N 盘号:文件名10、读文件命令:L 内存地址11、写文件命令:W 内存地址10、读扇区命令:L 内存地址盘号(0--A:,1--B:) 扇区号扇区数11、写扇区命令:W 内存地址盘号扇区号扇区数12、运行命令:G=起始地址结束(断点)地址13、单步命令:T=起始地址运行指令数,进入子程序内部。
14、单步命令:P=起始地址运行指令数,不进入子程序内部。
15、内存搬家命令:M 起始地址结束地址目的地址。