《汇编语言》实验报告模板实验三

合集下载

汇编语言实验报告三

汇编语言实验报告三

汇编语言实验报告(实验三)一.实验目的1.掌握程序设计中的子程序结构;2.熟练使用过程伪指令、子程序调用和返回等汇编语言的指令编写子程序;3.掌握数制转换方法;4.掌握利用DOS系统功能调用进行字符输入及字符输出(显示)的方法。

二.程序说明1.编写十进制到十六进制转换程序。

要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来2.已知从BUF开始存放了10个16进制字数据,编程求出这10个数中的最大数,(将最大数存入MAX字节单元),并将其以10进制数的形式在屏幕上显示出来。

(提示:以上两题都要求采用子程序的方法)3.从键盘上输入一行字符,如果这行字符比前一次输入的一行字符长度长,则保存该行字符,然后继续输入另一行字符;如果它比前一次输入的行短,则不保存这行字符。

按下‘$’输入结束,最后将最长的一行字符显示出来。

(选作)(提示:定义数据段,包括两个变量STRING和BUFFER,格式如下:STRING DB 0 ;存放字符的个数DB 80 DUP (?), 0DH,0AH,‘$’;存放前一次输入的字符串,兼作显示缓冲区BUFFER DB 80 ;输入字符串的缓冲区,最多输入80个字符DB ?DB 80 DUP (20H)然后利用0AH号DOS系统功能调用收入字符,用09H号系统功能调用输出。

)三.设计思想1.先调用子函数decibin由键盘输入一个数字后,先减去30h把ASCII码形式转换为十进制数形式,保存在bx中,再调用子函数binihex,用十六进制形式显示bx中的数。

2.利用子函数max依次比较,将buf中10个字的最大值放到bx中,再一次除以10000,1000,100,10,并分别把余数放到bx,商放到dl,并转换为ASCII码格式,即把十六进制转为10进制,最后调用2号功能输出结果即可。

3.调用0ah功能,将输入字符放到缓冲区,并把之后输入的字符串依次与缓冲区内容相比较,若小于缓冲区内容,则被替换,直到输入$即停止输入字符串为止,输出最终存放在string 中的字符串的内容。

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验

北京理工大学汇编语言实验报告实验三字符串操作实验实验三字符串操作实验一、实验目的1)熟悉串操作指令的功能与应用;2)掌握串操作指令的寻址方式及使用方法,编写常用的字符串处理程序;3)了解汇编语言字符串处理基本流程;二、实验软硬件环境1)硬件环境:惠普64位一体化计算机及局域网; 2)软件环境:windows 8,红蜘蛛管理系统,MASM for Win dows三、实验相关知识1)字符串操作流程SI寄存器保存源串首地址;DI寄存器保存目的串首地址;CX寄存器保存字符串长度;CLD或STD指令设置字符串处理方向;2)重复前缀指令重复次数由计数寄存器CX中存放的值决定,指令每重复执行一次,计数器CX中值减1,当CX 中值减至0时,停止重复执行,继续执行下一条指令。

寄存器的E内容条件为复前罡重复与操作直配合工作的字符串处理指令有MOVSSTOS^ LODS当REPE/REP判断计数寄存器的内容CX是否为0或ZF=O(即比较的两个操作数不等)亠只要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMP和SCAS0或體茴比较P判个操数数相等的内容要满足一个则重复执行结束,否则继续执行。

可以与REPE/REP配合工作的串指令有CMPS口SCAS3)字符串操作指令lodsb、lodsw :把DS:SI 指向的存储单元中的数据装入AL或AX然后根据DF标志增减SI ;stosb、stosw :把AL 或AX 中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI ;movsb movsw把DS:SI 指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF 标志分别增减SI和DI ;scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;cmpsb cmpsw把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI ;rep :重复其后的串操作指令。

最新实验三汇编语言程序设计3

最新实验三汇编语言程序设计3

实验三汇编语言程序
设计3
实验三汇编语言程序设计(3)
一、实验目的
进一步掌握汇编语言程序的编程方法和技巧
二、实验内容
1. 编写一个程序,进入保护模式,并在保护模式下用不同属性在屏幕上显示字符串(字符串内容自定),然后返回实模式。

2. 编写一个游戏程序,实现如下功能:
◆首先用蓝色清屏
◆在在屏幕中央显示由字符串“-============#”组成的黄色的小蛇,#为蛇
头,-为蛇尾
◆按下方向键可以控制上述小蛇按蛇行方式在屏幕上行走
◆在行进过程中,蛇头只能左转、右转或继续前进,不能掉转180度
提示:
①通过调用INT 16H的0号功能可以读取光标控制键的扩展码
光标控制键:↑↓←→
扩展码(十进制):72 80 75 77
②参考教材的P146-148了解在指定位置用指定属性显示字符的方法
3. (选做)修改期中试题中的浮点数计算程序,实现能够计算加、减、乘、除四则运算的计算器功能。

