汇编语言分支结构实验报告

合集下载

实验二 分支结构程序设计实验

实验二 分支结构程序设计实验

实验二 分支结构程序设计实验1、实验目的和要求:掌握汇编语言分支程序的设计方法;2、实验内容:编程序求分段函数Y 的值。

已知变量X 为16位带符号数, 分段函数的值要求 保存到字单元Y 中。

函数定义如下:1 (当X>0)Y = 0 (当x=0)—1 (当X<0)3、实验仪器与器材:计算机及EMU8086汇编软件等。

4、实验原理:分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。

分支结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。

程序流程图是根据解题分析所绘制的程序执行流程图。

5、实验过程与测试数据(含电路图/程序流程框图):6、实验分析:自己分析7、实验体会:自己总结实验参考程序:DATA SEGMENTX DW -128Y DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV AX,XCMP AX,0JG ISPNJZ ISZNMOV Y,-1JMP FINISHISPN: MOV Y,1JMP FINISHISZN: MOV Y,0FINISH: MOV AH,4CHINT 21HCODE ENDSEND START思考题:把程序修改成如下的分段函数的值—1 (当X>=0)Y=1 (当X<0)。

汇编语言实验报告

汇编语言实验报告

合肥工业大学实验报告课程:汇编语言程序设计专业班级:学号:姓名:实验一Debug程序的使用一. 实验目的1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。

2、掌握8086/8088的寻址方式及多字节数据的处理方法。

二. 实验内容1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

要求:本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。

三. 实验过程和程序基础题:1、利用DEBUG程序中的“E”命令,将两个多字节数“12345678H”和“FEDCBA98H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。

2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。

附加题:1. 从DS:0000H开始的5个16位带符号数分别记为x,y,z,v,w,用E命令初始化为:540,1,-1,1080,0, 试求w=(v-(x*y+z-540))/x2. 完成BX中1的个数的统计。

3. 用串操作指令将DS:0000开始20个字节初始化为:0CCH。

并将这20个字节的内容复制到其后的20个字节里。

四. 实验结果(包括必要的截图)基础题 1:基础题 2:附加题 1:附加题 2:附加题 3:五. 实验体会1. 在汇编语言中,变量的其实都是地址。

2. 在Debug中,数值都是16进制的。

3. 在读写内存中的数据时,必须指出数据类型是byte还是word。

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)

汇编语言程序设计实验报告二(分支循环程序实验)一、实验目的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。

汇编程序设计 分支与循环混合结构程序设计 实验报告

汇编程序设计 分支与循环混合结构程序设计 实验报告
1
《汇编语言程序设计》
实验报告
实验六 分支与循环混合结构程序设计
2
实验目的
1、掌握利用.IF语句实现分支程序的设计方法; 2、掌握利用.REPEAT语句实现循环程序的设计方法; 3、掌握DIV指令的使用特点; 4、掌握地址表的定义和使用方法。
实验内容
实现成绩单的分等级统计功能,在数据段中有成绩单的定义,并包含有若干个分数,程 序根据成绩单数据的个数循环分别统计个分数段成绩的个数,最后输出个等级段的分数个数。 要求:成绩单数据少于100字节,输出的每个档次统计值按两位数显示。
scoreo db 10,13,'Score "Other" count is:$'
table dw scoreo,scoree,scored,scorec,scoreb,scorea ;定nt
mov si,0
begin:
;统计各个分数段的成绩个数
图 6-3 运行程序输出结果察看
3、修改成绩单的内容再重新汇编和运行程序,观察程序的结果变化情况。
5
图 6-4 修改成绩单后,运行程序输出结果察看
4、利用DEBUG工具的U命令反汇编可执行程序,观察.IF语句及.REPEAT语句所对应的汇编指 令情况。
6
图 6-5 利用DEBUG工具的U命令反汇编可执行程序并观察
实验体会
1. 分支伪指令的具体格式如下:
图 6-8 分支伪指令格式 2. REPEAT 型循环伪指令:
REPEAT 型循环在执行完循环体后,才判定逻辑表达式 condition 的值。若该 表达式的值为真,则终止该循环,并将执行伪指令.UNTIL[CXZ]后面的指令,否 则,将向上跳转到伪指令.REPEAT 之后的指令,为继续执行其循环体作准备。

《汇编语言》实验报告

《汇编语言》实验报告

《汇编语言》实验报告实验名称:汇编语言实验报告实验目的:通过实验了解汇编语言的基本概念、语法结构和程序设计方法,掌握汇编语言的编写方法。

实验时间:2024年1月1日实验地点:实验室一、实验背景汇编语言是计算机硬件和软件之间的桥梁,通过汇编语言可以直接操作计算机的底层硬件。

汇编语言是一种低级语言,使用汇编语言可以实现对计算机内存、寄存器等硬件资源的直接操作,从而实现程序的功能。

本实验通过编写汇编语言程序,加深对汇编语言的理解。

二、实验过程1. 确定实验环境:使用DOSBox模拟DOS环境进行汇编程序编写和调试。

2. 编写第一个汇编程序:编写一个简单的汇编程序,将字符串“Hello, World!”输出到屏幕上。

3.程序分析:a.定义要输出的字符串,将字符串存储在数据段中。

b.设置段寄存器,将数据段地址加载到DS寄存器中。

c.设置显示模式和光标位置。

d.将字符串逐个字符输出到屏幕上。

e.关闭显示模式。

4. 编译运行:使用汇编语言的编译器将汇编程序转换成机器码,并在DOSBox中运行程序。

