汇编语言 两只老虎 实验报告
汇编语言指令及伪指令练习的实验报告总结(范文)
汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 201X~201X学年第二学期实验项目列表福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _1#605 实验设备号: I3 实验时间:201X.4.25指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看L ST文件;(3)生成BJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验环境 IBM—PC机及其兼容机;实验的软件环境是:操作系统: DS2.0以上;调试程序: DEBUG.CM;文本编程程序: EDIT.EXE、PS.EXE;宏汇编程序:MA SM.EXE(或AS M .EXE);连接装配程序:L INK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名 1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDI T查看1.LS T文件。
试回答: DA1,DA2的偏移量分别是多少?C UNT的值为多少?DATA SEGME NT RG 20HNUM1=8 NUM2=NUM1+10H DA1 DB ‘I BM PC’ CUN T EQU $-DA1 DATA END S DA2 DB 0AH, 0DH EN D(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)D ATA SEGMEN T VAR1 DB0, 25, DH,300 VAR2DB 12H, A4H, 6BH VAR3 DB ’ABCD EF’ VAR4 D 1H, 5678H VAR5 D 10H DUP(?) D ATA ENDS C DE SEGMENT ASSUME CS: CDE, DE: DATA MV D S, AX LEASI, VAR5 M V BX, FFSE T VAR2 MV[SI], 0ABH MV AX, VA R1+2 MV [B X], [SI] M V VAR5+4,VAR4 MV AH, 4CH INT21H ENDS E ND START B EING MV AX, DATA CDE(3)输入正确的程序,汇编、连接、运行 STACKS SEGMENT S TACK D 128DUP(?) EN DS SEGMENT ENDS SEGM ENT ASSUME CS: CDES,DS: DATAS STACKS DA TAS DATASCDES STRIN G DB ‘ELCM E!’, 13, 10, ‘$’ STA RT: MV AX, DATAS MV DS, AX LEA DX, S TRING MV A H, 9 INT 21H MV AH,4CH INT 21H CDES END S END STAR T4.算法描述及实验步骤 1)首先,用记事本输入各段程序,并储存成源程序,保存在MASM目录下。
汇编语言程序设计实验报告
汇编语言程序设计实验报告汇编语言程序设计实验报告引言:汇编语言是计算机中最基本的语言,通常用于处理硬件相关问题。
在这个实验中,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
以下是我们的实验报告。
正文:1. 实验环境我们使用的实验环境是Intel 8086微处理器与高级汇编语言。
微处理器使用的是PCB-512主板,而高级汇编语言是MASM。
2. 实验目的我们的实验目的主要是学习汇编语言的基础知识和编程技巧,包括了汇编语言的寄存器、指令、内存管理等方面的知识。
我们的另一个目的是掌握汇编语言的常用编程技巧,能够独立完成一些简单的汇编程序。
3. 实验内容我们的实验内容主要包括以下几点:(1)学习汇编语言的基础知识,包括寄存器、指令、内存管理等方面的知识。
(2)掌握汇编语言的常用编程技巧,包括数据输入输出、运算、跳转等基本操作。
(3)实践用汇编语言编写程序,如计算器、菜单等实用程序。
(4)了解8086微处理器的结构和原理。
4. 实验过程在这个实验过程中,我们完成了以下几个程序:(1)计算器计算器是一个简单的程序,主要用于实现两个数之间的加、减、乘、除等基本运算。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
(2)菜单菜单是一个实用程序,主要用于展示一个简单的菜单并实现用户选择相关功能的功能。
我们使用了汇编语言中的跳转指令、输入输出指令等实现了这个程序。
5. 实验结果在我们的实验中,我们成功完成了上述两个程序。
我们通过输入输出指令、存储指令等指令实现了这个程序的功能。
6. 实验总结在这个实验过程中,我们学习汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
我们通过编写计算器和菜单等简单实用程序,加深了对汇编语言的理解和认识。
我们认为这个实验对我们今后的学习和工作都有很大的帮助。
结论:通过这个实验,我们学习了汇编语言的基础知识和编程技巧,并实践了用汇编语言编写程序的方法和技巧。
汇编语言实验7实验报告
汇编语言实验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. 字符串拼接程序首先,需要从键盘输入两个字符串。
汇编钢琴发声与两只老虎程序
燕山大学课程设计报告汇编与接口课设学院信息科学与工程学院年级专业计算机科学学生姓名学号指导教师提交日期2011/7/1实验一钢琴程序一.实验目的进行汇编语言程序设计应用的综合性训练。
综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。
二.实验要求按下数字键1-8发出哆来咪发嗖拉西多的声音,当按下ctrl+c键时退出程序三.设备与环境PC兼容机、Windows操作系统、汇编程序masm5.0 四.实验分析1.程序开始先将查好的频率写入到数据段中,定义主程序,当用户从键盘输入时,先判断是否是结束键,如果是结束键则退出,如果不是,再判断是不是1-8之间的数字键,若不是,则跳转到出错处理部分;如果是,则去频率表中调出相应的频率,并进入到发音子程序中。
2.发音PC系列机中,利用8254计数器2的输出,控制扬声器的发生音调,作为机器的报警信号或者伴音信号。
计数器2的OUT 端经过放大后接扬声器,OUT端还和8255A的B端口输出PB1相与。
所以要使扬声器工作,要求8255A的PB1和PB0同时为1。
向43端口中写入计数器2控制字,在AX中设置初值为1234DCH,计数值=1234DCH/频率,然后先低后高向42端口写入计数值。
之后将8255A的PB1和PB0修改为1并将原来的值保存在AH中,以便恢复。
为了建立一个与处理器无关的时间延迟,利用硬件,通过监控端口61H的PB4,使PB4每15.08us触发一次,以产生一个固定不变的时间基准。
Waitf子程序就是产生一个N*15.08us 时间延迟的程序,在CX中放入663产生10ms时延,再向BX中放入100来产生1s的持续时间。
五.参考程序:stacks segment para 'stack' ;定义堆栈stacks db 64 dup('stack...')stacks ends;------------------------------------dseg segment para 'data'table dw 262 ;1dw 294 ;2dw 330 ;3dw 349 ;4dw 392 ;5dw 440 ;6dw 494 ;7dw 523 ;8dseg ends;------------------------------------cseg segment para 'code'assume cs:cseg,ds:dseg,ss:stacksmain proc far ;设置数据段的段地址mov ax,dsegmov ds,axnew_note:mov ah,01h ;是否结束int 21hcmp al,20hje exitmov bx,offset tablecmp al,'1' ;判断是否为1-8的数jb new_notecmp al,'8'ja new_noteand ax,0fhshl ax,1 ;(ax-1)*2 字存储sub ax,2mov si,axmov di,[bx][si]call soundfjmp new_notesoundf proc near ;调用子程序push axpush bxpush cxpush dxpush dimov al,0b6hout 43h,almov dx,12h ;设置方式控制字mov ax,348Chdiv diout 42h,almov al,ahout 42h,alin al,61hmov ah,alor al,3out 61h,almov bx,100delay: mov cx,663 ;10ms 通过循环调用实现call waitfdec bxjnz delaymov al,ahout 61h,al ;恢复8255A端口原来的值pop dipop dxpop cxpop bxpop axretsoundf endpwaitf proc nearpush axwaitf1:in al,61hand al,10h ;判断pb4是0还是1cmp al,ahje waitf1mov ah,alloop waitf1pop axretwaitf endpexit:mov ax,4c00h ;返回DOSint 21hmain endpcseg ends;------------------------------------end main六、代码运行与结果在键盘上按下1-8数字时,扬声器会奏出八个不同的音阶,同时频幕上显示出输入字符;输入Ctrl+C退出,如果输入非1-8或空格字符,程序不予响应。
汇编语言实验报告
《汇编语言实验报告》姓名:刘坤学号:109074153班级:软件101班实验一汇编运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。
再代码段比较字符串string1和string2,通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’二、源程序datarea segmentstring1db'Move the cursor backward.'string2db'Move The cursor backward.'mess1db'match.',10,13,'$'mess2db'no match.',10,13,'$'datarea endsprogment segmentmain proc farassume cs:prognam,ds:datarea,es:datareastart:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,09int21hretmain endpprognam endsend start三、调试说明和调试结果在EDIT中建立ASM文件,再用汇编程序对源程序汇编产生目标文件Obj,再用连接程序产生执行文件EXE。
汇编语言两只老虎实验报告
第三次实验报告姓名:***学号:*************第三次实验 8253定时器/计数器与接口实验------乐曲程序计算机是如何产生音乐和声响的呢?原来在计算机中有一个可编程时间间隔定时器8253,它能根据程序提供的计数值和工作模式,产生各种形状和各种频率的计数/定时脉冲,提供给系统的各个部件使用。
它还可以产生不同频率的脉冲作为扬声器的声源。
在8253定时器内部有3个独立工作的计数器:Counter0, Counter1, Countre2,每个计数器都分配有一个端口地址,分别是40H ,41H ,42H 。
8253内部还有一个公用的控制寄存器,端口地址为43H ,端口地址输入到8253的CS ,A1,A0端,分别对三个计数器和控制器寻址。
对8253编程时,先要设定控制字,以选择计数器,确定工作模式和计数值的格式,每个计数器由三个引脚与外部联系,CLK 为时钟输入端,GA TA 为门控制信号输入端,OUT 为计数/定时信号输入端。
每个计数器是以倒计数的方式计数,也就是说,从计数初值开始逐次减1,直到减为0为止。
端口地址与计数器的关系:40H选中计数器0:作为定时器为系统日时钟提供计时基准 41H选中计数器1:作为定时器使用 42H选中计数器2:用来控制扬声器发声 43H 公用的控制器:分别对三个寄存器和控制器寻址那么,如何触动扬声器发出声音呢?原来PC 机的主音箱上装有一只小喇叭,由定时器8253和并行接口芯片8255(可编程外围接口芯片)控制其发声,8255包括三个8位寄存器,两个用于输入功能,一个用于输出功能。
输入寄存器分配的I/O 端口地址为60H 和62H ,输出寄存器分配的I/O 端口地址为61H 。
8253定时器计数器2连接到扬声器,其电路如下:8253 DRIVER1.9318MHZ CLK 喇叭 OUT2 8255PB0 GATE2PB1装入计数器2的计数初值为533H (1.19318MHz/896Hz=1331=533H ),这样,得到的控制字为10110110B=0B6H ,即选中计数器2,读/写,工作方式三(方波发声器),二进制。
(最新版)汇编语言实验报告
(最新版)汇编语言实验报告汇编语言课程设计学院:专业:姓名:学号:汇编语言是计算机专业的一门重要的专业基础课,主要介绍汇编语言程序设计的基本原理和方法。
汇编语言是一门理论性和实践性较强的课程,辅助课堂教学的实验有助于帮助学生理解汇编语言的基本原理,锻炼学生的动手能力,提高学生的综合应用知识的能力。
目录1 利用DEBUG调试汇编语言程序段………………………………………2 初级程序的编写与调试实验(一).................................................................................3 初级程序的编写与调试实验(二)………………………………………...4 汇编语言程序上机过程 .......................................................................................................... 5分支程序实验……………………………………………………………6 循环程序实验……………………………………………………………..1 利用DEBUG调试汇编语言程序段一.课程目的1.熟悉DEBUG有关命令的使用方法;2.利用DEBUG掌握有关指令的功能;3.利用DEBUG运行简单的程序段。
二.课程内容1.进入和退出DEBUG程序;2.学会DEBUG中的1)D命令(显示内存数据D 段地址:偏移地址)例1:-D1002)E命令(修改指定内存)例1:-E100 41 42 43 44 48 47 46 45-D 100,L08结果:08F1:0100 41 42 43 44 48 47 46 45例2:-E 100:08F1:0100 76 42 :42是操作员键入此命令是将原100号内存内容76修改为42,用D命令可察看。
3)R命令(显示当前寄存器的内容)4)T命令(设置陷井,单步执行)5)A命令(将指令直接汇编成机器码输入到内存中。
汇编语言程序实验设计报告
汇编语言实验报告汇编语言程序实验设计报告实验二两个多字节相加一.实验目的:1.掌握MASM汇编程序的上机过程,熟悉掌握集成环境中的编辑(edit),编译(masm),连接(link)和调试(debug);2.熟练debug命令。
3.了解两个多字节相加程序的运行。
二.实验步骤源程序如下:DATA SEGMENTNUM1 DB 12H,56H,3BH, 0NUM2 DB 57H,4AH,9AHDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA ;数据段段地址MOV DS,AXCLC ;清除进位LEA BX,NUM1 ;将num1的有效地址送入BXLEA SI,NUM2 ;将num2的有效地址送入SIMOV CX,3LL: MOV AL,[SI] ;将SI中的内容num2送入ALADC [BX],AL ;将相加结果存入BX中INC BXINC SILOOP LL ;循环部分MOV AL,0ADC AL,0MOV [BX],ALMOV AH,4CH ;功能号,程序终止,返回DOSINT 21H ;返回操作系统CODE ENDSEND START1.编辑源程序使用edit编辑软件把汇编语言程序输入微机,形成扩展名为。
ASM的源程序文件,如ZJF.ASM。
2.使用宏汇编程序把ASM文件汇编成扩展名为.OBJ的二进制代码文件,及扩展名为.lst的汇编语言程序列表文件。
列如,对ZJF.ASM有ZJF.OBJ和ZJF.LST。
在MASM下点击MASM,输入zjf.asm,按enter键。
3.用LINK程序产生EXE文件打开在MASM下LINK,输入zjf.obj,回车生成可执行文件,zjf.exe文件。
4.程序的调试(1).启动debug,输入n空格zjf.exe回车L回车u回车..................反汇编;可知,段地址是1400,段内首地址0000,数据段13FF (2).调试过程如下:-r显示所有寄存器的值;-g=1400:0000 001f 执行-d=13ff:0000 0003 显示结果结果验证:3B5612H+9A4A57H=D5A069H,运行结果与计算一致。
汇编语言程序设计实验报告二
汇编语言程序设计实验报告(二)一、实验目的1)加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5)掌握子程序设计、编制及调试。
6)熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容1)编制在屏幕上显示九九乘法表的程序。
2)编制在屏幕上显示用*组成的三角形的程序。
三、实验结果(1)(2)四、源代码(1)DA TA SEGMENTM DB 31H,32H,33H,34H,35H,36H,37H,38H,39H DA TA ENDSSTACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DA TA,SS:STACK1 START:MOV AX,DA TAMOV DS,AXMOV CX,9MOV DI,OFFSET MLOP1:PUSH CXMOV CX,[DI]AND CX,0FHMOV SI,OFFSET M LOP2:MOV AL,[SI]MOV DL,ALMOV AH,2INT 21HAND AL,0FHMOV BH,ALMOV DL,'*'MOV AH,2INT 21HMOV BL,[DI]MOV DL,BLMOV AH,2INT 21HMOV DL,'='MOV AH,2INT 21HAND BL,0FHMOV AL,BHMOV AH,0MOV DL,10DIV DLMOV BL,AHCMP AL,0JE NEXTMOV DL,ALADD DL,30HMOV AH,2INT 21H NEXT:MOV DL,BLADD DL,30HMOV AH,2INT 21HMOV DL,' 'MOV AH,2INT 21HINC SILOOP LOP2MOV DL,0AHMOV AH,2MOV DL,0DHINT 21HINC DIPOP CXLOOP LOP1MOV AH,4CHINT 21HCODE ENDSEND START(2)STACK1 SEGMENT STACKDW 20H DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,SS:STACK1 BEGIN:MOV AH,1INT 21HMOV BL,ALSUB BL,30HMOV DL,0AHINT 21HMOV DL,0DHMOV AH,2INT 21HMOV BH,0MOV CX,BXMOV BX,1L1: PUSH CXMOV CX,BX L2: MOV DL,'*'MOV AH,2INT 21HLOOP L2MOV DL,0AHMOV AH,2INT 21HMOV DL,0DHMOV AH,2INT 21HADD BX,1POP CXMOV AH,4CHINT 21HCODE ENDSEND BEGIN五、实验心得这是第二次做汇编实验,首先,心理上已经没有了第一次做实验的那种茫然,知道了想要编写一个完整的程序,应当先将这一个大问题分解成若干个小的问题,找出每一个小问题所对应的解决方法,然后用代码一步一步实现,再将这一个一个的小问题串联起来,找到它们的契合点,用联系把它们组成一个完整的程序,其中最常用的就是转移指令和循环。
汇编实验报告
汇编实验报告一、实验目的本次汇编实验的主要目的是深入理解计算机底层的工作原理,掌握汇编语言的基本语法和编程技巧,能够运用汇编语言编写简单的程序来实现特定的功能。
通过实践操作,提高对计算机体系结构的认识,培养解决实际问题的能力。
二、实验环境本次实验使用的操作系统为 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)2、实验要求:采用定时器方式编写程序,使计算机发出音响并演奏出《两只老虎》的乐曲。
二、程序原理介绍PC机上的大多数输入/输出(I/O)都是由系统插件板上的8255(或8255A)可编程外围接口芯片(PPI)管理的。
PPI包括三个8位寄存器,两个用于输入功能,一个用于输出功能。
输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。
由PPI的输出寄存器中的两位来选择扬声器的驱动方式(见图一:扬声器驱动系统)。
当输出寄存器(I/O 端口61H)的第0位为1时,控制8254定时器来驱动扬声器,当第1位为1时,扬声器的门电路接通,并一直保持到位1变为0时关闭。
即控制电路能以位触发和定时器控制两种不同的方式驱动扬声器发声。
下面主要介绍利用定时器产生声音的原理.这是利用机器硬件即INTEL8253/8254定时器产生声音的一种方法。
CPU通过对定时器的通道2(端口地址为42H)进行编程,使其I/O寄存器接收一控制声音频率的16位计数值,端口61H的最低控制通道2门控的开断,以产生特殊的音响。
当定时器接收的计数值为533H 时,能产生896Hz的声音,因此产生其它频率(Freq)的计数值就可由下式计算出来:533H×896÷Freq=1234DCH÷Freq在送出频率计数值之前,还要给方式寄存器(其端口地址为43H)送一个方式值,也称为幻数,这个幻数决定对哪一个通道编程,采用什么模式,送入通道的计数和值是一字节还是两字节,是二进制码还是BCD码。
其位组合的格式如下:当通道2用于发声时,一般采用模式3,在模式3下,输出线为“1”和为“0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。
(一)通用发声程序原理ROM BIOS 中有个BEEP子程序,这能根据BL中组出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。
安工大汇编语言实验报告
实验一:汇编语言运行环境及方法、简单程序设计一、程序说明本程序用来比较两个字符串string1和string2所含的字符是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’。
在程序的数据段先定义两个字符串string1和string2,再定义两个字符串mess1和mess2,分别代表‘Match’和‘Nomatch’。
再代码段比较字符串string1和string2,通过比较判断是否相同。
若相同则显示‘Match’,否则显示‘Nomatch’三.程序代码datarea segmentstring1 db 'Move the cursor backward.'string2 db 'Move the cursor backward.'mess1 db 'Match.',13,10,'$'mess2 db 'No match.',13,10,'$'datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datareastart:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,24repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx,mess1disp:mov ah,9int 21hretmain endpprognam endsend start四、调试说明编译—链接—运行常用到的debug调试指令:用-g命令来用运行程序,用-u命令来显示程序,用-d 命令来查看数据段的情况,用-e或-f命令来修改需要改正的部分,用-t指令来逐步执行程序,用-r指令来查看寄存器和修改寄存器的值,-q命令用来退出debug程序。
汇编(循环、分支、子程序)实验报告
分别为十个成绩、成绩总个数、分段的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压栈,保留初始数据,
《汇编语言》实验报告模板实验一
成 绩 评 定 教师签名: 2015 年 月 日
1. 熟练操作宏汇编的开发环境,熟悉汇编语言的编译工具(MASM6.11)及调试器
(Windbg)的使用。
2. 掌握汇编语言的寻址方式和常用指令。 3. 掌握汇编语言基本的程序设计方法和调试手段。 4. 掌握子程序和宏指令的设计和调试手段。
实验要求:
1. 上机前应做好充分的准备。对选定的实验题要先进行设计包括程序框图、数据
2、执行结果截图
内容包括:总结经验提高编程及调试能力。调试情况,如上机时遇到的问题及解决的办 法,观察到的现象及其分析,对程序设计技巧的总结及分析等;程序的输出结果及对结 果的分析;实验的心得体会等。
实 验 结 果 分 析 及 心 得 体 会
通过本次实验熟悉了汇编语言的寻址方式和一些常用指令(运算,循环,过程及 其调用) ,了解了汇编语言中程序的特点,掌握了汇编语言中程序编写的方法,完善了 编写一个完整的简单程序的整体思维结构。
grade 2 ? percent 2 ? grade 3 ? percent 3 ? 75 20 82 60
score is : 81 提示: 总评成绩 = (期中成绩×百分比 1+实验成绩×百分比 2+期末成绩×百分比 3)/100
1、程序清单。 数据段:
.DATA ; reserve storage for data grade1 DWORD ? grade2 DWORD ? grade3 DWORD ? string BYTE 20 DUP (?) prompt1 BYTE "Please input the grade1 : ",0 prompt2 BYTE "Please input the percent of the grade1 : ",0 prompt3 BYTE "Please input the grade2 : ",0 prompt4 BYTE "Please input the percent of the grade2 : ",0 prompt5 BYTE "Please input the grade3 : ",0 prompt6 BYTE "Please input the percent of the grade3 : ",0 prompt7 BYTE "The result is : ",cr,lf,0 sum DWORD ? result BYTE 20 DUP (?) BYTE cr,lf,0
汇编语言编程实验报告
汇编语言编程实验报告汇编语言编程实验报告学号:姓名:成绩:目录一、实验一: ......................................................错误!未定义书签。
二、实验二: (4)三、实验三: (8)四、实验四: (10)五、实验五: ......................................................错误!未定义书签。
六、实验六: (19)七、汇编实验总结 (23)实验一一.实验题目【汇编语言补充作业T20】编写完整程序,利用DOS系统功能调用,从键盘输入一个字符串,并将该字符串从屏幕上换行后并输出。
二.程序流程及思路实现字符串输入,需要分成三个步骤:1、在数据段中定义一个缓存区为存放字符串做准备;2、DOS系统功能调用0AH号子功能,(DS:DX)= 输入缓冲区首址;3、在输入的字符串尾加上‘$’字符,以作为输出结束条件。
实现字符串输出,则需要注意的问题是:1、缓冲区第三个字节才开始存放输入的字符,前两个字节分别存放缓冲区长度和字符串实际字符数;2、输出回车换行可利用字符串:CR DB 0AH,0DH,’$’。
三.源程序清单DATA SEGMENTN EQU 50MAXLEN DB N ;缓冲区字符的最大长度ACTLEN DB ? ;实际字符个数STRING DB N DUP(?) ;字符空间CR DB 0AH,0DH,'$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATAMOV DS,AXLEA DX,MAXLENMOV AH,0AHINT 21H ;字符串输入MOV AH,09HLEA DX,CRINT 21H ;回车换行MOV BL,MAXLEN+1 ;取实际的字符长度MOV BH,0LEA SI,MAXLEN+2 ;取字符开始的首地址MOV BYTE PTR [SI+BX],'$' ;输出结尾要加上$ MOV DX,SI ;把开始存放字符的首地址赋给DX MOV AH,09HINT 21HMOV AH,4CHINT 21HCODE ENDSEND START四.结果拷屏实验二一. 实验题目【汇编语言补充作业T23】假设CX:BX中存放了4为非压缩的BCD码表示的十进制数4386,请编写完整程序将这个数转化成2进制数并存放到DI寄存器中。
四川师范大学《汇编语言》实验报告(实验八九十)
mov cl,4 mov dh,2 next1: rol bl,cl mov dl,bl and dl,0fh add dl,30h mov ah,2 int 21h dec dh jnz next1 mov ah,1 int 21h mov ah,4ch int 21h code ends end start 心得 写汇编程序也可以像 C 语言、C++那样,把每个问题分解为不同的小部分,一步步地实现, 才能完成全部。
;此处输入代码段代码 MOV AH,4CH INT 21H CODES ENDS END START 心得: 意识到一个小小的循环显示在汇编语言里不像 C、C++这些语言那么简单,必须经过 堆栈来完成,每一步也必须谨小慎微,不然得不出最终结果。
实验十
实验目的
分支程序设计实验
掌握分支程序设计方法 掌握汇编语言程序上机过程和调试方法 实验内容 参考程序流程图编写程序,完成以下功能: 已知 10 个学生的成绩,分别统计低于 60 分、60-69 分、70-79 分、80-89 分、高于 90 分的人数,并分别存放到 s5、s6、s7、s8 及 s9 单元中。 实验报告 实验目的、内容、步骤 附页写出完整源程序,上机调试运行结果 步骤: DATAS SEGMENT ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS data segment score db 56,69,84,82,73,88,99,63,100,80 cn equ $-score s5 db ? s6 db ? s7 db ? s8 db ? s9 db ? s10 db ?
START: MOV AX,DATAS MOV DS,AX MOV AH,02H MOV DL,10H MOV BL,16D E: MOV CX,16D L: INT 21H PUSH DX MOV AH,02H MOV DL,0 MOV AH,02H INT 21H MOV DL,0 INT 21H POP DX INC 21H POP DX INC DL LOOP L PUSH DX MOV AH,02H MOV DL,0DH MOV AH,02H INT 21H MOV DL,0AH INT 21H POP DX DEC BL CMP BL,0 JNE E JE EXIT EXIT: MOV AX,4C00H INT 21H
汇编实验报告
实验一(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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三次实验报告姓名:***学号:*************第三次实验 8253定时器/计数器与接口实验------乐曲程序计算机是如何产生音乐和声响的呢?原来在计算机中有一个可编程时间间隔定时器8253,它能根据程序提供的计数值和工作模式,产生各种形状和各种频率的计数/定时脉冲,提供给系统的各个部件使用。
它还可以产生不同频率的脉冲作为扬声器的声源。
在8253定时器内部有3个独立工作的计数器:Counter0, Counter1, Countre2,每个计数器都分配有一个端口地址,分别是40H,41H,42H。
8253内部还有一个公用的控制寄存器,端口地址为43H,端口地址输入到8253的CS,A1,A0端,分别对三个计数器和控制器寻址。
对8253编程时,先要设定控制字,以选择计数器,确定工作模式和计数值的格式,每个计数器由三个引脚与外部联系,CLK为时钟输入端,GATA为门控制信号输入端,OUT为计数/定时信号输入端。
每个计数器是以倒计数的方式计数,也就是说,从计数初值开始逐次减1,直到减为0为止。
端口地址与计数器的关系:那么,如何触动扬声器发出声音呢?原来PC机的主音箱上装有一只小喇叭,由定时器8253和并行接口芯片8255(可编程外围接口芯片)控制其发声,8255包括三个8位寄存器,两个用于输入功能,一个用于输出功能。
输入寄存器分配的I/O端口地址为60H和62H,输出寄存器分配的I/O端口地址为61H。
8253定时器计数器2连接到扬声器,其电路如下:装入计数器2的计数初值为533H(1.19318MHz/896Hz=1331=533H),这样,得到的控制字为10110110B=0B6H,即选中计数器2,读/写,工作方式三(方波发声器),二进制。
计数器2的初始化程序为:MOV AL,0B6HOUT 43H,AL1)计算计数值程序段:MOV DI,给定频率MOV DX,12HMOV AX,34DCHDIV DIAX中即为计数值。
2)打开扬声器发声,8255PB0,PBI送出高电平:IN AL ,61HOR AL , 3OUT 61H ,AL3)关闭扬声器,停止发声:IN AL ,61HAND AL ,0FCHOUT 61H,AL两只老虎的音频表定义在数据段中,如下:STACK SEGMENTDW 100 DUP(?)STACK ENDSDATA SEGMENTMUSIC DW 2 DUP(262,294,330,262) ; 频率表,1231;1231DW 2 DUP(330,349,392) ;345;345;DW 2 DUP(392,440,392,349,330,262) ;565431;565431dw 2 dup(294,196,262),0 ;251;251,0表示结束TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 ;节拍表DW 2 DUP(120*50,120*50,120*50,120*50,250*50,250*50)DW 2 DUP(250*50,250*50,500*50)N EQU 32 ;32个音符DATA ENDS二.实验目的:学习8253计数器2输出方波信号用以驱动扬声器发声的原理,通过程序设置计数器2的输出波形的频率和延续时间,控制扬声器的音调和发生长短。
三.实验内容:1.设计程序让微机演奏一段两只老虎的乐曲。
2.思考如何让PC机演奏一遍,两遍以及数遍这段两只老虎的乐曲,并修改程序实现。
四.实验报告:STACK SEGMENTDW 100 DUP(?)STACK ENDSDATA SEGMENTMUSIC DW 2 DUP(262,294,330,262) ; 频率表,1231;1231 DW 2 DUP(330,349,392) ;345;345;DW 2 DUP(392,440,392,349,330,262) ;565431;565431dw 2 dup(294,196,262),0 ;251;251,0表示结束TIME DW 10 DUP(250*50),500*50,250*50,250*50,500*50 ;节拍表DW 2 DUP(120*50,120*50,120*50,120*50,250*50,250*50)DW 2 DUP(250*50,250*50,500*50)N EQU 32 ;32个音符M DB ?SAY DB 'Please input the times(1~9) you want: ','$'SAY2 DB '1 .TIGERS 2.PIANO: ','$'SAY3 DB 'ERROR','$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;说明代码段、数据段、附;加段、堆栈段START: MOV AX,DATA ;设置数据段的段地址MOV DS,AXMOV ES,AXAGA: LEA DX,SAY2MOV AH,9INT 21H ;输出“1 .TIGERS 2.PIANO”MOV AH,1INT 21H ;输入一个字符CMP AL,31HJE TIGERS ;与一比较,相等则转TIGERSCMP AL,32HJE PIANO2 ;与二比较,相等则转PIANOMOV DL,0AH; 以下三行输入一个回车MOV AH,2INT 21HLEA DX,SAY3MOV AH,9INT 21H ;显示输出'ERROR'JMP AGATIGERS:LEA DX,SAYMOV AH,9INT 21H ;输出“TING JI BIAN:$”CALL INPUTA : CALL SONGDEC MJNZ A ;M自减1JMP QUIT2PIANO2:CALL PIANO;---------------------------------------------------------------------------------------------------------------------;子程序INPUT;输入;---------------------------------------------------------------------------------------------------------------------INPUT PROCMOV AH,1INT 21H ;输入一个字符LEA SI,MSUB AL,30H ;将ASCII码转为16进制数MOV [SI],ALRETINPUT ENDP;---------------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------------;子程序SONG;播放音乐;---------------------------------------------------------------------------------------------------------------------SONG PROCMOV AL,0B6HOUT 43H,AL ;选择计数器2LEA SI,MUSICLEA DI,TIMEMOV CX,N ;循环次数SONG2:PUSH CXPUSH DIMOV DI, [SI]MOV DX, 12HMOV AX, 34DCHDIV DI ;设置计数初值OUT 42H,ALMOV AL,AHOUT 42H,ALIN AL , 61HOR AL , 3OUT 61H , AL ;打开扬声器POP DIMOV CX,20000CALL DELAY ;调用延时子程序IN AL ,61HAND AL ,0FCHOUT 61H, AL ;关闭扬声器ADD SI,2ADD DI,2POP CXLOOP SONG2SONG ENDP;---------------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------------;子程序DELAY;延时子程序;---------------------------------------------------------------------------------------------------------------------DELAY PROCPUSH AXPUSH BXMOV BX,[DI]DELAY1:AGAIN: LOOP AGAINDEC BXJNZ DELAY1POP BXPOP AXRETDELAY ENDP;---------------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------------;子程序piano;---------------------------------------------------------------------------------------------------------------------PIANO PROCMOV DL,0AHMOV AH,2INT 21HLP: MOV AH,1INT 21H ;输入一个字符HIGH1: CMP AL,31HJNE HIGH2MOV DI,523HIGH2: CMP AL,32HJNE HIGH3MOV DI,587JMP SOUND HIGH3: CMP AL,'3'JNE HIGH4MOV DI,659JMP SOUND HIGH4: CMP AL,'4'JNE HIGH5MOV DI,698JMP SOUND HIGH5: CMP AL,'5'JNE HIGH6MOV DI,784JMP SOUND HIGH6: CMP AL,'6'JNE HIGH7MOV DI,880JMP SOUND HIGH7: CMP AL,'7'JNE MIDDLE1MOV DI,988MIDDLE1: CMP AL,'Q'JNE MIDDLE2MOV DI,262JMP SOUND MIDDLE2: CMP AL,'W'JNE MIDDLE3MOV DI,294JMP SOUND MIDDLE3: CMP AL,'E'JNE MIDDLE4MOV DI,330JMP SOUND MIDDLE4: CMP AL,'R'JNE MIDDLE5MOV DI,349JMP SOUND MIDDLE5: CMP AL,'T'JNE MIDDLE6MOV DI,392JMP SOUND MIDDLE6: CMP AL,'Y'JNE MIDDLE7MOV DI,440MIDDLE7: CMP AL,'U'JNE LOW1MOV DI,494JMP SOUND LOW1: CMP AL,'A'JNE LOW2MOV DI,131JMP SOUND LOW2: CMP AL,'S'JNE LOW3MOV DI,147JMP SOUND LOW3: CMP AL,'D'JNE LOW4MOV DI,165JMP SOUND LOW4: CMP AL,'F'JNE LOW5MOV DI,175JMP SOUND LOW5: CMP AL,'G'JNE LOW6MOV DI,196LOW6: CMP AL,'H'JNE LOW7MOV DI,220JMP SOUNDLOW7: CMP AL,'J'JNE QUIT1MOV DI,247JMP SOUNDQUIT1: CMP AL,1BHJE QUIT2JMP LPSOUND:MOV DX, 12HMOV AX, 34DCHDIV DI ;设置计数初值OUT 42H,ALMOV AL,AHOUT 42H,ALIN AL , 61HOR AL , 3OUT 61H , AL ;打开扬声器POP DIMOV CX,20000CALL DELAY ;调用延时子程序IN AL ,61HAND AL ,0FCHOUT 61H, AL ;关闭扬声器JMP LP;---------------------------------------------------------------------------------------------------------------------QUIT2:MOV AH,4CHINT 21HCODE ENDSEND START输入想播放的遍数电子琴,A~J低音1~7Q~U中音1~71~7高音1~7通过本次试验,我对masm的使用更加熟悉,能更好的进行汇编程序设计。