例如,用户输入2.3+1.1,则输出3.4;用户输入非法的表达式,则给出出错信息。

三、实验报告要求
前两个实验内容的程序说明和程序清单。

汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)-循环程序设计

汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。

二进制数。

要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。

本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。

下编写完整的汇编语言程并生成可执行文件运行。

二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。

构程序。

简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。

2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。

data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。

系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。

十六进制数通过ASCII码对照转换为二进制数。

A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。

汇编语言实验报告模板

汇编语言实验报告模板

《汇编语言》实验报告班级网131学号139074272姓名王祥兵指导教师刘恒实验一汇编语言运行环境及方法、简单程序设计一、实验目的:1、熟悉汇编语言运行环境和方法2、了解如何使用汇编语言的编制程序。

3、熟悉DEBUG有关命令的使用方法。

4、利用DEBUG掌握有关指令的功能。

5、利用DEBUG运行简单的程序段。

二、实验内容:编写一程序:比较两个字符串string1和string2所含的字符是否相同。

若相同则显示‘match’,否则‘No match’。

三、实验步骤:1.在dos提示符下,进入MASM目录2.在MASM目录下启动EDIT编辑程序,输入源程序,并对其进行汇编,链接和运行3.记录每一步的命令,以及查看结果的方法四、程序代码:五、实验总结及教训1.代码运行结果:2.debug调试结果:熟悉了汇编环境的使用,学会了用debug来调试程序实验二:用DEBUG编程:使用堆栈段将AX和BX的内容进行交换一、实验目的:1、熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。

2、掌握数据在内存中的存放方式和内存操作数的几种寻址方式。

3、掌握简单指令的执行过程。

二、实验内容:1、设堆栈指针SP=2000H,AX=3000H,BX=5000H;请编一程序段将AX和BX的内容进行交换。

请用堆栈作为两寄存器交换内容的中间存储单元,用DEBUG调试程序进行汇编与调试。

2、设DS=当前段地址,BX=0300H,SI=0002H;请用DEBUG 的命令将存储器偏移地址300H~304H连续单元顺序装入0AH,0BH,0CH,0DH,0EH。

在DEBUG状态下送入下面程序,并用单步执行的方法,分析每条指令源地址的形成过程,当数据传送完毕时,AX 中的内容是什么。

程序清单如下:MOV AX,BXMOV AX,0304HMOV AX,[0304H]MOV AX,[BX]MOV AX,0001[BX]MOV AX,[BX][SI]MOV AX,0001[BX][SI]HLT三、实验要求:1、实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告
1. 实验简介
本次实验是针对汇编语言的学习和实践,在实验中,我们将学习如何使用汇编语言编写程序、调试程序,并通过一系列实例来练习和巩固所学知识。

2. 实验目的
(这一部分可以根据实际情况来写,列举实验的具体目的和要求)
3. 实验环境及工具
(介绍实验所使用的软件环境和工具,如:编译器、调试器)
4. 实验步骤
(根据实验内容具体描述实验步骤,可以分为多个小节)
4.1 准备工作
在开始实验之前,需要进行一些准备工作,包括安装编译器、创建工作环境等。

4.2 实验一:简单的汇编程序
本实验通过编写一个简单的汇编程序来熟悉汇编语言的基本语法和指令集,包括数据传送、算术运算、逻辑运算等。

4.3 实验二:汇编程序的调试
在实验二中,我们将学习如何使用调试器对汇编程序进行调试,包括设置断点、查看变量值、单步执行等操作。

4.4 实验三:汇编程序的优化
本实验将通过优化代码来提高程序的执行效率,包括减少指令的使用、优化循环结构等。

5. 实验结果与分析
(对实验的结果进行总结和分析,可以包括程序的输出结果、性能分析等)
6. 实验总结
(针对本次实验的收获和心得体会进行总结,可以包括对汇编语言的理解、解决问题的思路等)
7. 实验感想
(对本次实验的感想和建议,如实验过程中遇到的困难、改进的方向等)
8. 参考文献
(列出本报告中所引用的参考文献)
注:该文章只是按照题目提示给出了一个大致的框架和构思,实际根据具体的实验内容和要求来编写每个小节的详细内容。

希望对你有所帮助!。

汇编语言实验报告_3

汇编语言实验报告_3