5.调试程序:根据程序运行结果和分析,调试程序中存在的错误,并进行改正。

三、实验结果与分析经过多次编写和调试,我们成功实现了将字符串“Hello, World!”输出到屏幕上的功能。

通过程序分析和调试过程,加深了对汇编语言的理解和掌握。

四、实验总结通过本次实验,我们深入了解了汇编语言的基本概念、语法结构和程序设计方法。

通过实际编写汇编语言程序,对汇编语言的编写方法有了更加深入的认识。

同时,通过调试程序的过程,我们也提高了自身的问题解决能力和分析能力。

在今后的学习和工作中,我们将继续学习和深入研究汇编语言,提高自己的编程能力和创新思维能力。

总体而言,本次实验给我们带来了很大的收获,我们以后将更加努力地学习汇编语言,提高自己的编程水平,为以后的学习和工作做好充分的准备。

汇编语言实验报告(分支)

汇编语言实验报告(分支)
西安财经学院信息学院
《汇编语言程序设计》实验报告
实验名分支结构程序设计实验室实验楼403实验日期2013/06/03
1、实验目的及要求
1.学习调试程序,查找逻辑错误;
2.学习分支语句的编程和调试;
3.学习循环语句的编程和调试。
二、实验环境
硬件环境:一台微型计算机;
软件环境:windows 7
链接程序:LINK.EXE
调试环境:DOSBOX0.74虚拟平台。
3、实验内容
定义10个数据,分别为“3, 0, -1, 45, 2, -7, 10, 8, -9,-1”。统计其中正数的个数,并把结果存放在内存变量M中。
四、实验过程:
5、源程序清单
程序源代码如下:
DSEGSEGMENT
MSGDB 3, 0, -1, 45, 2, -7, 10, 8, -9, -1
MDB ?
DSEGENDS
CSEGSEGMENT
ASSUMECS: CSEG, DS: DSEG
START:MOVAX, DSEG
MOVDS, AX
MOVCX, 10
MOVAL, 0
LEASI, MSG
L1:MOVBL, [SI]
CMPBL, 0
JBENEXT
INCAL
NEXT:INCSI
LOOPL1
MOVM, AL
MOVAL, 0
MOVAH, 4CH
INT21H
CSEGENDS
ENDSTART
6、实验体会
本次实验相对于之前的所有程序,是最顺利的一次,完成时间也最快,其中一个原因是上次实验所积累的Байду номын сангаас心和有用的、有效的经验。通过本次实验,我掌握了分支语句的编程和调试过程,同时也巩固了学习循环语句的编程和调试过程,更一步地增长了信心和增强了理论知识。

汇编实验报告(详细版)

汇编实验报告(详细版)

计算机组成与汇编语言(实验报告)内容: 实验一、六、七、八院系专业:计算机学院计算机科学与技术姓名: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。

分支程序设计实验实验报告

分支程序设计实验实验报告

分支程序设计实验实验报告————————————————————————————————作者:————————————————————————————————日期:ﻩ实验二分支程序设计实验实验报告实验名称:分支程序设计实验指导教师罗志祥专业班级光信1006 姓名张博学号U201013339 联系方式一、任务要求:熟练掌握K eil C环境下汇编语言程序的调试方法,加深对汇编语言指令、机器码、寻址方式等基本内容的理解,掌握分支程序和简单程序的设计与调试方法,了解并行IO 口的使用。

1. 设有8bits 符号数X 存于外部R AM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写程序。

240/2204020X X Y X X XX ⎧≥⎪=<<⎨⎪≤⎩当当当2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P 0、P 1、P2端口输出(以压缩B CD 码的形式)。

P3.0为低电平时开始计时,为高电平时停止计时。

提高部分(选做):a . 实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P 2口输出。

利用P3.7状态选择加、减计数方式。

b. 利用P3口低四位状态控制开始和停止计数,控制方式自定。

二、设计思路:1.分支函数程序设计:首先将X 赋给累加器A ,与40比较大小,将大于或等于40的执行乘方操作;小于40的再与20做比较,大于20的执行取除法操作,小于或等于20的执行取反操作。

最后将计算结果Y 存于片外的RAM 上。

2.电子时钟程序设计思路:首先用循环程序的嵌套实现一个1s 的延时,同时让记秒的端口P2同步加一,到60后清零;再让此循环执行60次实现1min 的延时,同时让P1同步加一,到60后清零;再让分钟的循环执行24次,实现1hour 的延时,同时让P 0同步加一。

至此循环,即可实现24小时的时钟功能。

(注:本计算机的晶振频率为12MHz)3.4位十进制加、减1计数程序思路:低位的个位和十位赋给一个寄存器,而将高位即百位千位赋给另外一个寄存器,通过循环程序使低位数循环100次即向高位进位或借位,高位循环100次后即回归初始状态,同时设计两个子函数分别执行加一、减一操作。

汇编语言分支结构实验报告