ROR AX, 1
;(AX)= 9397H,CF=1,SF 和 ZF 不变,OF=1
程序运行结果如下图所示,可单步运行查看每条指令执行完后寄存器 AX 的内
容,由此可看出程序段执行后 (AX)=9397H。
实验四 对教材书习题第五章实现汇编
5.16、在首地址为DATA的字数组中存放着100H个16位补码数,试编写一个 程序求出它们的平均值放在AX寄存器中;并求出数组中有多少个数小于此平均 值,将结果放在BX寄存器中。 答:程序如下:
试问: (1) 每条指令执行完后,AX 寄存器的内容是什么?
(2) 每条指令执行完后,进位、符号和零标志的值是什么? (3) 程序结束时,AX 和 DX 的内容是什么? 答:(1)、(2)见注释;
(3) (AX)=8D00H,(DX)=0 3.19 下列程序段中的每条指令执行完后,AX 寄存器及 CF、SF、ZF 和 OF 的内 容是什么?
ADD SI, 2
POP CX
LOOP LOOP1
RET
MAIN ENDP
CSEG ENDS
END START
5.21 试编写一程序,要求比较数组ARRAY中的三个16位补码数,并根据比
较结果在终端上显示如下信息:
(1) 如果三个数都不相等则显示0;
(2) 如果三个数有二个数相等则显示1;
(3) 如果三个数都相等则显示2。
BEGIN:LEA SI, ARRAY
MOV DX, 0;(DX)用于存放所求的结果
MOV AX, [SI]
MOV BX, [SI+2]
CMP AX, BX;比较第一和第二两个数是否相等
JNE NEXT1
INC DX
NEXT1:CMP [SI+4], AX;比较第一和第三两个数是否相等

汇编语言实验报告

汇编语言实验报告

实验报告一:汇编语言实验基础一.实验目的:1. 熟悉汇编语言程序的开发过程以及汇编语言常用软件的使用方法2. 掌握DEBUG常用命令的使用方法二、实验内容:1.DEBUG 命令使用2.8088常用指令练习三、实验步骤:(一)DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符'_ '。

2、用命令 F 100 10F 'A' 将'A'的ASCII码填入内存。

3、用命令 D 100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。

4、用命令 F 110 11F 41 重复上二项实验,观察结果并比较。

5、用命令 E 100 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,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF 和AF的内容。

8、用R命令将AX,BX内容改写为1050H及23A8H。

(二)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命令检查键入的程序及对应的机器码。

汇编语言实验报告

汇编语言实验报告

H a r b i n I n s t i t u t e o f T e c h n o l o g y a t W e i h a i汇编语言实验报告实验一第一部分:dubug用法一、问题描述上机前预习debug常用命令的用法,复习汇编语言基本指令,上机时进行debug命令练习。

二、问题分析使用dubug调试汇编程序,MS-DOS环境,使用WINNT文件夹下system32子文件夹的DEBUG.EXE文件。

三、设计思想1.在DOS的提示符下,可如下键入Debug启动调试程序:DEBUG [路径\文件名] [参数1] [参数2]2.Debug后可以不带文件名,仅运行Debug程序;需要时,再用N 和L命令调入被调试程序。

命令中可以带有被调试程序的文件名,则运行Debug的同时,还将指定的程序调入主存;参数1/2是被调试程序所需要的参数。

3.在Debug程序调入后,根据有无被调试程序及其类型相应设置寄存器组的内容,发出Debug的提示符“-”,此时就可用Debug命令来调试程序。

4.运行Debug程序时,如果不带被调试程序,则所有段寄存器值相等,都指向当前可用的主存段;除SP之外的通用寄存器都设置为0,而SP指示当前堆栈顶在这个段的尾部;IP=0100h;状态标志都是清0状态。

5.运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。

6.运行Debug程序时,如果带入的被调试程序扩展名是.EXE,则需要重新定位。

此时,CS : IP和SS : SP根据被调试程序确定,分别指向代码段和堆栈段。

DS=ES指向当前可用的主存段,BX.CX包含被调试文件大小的字节数(BX为高16位),其他通用寄存器为0,状态标志都是清0状态。

7.运行Debug程序时,如果带入的被调试程序扩展名不是.EXE,则BX.CX包含被调试文件大小的字节数(BX为高16位),其他同不带被调试程序的情况。

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验)

汇编语言程序设计实验报告三(子程序设计实验)汇编语言程序设计实验报告三(子程序设计实验)实验目的掌握主程序与子程序之间的调用关系及其调用方法。

掌握子程序调用过程中近程调用与远程调用的区别。

熟练掌握码型变换的程序。

实验内容从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制数,并在屏幕上显示。

要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。

数据可循环输入,遇‘00’结束。

实验准备预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。

熟悉键盘输入和字符显示的程序段的编制。

实验步骤编辑、汇编源程序,生成可执行文件。

执行程序,检查输入、输出结果,看是否正确。

如不正确,用DEBUG检查,修改源程序,再汇编、运行,直到程序正确为止。

用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆栈的变化情况。

实验报告要求分析近程调用和远程调用的主要区别。

用DEBUG命令观察执行过程有何不同。

分析实验结果及所遇到的问题的解决方法。

程序流程图开始TRAN程序标准序开始读入十进制数据放AX中AXAXAND0F0FH是00?YBLALN调用转换子程序结束AL左移3位回车、换行BL左移1位于ALAL+BL主程序流程图ALAL+AHRET转换子程序TRAN流程图程序清单STASEGMENTSTACK’STACK’DB100DUP(0)STAENDS GSAGSEGMENTPARA‘CODE’ASSUMECS:CSAG MAINPROCFARSTRAT:PUSHDSSUBAX,AXPUSHAXREV:MOVAH,1INT21HMOVBL,ALINT21HMOVAH,ALMOVAL,BLCMPAX,3030H JEENDTRAN CALLNEARPTRTRAN CALLFARPTRCON MOVAL,0DH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP MOVAL,0AH CALLFARPTRDISP JMPREV ENDTRAN:RET MAINENDP TRANPROCNEAR ANDAX,0F0FHMOVBL,ALMOVBL,ALMOVCL,3SHLAL,CLMOVCL,1SHLBL,CLADDAL,BLADDAL,AHRETTRANENDPCSAGENDS CSBGSEGMENTPARA’CODE’ASSUMECS:CSBG CONPROCFARPUSHAXMOVCL,4 SHRAL,CL ADDAL,30H CMPAL,39H JBECON2 ADDAL,7CON2:PUSHAX MOVAL,0DH CALLFARPTRDISP MOVAL,OAH CALLFARPTRDISP POPAX CALLFARPTRDISP POPAX ANDAL,0FHADDAL,30H CMPAL,39H JBECON1ADDAL,7CON1:CALLFARPTRDISP RETCONEDNP DISPPROCFAR PUSHBXMOVBX,0MOVAH,14INT10HPOPBXRETDISPENDPCSBGENDS ENDSTART。

汇编语言程序设计实验报告

汇编语言程序设计实验报告
2.掌握汇编语言源程序的执行过程。
二、实验内容
P131作业29。
实验三子程序设计实验
一、实验目的
1.掌握汇编语言源程序子程序设计方法;
2.会使用CV软件工具。
二、实验内容
把实验二作为子程序,编写主程序来对能否构成三角形进行10判断。
实验四宏汇编程序设计实验
一、实验目的
1.掌握宏汇编程序编程技术及宏调用的方法;
2.主模块程序完成子程序的调用,及判断结果的显示,程序名为:ZHU.asm。
实验五混合程序的开发实验
一、实验目的
1.了解混合调用中的参数设置;
2.掌握混合调用的方法;
二、实验内容
P156第5题。
实验一单指令功能测试实验
一、实验目的
1.会使用DEBUG软件;
2.利用DEBUG单步执行功能测试指令的执行。
二、实验内容
判断从键盘输入的ASCII码数字,若是小于等于5,显示“C”,若是大于5显示“D”。假设输入的只可能是0~9数字。
实验二完整的汇编语言程序设计实验
一、实验目的
1.掌握完整的汇编语言源程序的设计方法;
实验五多模块程序设计实验
一、实验目的
1.掌握汇编段的属性的含义;
2.掌握利用LINK将多模块连接起来的方法;
3.掌握利用库文件将多模块连接起来的方法。
二、实验内容
假设内存单元中有三个字a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能,显示“Y”,否则,显示“N”;
具体要求:
1.三角形的判断程序为一模块子程序,程序名为:ABC.asm。入口参数:字节变量a、b、c。出口参数:字节变量d=1是三角形,d=0不是三角形。
2.了解COM文件的编程方法及特点;

汇编实验报告3

汇编实验报告3

汇编实验报告3汇编实验报告3引言:汇编语言是一种低级语言,用于编写计算机程序。

在本次实验中,我们将继续学习和实践汇编语言的基本概念和技术。

本报告将详细记录我们在实验过程中所遇到的问题、解决方案和实验结果。

实验目的:本次实验的主要目的是加深对汇编语言的理解,并通过实践掌握汇编语言的基本操作和调试技巧。