汇编语言分支结构实验报告
五、实验过程
实现根据x的值给出y的值的算术算法;
(1)用MASM程序把ASM文件转换成OBJ文件,
说明:MASM在D:\下,bb.asm在F:\MASM\下
(2)用LINK程序把ASM文件转换成EXE文件
(3)用U返汇编
(4)用t命令单步执行程序,实现数据段的初始化。
把x的值1传到寄存器AX中
用D命令可看到已将1写入AX的0000单元
XXXX学院信息学院
《汇编语言程序设计》实验报告
实验名顺序结构程序设计实验室实验楼403实验日期2013-6-19
一、实验目的及要求
1)熟悉命令格式,功能,加强对指令系统的理解;
2)编写简单分支结构程序;
3)单步跟踪调试,观察寄存器的变化和指令执行的结果;
二、实验环境
硬件环境:一台微型计算机;
软件环境:windows xp,debug环境,masm
三、实验内容
实现根据x的值给出y的值的算术算法;
x的值小于0,y=c
x的值等于0,y=b
x的值大于0,y=a
四、设计:
在数据段中定义变量x =1,在代码段中,先进行初始化。把x的值传给al,再将al的值与0作比较,如果小于则跳到L1分支中去,如果等于则跳到L2分支中去,如果大于则跳到L3分支中去,L1中给dl赋值99(c),L2中给dl赋值98(b),L3中给dl赋值97(a)。根据题意最终结果应为a。
(5)与0进行比较后跳过JL
3,将61h(97(a))送给DL
(8)程序结束
(9)用g命令一步执行程序.,结果为a.
六、[源程序清单]
data segment
x db1
data ends
code segment

汇编语言试验报告

汇编语言试验报告

实验二报告一、实验目的掌握汇编语言分支结构程序设计方法以及int 21h 常用中断方法。

二、实验内容编写程序,实现 3 个数比较大小,并从高到低输出结果。

调试该程序,并输出显示结果本实验是考查学生对分支程序设计的掌握程度,掌握条件转移指令的应用。

三、实验分析运用循环语句将三个数分别输入缓冲区,使用比较字符,运用跳转语句,实现选择升序还是降序排序,再对三个进行比较然后排序。

排序完成后再分别赋给缓冲区中的数组,最后输出!四、实验代码DATA SEGMENTbuf db 3 dup (?)buf1 db?str db 0ah,0dh,'input 3 numbers :$'str0 db 0ah,0dh,'If print in asc order,input 0;else input 1 :$'str1 db 0ah,0dh,'The sort in an descending order:$'str2 db 0ah,0dh,'The sort in a ascending order:$'str3 db 0ah,0dh,'---------------------------------------------$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:mov ax,datamov ds,axmov cx,3lea dx,str ;显示提示信息mov ah,09hint 21hlea bx,bufloop1:mov ah,01hint 21hmov [bx],alinc bxloop loop1lea dx,str0 ;显示提示信息mov ah,09hint 21hmov dx,offset buf1 ;为输出的字符选择存储空间mov ah,01hint 21hcmp al,30h ;输入的字符与0比较jz ascend ;若输出的字符等于0,则跳转到ascend,执行升序descend: ;降序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljae n1 ;大于等于则跳转xchg al,bln1:cmp al,cljae n2xchg al,cln2:cmp bl,cljae n3xchg bl,cln3:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str1mov ah,09hint 21hcall pascend: ;升序排列mov si,offset bufmov al,[si]mov bl,[si+1]mov cl,[si+2]cmp al,bljnae n4 ;小于等于则跳转xchg al,bln4:cmp al,cljnae n5xchg al,cln5:cmp bl,cljnae n6xchg bl,cln6:mov [si],almov [si+1],blmov [si+2],cllea dx,str3mov ah,09hint 21hlea dx,str2mov ah,09hint 21hcall pp procmov si,offset bufmov cx,3fe:mov dl,[si]mov ah,02hint 21hmov dl,20h ;显示空格mov ah,02hint 21hinc siloop femov ah,4chint 21hretp endpCODE ENDSEND START五、总结通过本次实验,我发现自己对跳转语句的不熟悉,导致实验过程中遇到好多错误,还有没能实现进行多个数的比较,有待改进。

汇编语言分支结构实验报告

汇编语言分支结构实验报告
3.编写程序,判断键盘输入的值,若输入数字0则显示'input digit0 !$',若输入数字1则显示'input digit1 !$',……,若输入数字9则显示'input digit9 !$';否则显示'input character !$'。
1)输入源程序:
data segment
dis0 db 'input digit0 !$'
exit:mov ah,4ch
int 21h
code ends
end start
3.编制程序,判断键盘输入的一个数,若输入1~5,则将该数转换为二进制数存放至RLT单元,若输入其它数则显示输出“ERROR”。
答:
data segment
rlt db dup(5)
dis db'error!$'
data ends
jmp short p1
jmp short p2
jmp short p3
jmp short p4
jmp short p5
jmp short p6
jmp short p7
jmp short p8
jmp short p9
jmp short p10
p0:lea dx,dis0
mov ah,9
int 21h
int 21h
code ends
end start
2.如果不采用上述方法判断两数的符号,而采用两数异或的方法判断两数符号,当两数符号不相同时,其结果的最高位必定为1;当两数符号相同时,其结果的最高位必定为0;再根据其中一数的符号是正还是负决定两数是正数还是负数。请做程序完成。

三个《汇编语言》实验报告

三个《汇编语言》实验报告

实验二分支与循环程序设计实验一、实验目的1.掌握汇编语言程序上机过程。

2.掌握汇编语言结构。

3.学习汇编语言的伪操作。

4.了解汇编程序、连接程序、DOS系统装入和返回功能。

5.掌握用DEBUG调试汇编语言程序的方法二、实验内容1、输入一个字符,回车后输出一个字符串,说明其类型。

2、学会定义字符串和输出字符串。

3、学会在屏幕上输出一个字符,通过判断键盘按下一个键来执行分支程序。

三、实验设备及仪器PC兼容计算机及系统软件四、实验要求编制程序,实现如下功能:1、当输入0~9的数字,按回车后随即出现一个shuzi的字符串。

2、当输入一个字母,按回车后随即出现一个zimu的字符串。

3、当输入一个符号,按回车后随即出现一个fuhao的字符串。

4、先判断ASCII码,将数字、字母、符号的ASCII分开,当你输入一个字符以后程序根据你的字符的ASCII来跳转到输出其相应的字符串。

五、问题思考1.汇编语言程序中语句END后的标号作用是什么?答:END [label]其中标号指示程序开始执行的起始地址。

如果多个程序模块相连接,则只有主程序要使用标号,其他子程序模块则只使用END 而不必使用标号。

······,用END START表示程序结束。

end叫做结束语句,它的格式为:END 表达式也就是说,end start是一条语句,不是两条,它是一个完整的表达式!你要知道的是“汇编程序并非将在遇END时结束汇编”,而是在“遇END语句时结束汇编”。

2.将字符串分别定义在不同的段,怎么取其地址,取地址有几种方法?六、实验报告1.画出各程序流程图,列出程序清单,加上适量注释。

2.回答问题思考。

3.针对实验目的做小结。

assume cs:code,ds:data data segmentx db 'shuzi','$'y db 'zimu','$'z db 'fuhao','$'data endscode segmentstart:mov ax,datamov ds,axmov ah,0int 16hcmp al,'0'jg shu2zi1:cmp al,'A'jg zi2zi3:cmp al,'a'jg zi4zi4: cmp al,'z'jl zichujmp fuchuzi2: cmp al,'Z'jl zichujmp zi3shu2: cmp al,'9'jl shuchujmp zi1 shuchu: mov ah,2mov bh,0mov dh,5mov dl,12int 10hmov ax,datamov ds,axmov dx,offset xmov ah,9int 21hdelay1:mov ah,0int 16hcmp al,71hjnz delay1;键盘输入,如果不是Q,等待mov ax,4c00hint 21hzichu: mov ah,2mov bh,0mov dh,5mov dl,12int 10hmov ax,datamov ds,axmov dx,offset ymov ah,9int 21hdelay2:mov ah,0int 16hcmp al,71hjnz delay2;键盘输入,如果不是Q,等待mov ax,4c00hint 21hfuchu: mov ah,2mov bh,0mov dh,5mov dl,12int 10hmov ax,datamov ds,axmov dx,offset zmov ah,9int 21hdelay:mov ah,0int 16hcmp al,71hjnz delay;键盘输入,如果不是Q,等待mov ax,4c00hint 21hcode endsend start实验三中断程序设计实验二、一、实验目的三、1、掌握DOS系统提供的DOS和BIOS功能调用方法。

汇编语言--分支结构程序设计实验

汇编语言--分支结构程序设计实验

汇编语言--分支结构程序设计实验汇编语言实验报告实验6 汇编语言分支结构程序设计学院:计算机学院班级:姓名:梁建辉学号: [1**********]72019年12月1日1. 实验目的:(1)(2)(3)(4)掌握汇编语言顺序结构设计方法熟悉常用汇编指令的用法学会用debug输入、运行小程序,并检查运行情况的方法学会在pc机上建立、汇编、连接、调试和运行80x86汇编语言程序的过程2. 实验内容:(1)调试程序1:将存储单元DAT+1中的两个压缩的bcd码拆成2个非压缩的不承担码(高位bcd码放在DAT+1单元,地位bcd码放在DAT+2单元)。

程序如下:DATA SEGMENTDAT DB 0A5H,2 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX, DATAMOV DS, AXMOV AL, DATMOV BL, ALMOV CL, 4SHL BL, CLMOV DAT+1, BLAND AL, 0FHMOV DAT+2, ALMOV AH, 4CHINT 21HCODE ENDSEND START上机运行该程序并检查运行结果是否正确。