通过完成实验,我们将能够编写简单的汇编程序,理解程序的执行过程和内存的使用。

实验环境:本次实验使用的是x86架构的计算机,并使用MASM汇编器进行程序的编译和链接。

我们还使用了调试器来跟踪程序的执行过程。

实验步骤:1. 阅读实验指导书和相关资料,了解本次实验的要求和目标。

2. 编写一个简单的汇编程序,实现两个数的相加功能。

程序首先要求用户输入两个数,然后将其相加并输出结果。

3. 使用MASM汇编器将程序源代码编译成目标文件。

4. 使用链接器将目标文件与运行时库链接,生成可执行文件。

5. 运行程序,并验证程序的正确性。

如果程序不能正常工作,使用调试器进行调试,找出问题的原因并进行修复。

6. 记录实验结果和遇到的问题,撰写实验报告。

实验结果:我们编写了一个简单的汇编程序,成功实现了两个数的相加功能。

程序能够正确地接收用户输入的两个数,并将其相加后输出结果。

我们通过多次测试,验证了程序的正确性。

实验中遇到的问题及解决方案:在实验过程中,我们遇到了一些问题,下面是其中的两个例子以及我们的解决方案:1. 问题:在程序运行过程中,无法正确接收用户输入的数值。

解决方案:我们仔细检查了程序的输入部分,发现在读取用户输入时,没有正确设置输入缓冲区的大小。

通过增大缓冲区的大小,我们成功解决了这个问题。

2. 问题:程序输出的结果不正确。

解决方案:我们使用调试器跟踪程序的执行过程,发现在进行相加操作时,寄存器的值被错误地覆盖了。

经过进一步的调试,我们发现这是因为在进行相加操作之前,没有正确地保存寄存器的值。

通过添加保存和恢复寄存器值的代码,我们成功解决了这个问题。

masm实验3 实验报告

masm实验3 实验报告

(1)将下面程序保存为t1.asm,生成可执行文件t1.exe。

assume cs:codesgcodesg segmentmov ax,2000Hmov ss,axmov sp,0add sp,10pop axpop bxpush axpush bxpop axpop bxmov ax,4c00Hint 21Hcodesg endsend(2)用debug跟踪t1.exe的执行过程,写出每一步执行后,相关寄存器中的内容和栈顶内容。

step 0:通过debug t1.exe加载程序后:ax=0000H;bx=0000H;cx=0016H(表示程序长度,为22个字节);ds=13D5H(表示操作系统给t1.exe分配的空闲区域的段地址);cs=13e5H(=ds+10H,与之前描述一致);ss=13e5H,sp=0000H;通过d 13e5:0 1命令查看栈顶内容,为00b8H;step1:单步执行第一条指令后:ax=2000H;bx=0000H;其余cx,ds,cs,ss,sp均不变;此时栈顶内容理应不变,查看依旧为00b8H;step2:单步执行第二条指令后,自动连带执行第三条指令:ax=2000H;bx=0000H;其余cx,ds,cs均不变;ss和sp被重置,栈顶指向:2000:0,查看栈顶内容,为:0ff1H;step3:单步执行第四条指令后:ax=2000H;bx=0000H;其余cx,ds,cs,ss均不变;sp被重置,栈顶指向:2000:0a,查看栈顶内容,为:615fH;step4:单步执行第五条指令后:ax=615fH(与上一步所得一致);bx=0000H;其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0c,查看栈顶内容,为:0DF0H;----------因重新debug,导致前后ax不一致-----------step5:单步执行第六条指令后:ax=13e5H;bx=0DF0H(与上一步所得一致);其余cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;step6:单步执行第七条指令后:ax=13e5H;bx=0DF0H;其余cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H (与AX一致);step7:单步执行第八条指令后:ax,bx,cx,ds,cs,ss均不变;sp=sp-2,栈顶指向:2000:0A,查看栈顶内容,为:0DF0H (与BX一致);step8:单步执行第九条指令后:ax=0DF0H(与上步查看一致);bx,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0C,查看栈顶内容,为:13E5H;step9:单步执行第十条指令后:bx=13E5H(与上步查看一致);ax,cx,ds,cs,ss均不变;sp=sp+2,栈顶指向:2000:0E,查看栈顶内容,为:0B16H;(3)PSP头两个字节为CD 20,用debug加载t1.exe.查看PSP内容:PSP区域地址范围为:ds:0~ds:ff.分类: 汇编语言。

汇编语言实验报告三

汇编语言实验报告三

实验3实验学时: 2 实验地点:二综实验日期:一、实验目的掌握汇编编程规范,熟悉编程环境。