3.实验运行结果:(1)1401:0000 B80014 MOV1401:0003 8ED8 MOV DS,AX1401:0005 A00000 MOV AL,[0000]1401:0008 8AD8 MOV BL,AL1401:000A B104 MOV CL,041401:000C D2E3 SHL BL,CL1401:000E 881E0100 MOV [0001],BL1401:0012 240F AND AL,0F1401:0014 A20200 MOV [0002],AL1401:0017 B44C MOV AH,4C1401:0019 CD21 INT 211401:001B FE8946F6 DEC BYTE PTR [BX+DI+F646]1401:001F EB06 JMP 0027段首地址为:1400运行前的结果:-d 1400:0,F1400:0000................运行后的结果:-gProgram terminated normally-d 1400:0,f1400:0000.P..............单步运行结果:BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13F0 ES=13F0 SS=1400 CS=1401 IP=0003 NV UP EI PL NZ NA PO NC 1401:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=A5 -tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV BL,AL-tAX=14A5 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCMOV CL,04-tAX=14A5 BX=00A5 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PO NCSHL BL,CL-AX=14A5 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401NV UP EI PL NZ NA PE NCMOV [0001],BLDS:0001=50 -tBX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401NV UP EI PL NZ NA PE NC 1401:0012 240F AND AL,0F-tBX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NCMOV [0002],ALDS:0002=05 -tAX=1405 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1401 NV UP EI PL NZ NA PE NC MOV AH,4C-AX=4C05 BX=0050 CX=0004 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000SS=1400 CS=1401 NV UP EI PL NZ NA PE NC INT 21程序2:DATAX Y SEGMENT DB 20H DW ?ENDSSEGMENTMOV AX,DATA;把X的值转移到AL ;清零AH ;定义X为字类型并赋值20H ;定义Y为字节类型 DATA CODESTART: ASSUME CS:CODE,DS:DATA MOV MOV DS,AX AL,X XOR AH,AH SHL AX,1 MOV MOV ;将目的操作数向左移动1位 ;移位大于1,需用CL ;将目的操作数向左移动2位 ;把AX与BX中的值相加 ;返回DOS状态下 BX,AX CL,2 SHL AX,CL ADD AX,BX MOV MOV Y,AX AH,4CH INT 21H ENDS END START CODE运行结果:1401:0000 B80014 MOV AX,14001401:0003 8ED8 MOV DS,AX1401:0005 A00000 MOV AL,[0000]1401:0008 32E4 XOR AH,AH1401:000A D1E0 SHL AX,11401:000C 8BD8 MOV BX,AX1401:000E B102 MOV CL,021401:0010 D3E0 SHL AX,CL1401:0012 03C3 ADD AX,BX1401:0014 A30100 MOV [0001],AX1401:0017 B44C MOV AH,4C1401:0019 CD21 INT 211401:001B FE8946F6 DEC BYTE PTR [BX+DI+F646]1401:001F EB06 JMP 0027-首地址:1400运行前结果:-d 1400:0,f1400:0000...............-t运行后结果:Program terminated normally-d 1400:0,f1400:0000@..............单步调试:-tAX=-tAX=-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=1400CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000] DS:0000=20BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-gBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8 MOV DS,AX-tAX=1400 BX=0000 CX=002B DX=0000 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=20-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-gBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13EB ES=13EB SS=1400 CS=13FC IP=0003 NV UP EI PL NZ NA PO NC 13FC:0003 8ED8MOV DS,AX-tAX=13FB BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1400 ES=13EB SS=13FB CS=13FC NV UP EI PL NZ NA PO NCMOV AL,[0000]DS:0000=20-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL NZ NA PO NCXOR AH,AH-tBX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13EB SS=1400 CS=13FC NV UP EI PL ZR NA PE NCSHL AX,1-g程序3:DATA SEGMENTORG 1000HBIN DB ?HEX DB 6BhORG 1030HDB 00H, 01H,02H,03H,04H,05H,06H,07H,08H,09H ORG 1040HDB 0AH,0BH,0CH,0DH,0EH,0FHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,HEXMOV BX,OFFSET BINSUB AH,AHADD BX,AXMOV DL,[BX]MOV CL,4SHL DL,CLMOV AL,HEX+1MOV BX,OFFSET BINXOR AH,AHADD BX,AXMOV Ax,BXOR Al,DLMOV BIN,ALMOV AH,4CHINT 21HCODE ENDSEND START运行结果:1505:0000 B80014 MOV1505:0003 8ED8 MOV DS,AX1505:0005 A00110 MOV AL,[1001] 1505:0008 BB0010 MOV BX,1000 1505:000B 2AE4 SUB AH,AH1505:000D 03D8 ADD BX,AX1505:000F 8A17 MOV DL,[BX]1505:0011 B104 MOV CL,041505:0013 D2E2 SHL DL,CL1505:0015 A00210 MOV AL,[1002] 1505:0018 BB0010 MOV BX,1000 1505:001B 32E4 XOR AH,AH1505:001D 03D8 ADD BX,AX1505:001F 8BC3 MOV AX,BX首地址:1400-运行前结果:-d 1400:0,f1400:0000.....................-运行后结果:-d 1400:0,f1400:0000...........单步调试:BX=0000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000DS=13F0 ES=13F0 SS=1400 CS=1505 IP=0003 NV UP EI PL NZ NA PO NC 1505:0003 8ED8 MOV DS,AX-TAX=1400 BX=0000 CX=107A DX=0000 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV AL,[1001]DS:1001=6B-TBX=0000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NCMOV BX,1000-TAX=146BCX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCSUB AH,AH-TBX=1000 CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL ZR NA PE NC ADD BX,AX-AX=006B CX=107A DX=0000 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOV DL,[BX]DS:106B=32-tAX=006B BX=106B CX=107A SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NC MOVCL,04-tAX=006B BX=106B CX=1004 DX=0032 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PO NCSHLDL,CL-tAX=006B BX=106B CX=1004 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PO CYMOV AL,[1002]DS:1002=00-tBX=106B CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PO CYMOVBX,1000-AX=0000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO CYXORAH,AH-tAX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL ZR NA PE NCADD BX,AX-tAX=0000 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505NV UP EI PL NZ NA PE NCMOV AX,BX-tBX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 NV UP EI PL NZ NA PE NCOR AL,DL-tBX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV [1000],ALDS:1000=20--tAX=1020 BX=1000 CX=1004 DX=0020 SP=0000 BP=0000 SI=0000 DI=0000DS=1400 ES=13F0 SS=1400 CS=1505 NV UP EI PL NZ NA PO NCMOV AH,4C-心得体会:写程序时,对于有些特定的指令不太熟,有时还得借助于课本,不能脱离课本编程。

汇编实验报告

汇编实验报告

汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。

通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。

二、实验环境本次实验使用的操作系统为 Windows 10,汇编语言编译器为MASM 615。

三、实验内容(一)数据传送与算术运算1、编写程序实现将两个 16 位的整数相加,并将结果存储在指定的内存单元中。