二、实验内容1、编写子程序把字符串中的小写字母转变为大写字母(参见教材实验11)。

2、编写0号中断处理程序,使得在除法溢出发生时在屏幕中间显示“divide error!”(参见教材实验12)。

(请预习第12章并完成实验,时间不够则在课后完成)三、实验步骤算法及关键代码1. 小写字母转换大写字母DATAS SEGMENT;此处输入数据段代码db"Beginner's All-purpose Symbolic Instruction Code.", 0DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码mov si, 0call Smov si, 0call PMOV AH,4CHINT 21H;将字符串中小写字母变大写字母的子程序S: mov ah, [si]cmp ah, 30H ;判断是否到达'0'je E ;到达'0'则跳转到Ecmp ah, 61H ;判断是否为小写字母jb CONTINUE ;不是小写字母则跳转至continue cmp ah, 7AHja CONTINUEmov al, [si]and al, 11011111Bmov [si], alCONTINUE:inc sijmp SE: ret;将字符串输出的子程序P: mov ah, [si]cmp ah, 0Hje E2mov dl, [si]mov ah, 2Hint 21Hinc sijmp PE2: retCODES ENDSEND START2.零号中断程序DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATASMOV DS,AX;此处输入代码段代码;将do0程序复制到0:200H处(安装程序)MOV SI, offset do0MOV AX, 0MOV ES, AXMOV DI, 200HMOV CX, offset do0end-offset do0cldrep movsb;设置中断向量表,使零号中断指向0:0200H地址上的程序(注册程序) MOV AX, 0MOV DS, AXMOV SI, 0MOV AX, 200HMOV [SI], AXMOV AX, 0ADD SI, 2MOV [SI], AXMOV AX, 1MOV BH, 0DIV BHMOV AH,4CHINT 21Hdo0:JMP do0startDB'divide error!'do0start:MOV AX, CSMOV DS, AXMOV SI, 202HMOV AX, 0B800HMOV ES, AXMOV DI, 12*160+36*2MOV CX, 13s: MOV DL, [SI]MOV ES:[DI], DLINC SIADD DI, 2LOOP sMOV AH,4CHINT 21Hdo0end: nopCODES ENDSEND START四、实验小结(简单说明实验过程中出现的问题和解决方法)1.JMP等跳转指令可以灵活运用2.寄存器的使用需要注意有没有被别处修改了。

汇编 实验报告

汇编 实验报告

汇编实验报告汇编实验报告引言:汇编语言是一种低级语言,用于编写计算机程序。

在计算机科学领域中,汇编语言是一门重要的学科,它可以帮助我们更深入地了解计算机的内部工作原理。

本实验报告将介绍我在学习汇编语言过程中的实验经历和所学到的知识。

实验一:汇编语言的基本概念在本实验中,我首先学习了汇编语言的基本概念。

汇编语言是一种用于编写机器指令的低级语言,它直接操作计算机的硬件。

通过学习汇编语言,我了解了计算机内存、寄存器、指令和数据的存储方式,并学会了如何编写简单的汇编程序。

实验二:汇编语言的数据表示在这个实验中,我学习了汇编语言中的数据表示方法。

汇编语言中的数据可以用不同的方式表示,例如二进制、十进制和十六进制。

我还学习了如何使用数据寄存器和内存寻址来处理不同类型的数据。

实验三:汇编语言的指令集在本实验中,我学习了汇编语言的指令集。

汇编语言中的指令可以分为数据传送指令、算术运算指令、逻辑运算指令和控制指令等多种类型。

通过学习不同类型的指令,我可以编写更加复杂和功能强大的汇编程序。

实验四:汇编语言的程序设计在这个实验中,我学习了如何使用汇编语言进行程序设计。

通过学习汇编语言的程序设计技巧,我可以编写出高效、精确和可靠的程序。

我还学习了如何使用子程序、循环和条件语句等控制结构来实现不同的功能。

实验五:汇编语言的调试和优化在本实验中,我学习了如何调试和优化汇编语言程序。

调试是指在程序运行过程中发现并修复错误的过程,而优化则是指对程序进行性能提升的过程。

通过学习调试和优化技巧,我可以提高程序的效率和可靠性。

结论:通过这些实验,我对汇编语言有了更深入的了解。

汇编语言虽然复杂,但它可以帮助我们更好地理解计算机的内部工作原理,并且可以编写出高效、精确和可靠的程序。

通过学习汇编语言,我不仅提升了自己的编程能力,还对计算机科学有了更全面的认识。

我相信,在今后的学习和工作中,汇编语言将会发挥重要的作用。

《汇编语言》课内实验报告(3)