2、实现数据在不同寄存器和内存单元之间的传送。

(二)逻辑运算与移位操作1、对给定的两个字节数据进行逻辑与、或、异或操作,并观察结果。

2、进行移位操作,包括左移和右移,理解移位对数据的影响。

(三)循环与分支结构1、利用循环结构计算 1 到 100 的整数之和。

2、根据给定的条件,使用分支结构实现不同的操作。

(四)子程序调用1、编写一个子程序,实现两个数的乘法运算。

2、在主程序中调用该子程序,并输出结果。

四、实验步骤(一)数据传送与算术运算1、打开 MASM 编译器,新建一个汇编源文件。

2、使用`MOV` 指令进行数据传送,将两个整数分别存储在寄存器`AX` 和`BX` 中。

3、使用`ADD` 指令将两个数相加,结果存储在`CX` 寄存器中。

4、最后,使用`MOV` 指令将结果存储到指定的内存单元。

(二)逻辑运算与移位操作1、在源文件中定义两个字节变量,并初始化其值。

2、使用逻辑运算指令(如`AND`、`OR`、`XOR`)对这两个变量进行操作。

3、使用移位指令(如`SHL`、`SHR`)对变量进行移位,并观察结果。

(三)循环与分支结构1、对于循环结构,使用`LOOP` 指令实现从 1 到 100 的累加。

2、在分支结构中,根据给定的条件(如比较两个数的大小),使用`JZ`、`JL` 等指令执行不同的分支操作。

(四)子程序调用1、定义一个子程序,使用参数传递的方式接收两个数,并进行乘法运算。

汇编语言实验报告

汇编语言实验报告

汇编语言实验报告一、实验目的本次汇编语言实验的主要目的是通过实际操作和编程实践,深入理解汇编语言的基本概念、指令系统和编程方法,提高对计算机底层硬件操作的认识和编程能力。

二、实验环境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 指令进行移位操作。

汇编语言实验报告

汇编语言实验报告

实验报告一:汇编语言实验基础一.实验目的: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命令检查键入的程序及对应的机器码。

汇编(循环、分支、子程序)实验报告

汇编(循环、分支、子程序)实验报告
1.设计:
分别为十个成绩、成绩总个数、分段的5个区间申请内存单元,初始化数据段;将AX,BX,CX压栈,保留原始数据。选取第一个成绩,存入AX中,该数据除以10,得到商存入BX,判断商的所属区间,给所属区间加1,继续下一个,循环直到十个全部判断结束,pop出栈,得到属于各区间的成绩个数,程序结束。
2.源程序清单
2.源程序清单
datasegment
xdw 1ah
ydw 0ah
zdw 01h
maxdw ?
dataends ;数据段定义
codesegment
assume ds: data, cs: code
start:
mov ax, data
mov ds, ax ;初始化数据段
mov ax, x
cmp ax, y
《汇编语言程序设计》实验报告
实验名循环、分支、子程序设计实验室实验楼实验日期2014-06-09
一、实验目的及要求
1.熟悉命令格式,功能,加强对指令系统的理解
2.编写简单循环、选择、子程序的结构程序
3.单步跟踪调试,观察寄存器的变化和指令执行的结果
二、实验环境
硬件环境:一台微型计算机
软件环境:windows xp,debug环境,masm
2.源程序清单
datarea segment;定义数据段
buffer db 80 dup(?) ;预申请了以buffer为首地址的内存单元
flag db ?
datarea ends
prognam segment;定义编码段
main proc far
assume cs:prognam,ds:datarea
(5).初始数据段
(6).分别将AX,BX,CX,SI压栈,保留初始数据,

分支结构实验报告

分支结构实验报告

天津大学<<汇编语言程序设计>>课程设计学院:职业技术教育学院学号:3008212012姓名:黄立宁班级:1指导教师:谢永超2010-4-26内容简介本程序为利用q、w、e、r、t、y、u、1-7作演奏音符制任意音乐的程序。

该程序能记录所演奏的音乐,能回放所演奏的音乐。

运行过程中,通过屏幕上显示的音符,输入一个不同的数发出不同的音调,即制作出不同的音乐。

每输入一数,屏幕上音符及提示闪烁一次,当输入数为9时,终止音乐的制作,将之前的音乐存入堆栈中,随后送入端口地址,即演奏出刚刚制作的音乐。

成绩:教师签字:目录开发环境 (1)功能描述 (1)系统功能结构框图 (2)程序代码 (3)运行结果 (11)课程设计体会 (12)参考文献 (13)题目:键盘控制发声程序----电子琴一、开发环境1.硬件环境微型计算机一台2.软件环境WindowsXP操作系统使用工具MASM 5.0,要进行汇编语言的编辑和运行,需要以下工作环境:⑴编辑程序,如EDIT.EXE、WORD⑵汇编程序,如MASM.EXE⑶连接程序,如LINK.EXE⑷调试程序,如DEBUG.EXE二、功能描述利用q、w、e、r、t、y、u、1-7作演奏音符制任意音乐的程序。

该程序能记录所演奏的音乐,能回放所演奏的音乐。

运行过程中,通过屏幕上显示的音符,输入一个不同的数发出不同的音调,即制作出不同的音乐。

每输入一数,屏幕上音符及提示闪烁一次,当输入数为9时,终止音乐的制作,将之前的音乐存入堆栈中,随后送入端口地址,即演奏出刚刚制作的音乐。

三、系统功能结构图(续上图):四、程序代码;利用q、w、e、r、t、y、u、1-7演奏音符的程序,能记录所演奏的音乐,能回放所演奏的音乐;********************************************************** DATA SEGMENTmsg DB 0DH,0AH,' 'DB 0DH,0AH,' [ 1 2 3 4 5 6 7 ]'DB 0DH,0AH,' [ q w e r t y u ]'DB 0DH,0AH,' _________________'DB 0DH,0AH,' 'DB 0DH,0AH,' 'DB 0DH,0AH,' *************************************' DB 0DH,0AH,' NOTICE ' DB 0DH,0AH,' Press 1-7 to make music and play it.'DB 0DH,0AH,' Press 9 to interrupt.'DB 0DH,0AH,' ********************************','$';音调(后面用到-1判断音乐播是否放完)sound_0 DW -1sound_11 DW 441,-1sound_12 DW 495,-1sound_13 DW 556,-1sound_14 DW 589,-1sound_15 DW 661,-1sound_16 DW 742,-1sound_17 DW 833,-1sound_1 DW 882,-1sound_2 DW 990,-1sound_3 DW 1112,-1sound_4 DW 1178,-1sound_5 DW 1322,-1sound_6 DW 1484,-1sound_7 DW 1655,-1time DW 25DATA ENDS;**********************************************************STACK SEGMENTDb 200 DUP ('STACK') ;将音符放入堆栈中STACK ENDS;********************************************************** CODE SEGMENTASSUME DS:DATA,SS:STACK,CS:CODE ;段说明START:MOV AX,DATAMOV DS,AXMOV aH,00 ;初始化显示方式MOV AL,00INT 10H;------------------定义一个显示宏SHOW MACRO bLEA DX,bMOV AH,9 ;将以"$"结尾的字符串显示在屏幕上,并将入口参数字符串的首地址的段基址和偏移地址分别放入DS和DX中INT 21HENDM;------------------定义一个声音宏onesound macro soundis,jumpis,letterisCMP AL,letterisJNZ jumpisLEA SI,soundisLEA BP,DS:timeCALL MUSICJMP inputENDM;--------------------show msg ;显示音符和提示;--------------------INPUT: MOV AH,01HINT 21H ;从键盘输入一个字符并显示CMP AL,'9'jnz gomov ah,4ch ;若输入9则返回DOS,终止制作音乐 int 21hgo: onesound sound_11,a0,'q'a0: onesound sound_12,b0,'w'b0: onesound sound_13,c0,'e'c0: onesound sound_14,d0,'r'd0: onesound sound_15,e0,'t'e0: onesound sound_16,f0,'y'f0: onesound sound_17,g0,'u'g0: onesound sound_1,h0,'1'h0: onesound sound_2,i0,'2'i0: onesound sound_3,j0,'3'j0: onesound sound_4,k0,'4'k0: onesound sound_5,l0,'5'l0: onesound sound_6,m0,'6'm0: onesound sound_7,n0,'7'n0: onesound sound_0,o0,alo0: jmp input;---------------------发声(将堆栈中的音符数据送到端口地址) GENSOUND PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DI;时间间隔定时器(计数器2的初始化过程)MOV AL,0B6HOUT 43H,AL ;给公用的控制寄存器(地址为43H)赋值 MOV DX,12HMOV AX,348ch ;频率除数DIV DIOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61H ;扬声器驱动(61H为输出寄存器分配I/O端口号)MOV AH,ALOR AL,3OUT 61H,AL ;打开扬声器WAIT1: MOV CX,3314 ;等待下一音符的到来call waitfDELAY1: DEC BX ;声音的延迟JNZ WAIT1MOV AL,AH ;关闭扬声器OUT 61H,ALPOP DIPOP DXPOP CXPOP BXPOP AXRETGENSOUND ENDP;*******************************waitf proc nearpush axwaitf1:in al,61hand al,10hcmp al,ahje waitf1mov ah,alloop waitf1 ;CX=0时退出循环,继续键入音符制作音乐pop axretwaitf endp;******************************MUSIC PROC NEARPUSH DSSUB AX,AXPUSH AXFREG: MOV DI,[SI]CMP DI,-1 ;音乐是否放完JE END_MUSMOV BX,DS:[BP] ;将音符放入堆栈CALL GENSOUND ;调发声子程序 ADD SI,2ADD BP,2JMP FREGEND_MUS:RETMUSIC ENDPCODE ENDS;*******************************END START五、运行结果图1 生成OBJ文件图2 生成EXE文件图3 运行结果六、课程设计体会这次课程设计使我对汇编语言有了更进一步的了解和熟悉,实际操作编写程序,并使之能在计算机上正确运行真的有点困难。

汇编程序设计 分支结构的程序设计 实验报告

汇编程序设计 分支结构的程序设计 实验报告