《汇编语言》课内实验报告(3)

《汇编语言》课内实验报告学生姓名:及学号:学院:理学院班级:课程名称:汇编语言实验题目:80X86指令系统指导教师刘力实验师姓名及职称:方向实验师2012年5月23日一、实验题目:80X86指令系统二、实验目的:1. 8086/8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。

2. 8086/8088指令:INC,DEC,LOOP,INT 20H(程序终止),寄存器SI,DI。

3. 8086/8088汇编语言伪操作:BYTE PTR,WORD PTR。

4. 求多字节加法程序。

三、实验内容:1.内存操作数及各种寻址方式使用:内容:MOV AX,1234HMOV AX,[1000H]MOV BX,1002HMOV BYTE PTR[BX],20HMOV DL,39HINC BXMOV [BX],DLDEC DLMOV SI,3MOV [BX+SI],DLMOV [BX+SI+1],DLMOV WORD PTR[BX+SI+2],2846H步骤:1)用A命令键入上述程序,并用T命令逐条运行。

2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注明是什么寻址方式。

思考:有关指令中BYTE PTR及WORD PTR伪操作不加行不行?试一试。

2.多字节加法程序。

程序:MOV DI,1000HMOV CX,8MOV SI,2000HCLCLOP: MOV AL,[SI]ADC [DI],ALINC SIINC DILOOP LOPINT 20H步骤:1)用A命令键入此程序2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。

例如:被加数是十六进制01234567887654 32,加数是010*******abcdef.都是八字节。

D:\>debug-e10000B5F:1000 00.32 22.54 00.76 00.88 59.67 E2.45 E5.2359.01-e20000B5F:2000 74.ef 15.cd 45.ab 6E.05 74.04 65.03 72.0220.013)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确?-d10000B5F:1000 32 54 76 88 67 45 23 01-d20000B5F:2000 EF CD AB 05 04 03 02 01四、实验结果:图1 使用a输入命令图2 执行第一步,查看初始内存内容,立即数寻址图3 执行第二步,查看当前内存内容,直接寻址图4 执行第三步,查看修改前的内存内容,立即数寻址图5 执行第四步,查看修改后的内存内容,基址变址寻址图6 执行第五步,立即数寻址,执行第六步,寄存器寻址,执行第七步,基址变址寻址,查看修改后的内存内容图7 执行第八步,寄存器寻址,执行第九步,立即数寻址,执行第十步,基址变址寻址,查看修改后的内存内容图8 执行第十一步,查看修改后的内存内容,相对基址变址寻址图9 执行第十二步,查看修改前后的内存内容,基址变址寻址图10 有关指令中BYTE PTR及WORD PTR伪操作不加不行图11 使用a输入指令图12 用e输入计算的数据图13 用g执行命令得到结果,用d查看结果,结果存放在内存的1000处,不正确五、实验体会或遇到问题:本次实验的步骤比较繁琐,这使我充分认识到汇编语言运行快程序复杂的特点,在这次实验中,我学到了更多汇编知识,并且大大提高了汇编实际编程操作的熟练度,加深了我对汇编语言的理解。

汇编实验报告3

汇编实验报告3

实验(三)实验5:汇编语言顺序结构程序设计一、实验目的:1.掌握汇编语言顺序结构程序设计方法。

2.熟悉常用汇编指令的用法。

3.学会debug输入、运行小程序,并检查运行情况的方法。

4.学会在PC机上建立、汇编、连接、调试和运行80x86汇编语言程序的过程。

二、实验内容:○调试程序2:下面程序完成将HEX为起始地址的两位十六进制转换成八位二进制数存入BIN单元,请阅读程序,找出其中的错误之处,并上机调试运行该程序.○调试程序3:下面程序完成将HEX为起始地址的两位十六进制(ASCII码)转换成八位二进制书存入BIN单元,请阅读程序,找出其中的错误之处,并上机调试运行该程序。

○编写程序1:实现W=(3X+6Y)*4-8Z,设X=5,Y=3,Z=19.实验前编写好程序。

三、实验代码:调试程序2:DATA SEGMENTX DB 20HY DW ?DATA ENDSCODE SEGMENTASSUME CS: CODE,DS: DATASTART: MOV AX, DATAMOV DS, AXMOV AL, X ;X存在AL里XOR AH, AH ;AH清零SHL AX, 1 ;左移一位存AXMOV BX, AXMOV CL, 2 ;将2存在CLSHL AX, CL ;AX的值左移2位存AXADD AX, BX ;AX与BX相加存AXMOV Y, AX ;AX的值赋予YMOV AH, 4CHINT 21HCODE ENDSEND START该程序实现的功能是:实验将X=20H左移一位和左移2位的值相加赋予Y。