图 5-3 程序运行结果 3、程序运行中不输入月份值(直接回车),或输入非法月份值,观察程序执行的情况。
实验体会
图 5-4 直接回车或输入非法月份值观察输出
1.无条件转移指令JMP(Unconditional Jump): JMP指令的一般形式: JMP 标号/Reg/Mem
JMP 指令是从程序当前执行的地方无条件转移到另一个地方执行。这种转移可以是一个 短(short)转移(偏移量在[-128, 127]范围内),近(near)转移(偏移量在[-32K, 32K]范围内) 或远(far)转移(在不同的代码段之间转移)。
系统调用功能号送ahint21h此调用的入口参数为内存缓冲区中字符串的首地址该字符必须以结尾出口参数无调用执行结果是在屏幕上显示一个字符串5
1
《汇编语言程序设计》
实验报告
2
实验五 分支结构程序设计
实验目的
1、掌握利用无条件转移指令JMP和有条件转移指令实现多分支程序的设计方法。 2、掌握用DOS的中断调用,实现在程序执行过程中从键盘动态输入字符串的方法。 3、掌握程序中标号的定义和使用。
shl al,1 ;月份再乘 4 对应了 MON 字符串中从首地址开始的字符相对位置
xor ah,ah ;1 月份从 0 位置开始即 JAN,...5 月份从位置 16 开始即 MAY
lea si,mon ;找到被显示月份字符的位置
add si,ax
mov cx,3
output: mov dl,[si] ;输出对应月份英文缩写
6
图 5-5 无符号数的条件转移指令
3. 在编写分支程序时,要尽可能避免编写“头重脚轻”的结构,即:当前分支条件成立时,
将执行一系列指令,而条件不成立时,所执行的指令很少。这样就使后一个分支离分支点较 远,有时甚至会遗忘编写后一分支程序。这种分支方式不仅不利于程序的阅读,而且也不便 将来的维护。

(最新版)汇编实验报告汇总

(最新版)汇编实验报告汇总

湖北工程学院计算机与信息科学学院实验报告2013—2014学年第_二学期课程名称:汇编语言程序设计班级:_______________________学号:_________________姓名:___________ 雷震_______________ 任课教师:叶从欢_____________实验一:顺序结构一、实验目的:1.加深对汇编的理解;2.掌握汇编程序的设计方法;3.学会使用顺序结构。

二、实验内容:定义变量A、B、C、D,编写程序实现:(a * b + c - 70 )/ a。

并将最后的商保存在D中,余数保存在D+2中。

本实验中:a = 15, b = 75, c = 70 。

程序中,定义字型变量A、B、C、D。

A B、C分别保存算数表达式中的数值a、b、c,D保存算数运算的最终结果。

程序开始,先将变量A、B、C赋初值,计算A乘以B的值,将结果保存在DX AX中,然后逐步计算A*B+C, A*B+C-70和(A*B+C-70)/A。

最后计算结果的商保存在A对,余数保存在D对,最终将AX赋值给D, DX赋值给D+2。

程序运行完毕,程序返回。

三、实验步骤1.程序设计流程图2.调试与运行(1)首先进入DO系统,进入目标文件所在的系统盘和文件夹;(2)输入“ MASM TEST,此命令是调用宏汇编程序MAS对源文件TEST.AS进行编译,TES■是文件的名称,生成目标文件TEST.OBJ(3)若汇编无错误,则用命令“ LINK TEST进行连接,生成可执行文件TEST.EXE(4)若连接成功,则用命令“ TEST运行四•总结与体会通过这次实验,我初步了解了汇编程序设计的基本方法和步骤,掌握了汇编程序设计的顺序结构。

顺序结构是其他结构的基础,学好顺序结构对进一步学习汇编的好处不言而喻。

在本程序中,主要分为加法,减法,乘法,除法,本程序基本实现了四则运算的功能,该程序所完成的运算式为:(a * b + c - 70 )/ a。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
start :push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov al,x
cmp al,0
jl L1 ;x的值小于0,y=c
je L2 ;x的值等于0,y=b
jmp L3 ;x的值大于0,y=a
L1:mov dl,99
jmp exit
L2:mov dl,98
jmp exit
L3:mov dl,97
jmp exit
exit:
mov ah,2
int 21h
ret
main endp
code ends
end start
七、总结
通过本次实验,我对汇编语言程序分支执行有了更深的认识,学习了分支结构汇编程序,不仅加深了对指令的了解,自己能编写一些简单的汇编程序,而且能够调试与运行JZ
(7)到达JMP,跳到L3,将61h(97(a))送给DL
(8)程序结束
(9)用g命令一步执行程序.,结果为a.
六、[源程序清单]
data segment
x db1
data ends
code segment
main proc far
assume cs:code,ds:data
XXXX学院信息学院
《汇编语言程序设计》实验报告
实验名顺序结构程序设计实验室实验楼403实验日期2013-6-19
一、实验目的及要求
1)熟悉命令格式,功能,加强对指令系统的理解;
2)编写简单分支结构程序;
3)单步跟踪调试,观察寄存器的变化和指令执行的结果;
二、实验环境
硬件环境:一台微型计算机;
软件环境:windows xp,debug环境,masm
三、实验内容
实现根据x的值给出y的值的算术算法;
x的值小于0,y=c
x的值等于0,y=b
x的值大于0,y=a
四、设计:
在数据段中定义变量x =1,在代码段中,先进行初始化。把x的值传给al,再将al的值与0作比较,如果小于则跳到L1分支中去,如果等于则跳到L2分支中去,如果大于则跳到L3分支中去,L1中给dl赋值99(c),L2中给dl赋值98(b),L3中给dl赋值97(a)。根据题意最终结果应为a。
五、实验过程
实现根据x的值给出y的值的算术算法;
(1)用MASM程序把ASM文件转换成OBJ文件,
说明:MASM在D:\下,bb.asm在F:\MASM\下
(2)用LINK程序把ASM文件转换成EXE文件
(3)用U返汇编
(4)用t命令单步执行程序,实现数据段的初始化。
把x的值1传到寄存器AX中
用D命令可看到已将1写入AX的0000单元
相关文档
最新文档