运行结果为:调试程序3:实验代码(修改后的代码):DATA SEGMENTORG 1000HBIN DB ? ; 存放转换后的二进制数 HEX DB '6B' ;待转换的十六进制数6BHORG 1030HDB 00H,01H,03H,04H,05H,06H,07H,08H,09H ;0~9对应的二进制数转换表ORG 1040HDB 0AH,0BH,0CH,0DH,0EH,0FH ;A~F对应的二进制数转换表DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,HEX ;十六进制高位 36H-AL MOV BX,OFFSET BIN ;BIN的偏移地址1000H-BHSUB AH,AH ;AH清0ADD BX,AX ;1036H-BX形成转换表地址MOV DL,[BX] ;DL=(1036H)=06H ;SHL DL,4 ;将DL左移至高4位,DL=60HMOV AL,HEX+1 ;十六进制低位 42H-AL MOV BX,OFFSET BIN ;BIN的偏移地址1000H-BXXOR AH,AH ;AH清0ADD BX,AX ;1042H-BX形成转换表地址MOV AL,BX ;AL=(1024H)=0BH OR AL,DL ;AL=0BH||60H=6BHMOV BIN,AL ;6BH-BIN单元MOV AH,4CHINT 21HCODE ENDSEND START运行结果:调试程序一:DATA SEGMENTDAT DB 0A5H, 2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX, DATAMOV DS, AXMOV AL, DAT ;取被操作数MOV BL, AL ;备份操作数MOV CL, 4 ;设置准备移动的位数SHL BL, CL ;取操作数的高4位MOV DAT+1, BL ;将高BCD数存入DAT+1AND AL, 0FH ;取操作数的低4 位MOV DAT+2, AL ;将低BCD数存入DAT+2MOV AH, 4CHINT 21HCODE ENDSEND START运行结果:编写程序1:实现W=(3X+6Y)*4-8Z的程序:DATA SEGMENTX DB 5Y DB 3Z DB 19W DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXXOR AX,AX ;AX清0MOV AL,3MOV BL,XMUL BL ;3与X相乘存入ALMOV BX,AX ;AX存入BXMOV AL,6MOV CL,YMUL CL ;6与Y相乘存入CLMOV CX,AXADD BX,CX ;BX与CX相加存入BXMOV AX,4MUL BX ;BX与4相乘存入AXMOV BX,AXMOV AL,8MOV CL,Z ;8与Z相加存入ALMUL CLSUB DX,0 DX与0相减存入DXMOV WORD PTR W,BXMOV WORD PTR W+1,DXMOV AH,4CHINT 21HCODE ENDSEND START运行结果:四、实验小结:1.注意输入输出的文件转换和使用方法。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告实验一、汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串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所示。

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

内容包括:总结经验提高编程及调试能力。调试情况,如上机时遇到的问题及解决的办 法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结 果的分析;实验的心得体会等。

成 绩 评 定 教师签名: 2014 年 月 日
实 验 目 的 或 要 求
2、执行结果截图
实 验 原 理 ( 算 法 流 程 )
实验题目 2 在一个字符串中查找某个字符第一次出现的位置。 把上述题目写出一个过程 过程传递两个参数(堆栈传递: (1)要查找的字符串 (2)串的地址。 1、程序清单。
2、执行结果截图
实 验 结 果 分 析 及 心 得 体 会
院 专 年
系: 业: 级:
计算机科学学院
2013 级 汇编语言
课程名称: 学 姓 号: 名:
指导教师:
李娜
2015 年
月 日
年级 专业 实验 名称
2013 级
班号
学号 姓名 实验 类型 设计型 综合型 创新型
8086 汇编实验三 子程序和串指令
实验目的: 掌握子程序设计的原理和方法, 重点掌握子程序编写和调用的过程以及堆栈操作和 参数以及局部变量的概念。掌握串操作指令的用法,注意 DF 标识位以及源串、目标串 的存储和改变。 实验要求: (1)编写子程序 (2)在主程序中调用子程序 (3)实现主程序与子程序的参数传递 实验题目 1 将一个数组的最小值输出。 .实验要求:给定一个数组,数组包含 10 个整型元素,将其按照从小到大的顺序排列后 输出,要求用子程序来实现,主程序调用。例如,输入的数组元素为 1,3,-9,5,12,0,-3,-12,24,34,那么输出是:-12。 提示:找最小值用子程序实现,并用堆栈进行参数传递。 传递的参数为数组的首地址。 1、程序清单。
相关文档
最新文档