汇编语言 实验七子程序设计2
- 格式:doc
- 大小:34.00 KB
- 文档页数:6
3.2 实验二汇编语言程序设计3.2.1 实验目的1)进一步熟悉汇编语言程序的编辑、宏汇编、链接、运行基本概念;2)熟练掌握动态调试程序TD/DEBUG的常用命令或窗口功能,学会用TD/DEBUG调试程序,修改数据和寄存器等环境;3)熟悉掌握汇编语言程序的典型数据结构设计、典型程序流控制方法,了解DOS/BIOS功能调用的基本方法。
3.2.2 实验环境实验环境同实验一。
3.2.3 基本实验内容1)基本实验内容和要求(1)编写程序实现如下功能;①从键盘输入任意字符串后,存入自定义存储单元,判断处理后将字符串中小写字母转换为大写字母(其他字符不变)并按原顺序将这些字符在屏幕上显示出来。
②从键盘输入在0-65535之间的十进制数,将其转换为16进制数并在屏幕中显示出来,要求判断输入字符串是否为在0-65535之间的十进制数。
(2)复习功各种操作,并用DEBUG调试程序,学会基本命令操作,并通过单步、设置断点等方法观察中间结果,完成正常运行。
命令行方式下直接键入debug myfile.exe回车(myfile为待调试可执行程序),进入调试方式(显示—),键入H回车显示全部命令、格式和功能。
常用命令有;U(反汇编)、A(汇编输入指令程序)、R(寄存器显示/修改)、I(端口输入)、0(端口输出)、D(显示数据)、E(修改数据)。
除资源修改管理功能外,重点应用T(单步)、Tn(执行n步)、P(过程/指令)、G××××(从当前器:IP执行到断点××××)或G=××××l ××××2(从××××l执行到××××2断点)调试实驴程序。
2)编程提示(1)小写字母的ASCII码比其所对应的大写字母的ASCII码值大20H,如字符“a”的ASCII 码为61H,而字符“A”的ASCII码为41H,因此字符变换时将小写字母的ASCII码减去20H即为大写字母的ASCII码。
、实验目的、实验内容1、 编写一程序,将内存中某一区域的数据传送到另一个区域中 (要求用循结构,不考虑数据块重叠问题 ) 。
2、 编写一程序,将内存中某一区域的数据传送到另一区域 ( 要求考虑数据块 重叠问题)。
实验准备用QE 或其它编辑软件,在计算机上编辑源程序,使其正确无误。
进入DEBUG 打入DEBUGT MYPROG.EXMYPRC 为所编程序的文件名。
(2) 先用G 命令连续剧连续执行程序,程序执行完毕后,观察运行结果。
如果 汇编语言程序设计实验报告( 分支循环程序实验 )1、 掌握分支程序、循环程序的设计方法。
2、 熟悉DEBU®序的使用方法。
3、 掌握汇编语言程序的编辑、汇编、连接以及调试过程。
1、 预习数据传送指令,熟悉分支和循环程序设计方法。
2、 预习DEBUG 调试程序的使用方法。
3、 根据实验内容要求,编写好实验源程序。
四、实验步骤 1、 2、 汇编、连接源程序,产生.EXE 可执行文件。
3、 运行程序。
(1)执行后是对的,说明程序编写是正确的,如果结果不对,说明程序有错误, 则执行下一步。
(3) 检查程序。
在程序中设置若干断点,以便杳出错误所在。
(4) 采用单步命令 T 或执行程序,观察各寄存器和存储单元内容,以便找到错 误之处。
总结实现数据传送的几种方法,指出它们的区别。
开始说明本实验中是如何使用 DEBU 进行调试的。
CX 、SI 、DI 置初值六、流 程图勤开始 设置增量方式CX 、 SI 、 DI 置初值 保存 SI 内容AL [SI] SI SI+ 源块长度[DI] AL N SI>DISI SI+1 恢复 SI 内容 恢复 SI 内容DI DI+1CX CX-1 设置减量方式N CX=0, SI 指向源块末尾DI 指向目的块末尾结束 [DI] [SI]题一流程图 N 传完了吗, 书馆 Y五、 实验报告要求1、 列出程序清单,并给出程序流程图。
汇编语言实验七实验报告汇编语言实验七实验报告一、实验目的本次实验的目的是了解多重循环结构的编程技巧,并使用它们对数据进行排序和搜索。
二、实验内容本实验内容主要包括:1.使用多重循环结构实现数据的排序,如冒泡排序、快速排序等;2.使用多重循环结构实现数据的搜索,如线性搜索、二分搜索等;3.使用结构化编程实现控制结构,如条件判断、循环结构等来完成数据的排序和搜索。
三、实验过程1. 冒泡排序本实验使用多重循环结构,采用冒泡排序的方法,实现对一组数据的排序。
具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 0, 5, 2count dw 6temp dw ?.codemain procmov ax,@data mov ds,axmov ax,array mov si,axmov cx,count mov cl,2l1:mov di,simov bx,[di] inc dil2:mov ax,[di] cmp ax,bxjng l3mov temp,ax mov [di],bx mov bx,temp l3:inc diloop l2inc sidec cxjnz l1 ;循环结束 mov ax,countsub ax,2l4:mov di,simov ax,[di]mov bx,[di+2]cmp bx,axjng l5mov temp,axmov [di],bxmov [di+2],temp l5:inc sidec axjnz l4 ;循环结束 tmov ax,4c00hint 21hmain endpend main上述代码主要实现了多重循环结构,包括两个重复循环:一个用来对数据进行比较,另一个用来循环处理剩下的数据项,直到排序完成。
2. 线性搜索接下来实现线性搜索的功能,具体代码如下:.model tiny.stack 100h.dataarray dw 3, 1, 4, 5, 0, 2count dw 6key dw 4add dw 0.codemain procmov ax,@datamov ds,axmov ax,arraymov di,axmov cx,countl1:cmp [di], keyjne l3jmp l2l3:inc diloop l1l2:mov ax,add mov bx,count sub bx,1mul bxadd ax,key mov bx,2div bxinc axmov bx,4mul bxmov di,axmov ax,array add ax,dimov si,axmov ax,[si] mov bx,keyje l4mov ax,-1l4:mov ax,4c00hint 21hmain endpend main上述代码主要实现了线性搜索的功能,通过比较数组中的每一项与给定的关键字,如果相同,则记录下该项的偏移量,然后根据偏移量计算出索引,最终返回数组中搜索到的数据。
实验七子程序设计实验类型:综合性实验目的:1、掌握主程序与子程序之间的调用关系及调用方法。
2、掌握子程序调用过程中近程调用与远程调用的区别。
3、掌握通过堆栈转送参数的方法。
实验步骤:1、进入DOS环境2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用3、启动EDIT编辑器输入程序代码4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm)5、运行命令MASM CHEN.ASM生成OBJ文件6、如果出错请回到第3步再纠正错误7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE 文件8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容)9、执行反汇编U10、查看程序结束地址11、运行G 命令运行程序12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。
实验内容:从键盘输入一组十进制数据,按从小到大的顺序排列,并以十进制的形式输出。
要求:输入过程有键盘锁;输入、输出有提示;输入和输出之间换行。
data segmenta dw 7 dup(?)data endsdecihex segmentmain proc farassume cs:decihex,ds:datapush dsmov ax,0push axmov ax,datamov ds,axmov cx,07hlea si,aloop1:call decibinmov [si],bxadd si,2call crlfloop loop1;********************************mov cx,7dec cxloop3:mov di,cxlea si,aloop2:mov ax,[si]cmp ax,[si+2]jng cotixchg ax,[si+2]mov [si],axcoti:add si,2loop loop2mov cx,diloop loop3;*********************************call crlf;*********************************mov cx,7lea si,aloop5:call outputcall crlfadd si,2loop loop5retmain endp ;............................ decibin proc nearmov bx,0 newchar:mov ah,1int 21hsub al,30hjl exitcmp al,9djg exitcbwxchg ax,bxmov dx,10dmul dxadd bx,axjmp newcharexit: retdecibin endp ;............................. crlf proc nearmov dl,0dhmov ah,2int 21hmov dl,0ahmov ah,2int 21hretcrlf endp ;............................. output proc near ; begin:mov ax,[si]mov bl,10div bl; output:mov dl,aladd dl,30hmov bl,ahmov ah,2int 21hmov dl,bladd dl,30hmov ah,2int 21hretoutput endp ;............................ decihex endsend。
实验二:汇编语程序设计一、实验目的旨在通过实验使同学了解汇编语言的程序结构和编程方法,可以编写出顺序程序、分支程序和一般的循环程序,并学会修改和调试方法。
二、实验环境MASM、LINK、DEBUG或包含此软件的相关软件三、实验内容1.1、从FIRST开始的100个单元中存放着一个字符串,结束符为$。
编写一个程序,统计该字符串中字母‘A’的个数。
DATA SEGMENTFIRST DB 'AGHI K…$’ ;定义字符串,结束符为$NUMBER DB ? ;结果存放单元DATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DATASTART: MOV AX,DATA ;建立数据段的可寻址性MOV DS, AXMOV BL,0 ;BL用作统计计数器LEA DI,FIRST ;取字符串首址NEXT: MOV AL, [ DI] ;取一个字符INC DI ;指向下一个字符CMP AL,’$’ ;与结束符’$’比较JE EXIT ;等于,搜索完结束CMP AL , 'A ;与字符‘A’比较JNE NEXT ;不等于。
不统计INC BL ;找到,计数IMP NEXT ;继续EXIT: MOV NUMBER,BLMOV AH,4CHINT 21HCODE ENDSEND START2.编程判断输入的ASCII码字符时数字还是字母,并将判断结果分别以“D”和“L”显示出来。
解:用宏实现字符显示。
程序如下:DISPLAY MACRD CHAR;显示字符宏定义MOV DL,CHARMOV AH,02HINT 21HENDMCODE SEGMENTASSUME CS: CODESTART : MOV AH, 0lH ;输人一个ASCI I码字符INT 21 HCMP AL, '0’JC ERROR ;非数字和字母,转ERROR处理CMP AL, '9'JA NEXT ;非数字,转NERTDISPLAY 'D' ;数字。
汇编语言程序设计实验报告(二)一、实验目的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五、实验心得这是第二次做汇编实验,首先,心理上已经没有了第一次做实验的那种茫然,知道了想要编写一个完整的程序,应当先将这一个大问题分解成若干个小的问题,找出每一个小问题所对应的解决方法,然后用代码一步一步实现,再将这一个一个的小问题串联起来,找到它们的契合点,用联系把它们组成一个完整的程序,其中最常用的就是转移指令和循环。
实验二汇编语言程序设计2.1 实验目的(1)掌握汇编语言程序的基本格式。
(2)学会汇编语言的编辑、汇编、连接及调试的方法。
(3)在MASM 6.11中完成第一个程序。
2.2 实验设备及软件环境装有DOS系统及MASM6.15的微机一台。
2.3 汇编程序设计及调试过程1 编辑汇编语言源程序利用EDIT、记事本等文本编辑器,用汇编语言编写汇编源程序(扩展名为.ASM)。
2 汇编调用宏汇编程序MASM把源程序汇编成目标程序(扩展名为.OBJ)。
在汇编过程中将对源程序进行语法检查。
如果源程序有语法错误,屏幕上将出现提示信息。
此时,需要返回到编辑程序,对有语法错误的语句进行修改。
然后重新汇编,直到程序无语法错误为止。
3 连接由汇编后产生的目标程序通过连接程序LINK,转换为一个可执行文件(扩展名为.EXE)。
4 调试运行利用DEBUG程序,对可执行文件进行调试,查看程序运行是否正确。
2.4 实验内容编写第1个完整的简单的汇编程序。
汇编语言源程序为:ASSUME CS:CODESGCOSESG SEGMENTSTART: MOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXMOV AX,4C00HINT 21HCODESG ENDSEND2.5 实验步骤1 编辑源程序(以EDIT为例)(1)定义一个段,名称为ABC:ABC SEGMENT..ABC ENDS(2)在这个段中写入汇编指令,来实现要处理的任务: ABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDS(3)指出程序在何处结束:ABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDSEND(4)ABC被当作代码段来用,所以应该将ABC和CS联系起来:ASSUME CS:ABCABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDSEND(5)最终写成的程序为:ASSUME CS:ABCABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXABC ENDSEND(6)程序返回实现程序返回功能的两条指令:MOV AX,4C00HINT 21H(7)最终写成的汇编源程序为:ASSUME CS:ABCABC SEGMENTMOV AX,0123HMOV BX,0456HADD AX,BXADD AX,AXMOV AX,4C00HINT 21HABC ENDSEND(8)与结束有关的几个概念①进入DOS方式,运行EDIT;②在EDIT中编辑程序;③将程序保存为文件C:\1.asm后,退出EDIT,结束对源程序的编辑。
实验二汇编语言程序设计实验一、实验目的:1)熟悉常用的汇编语言指令2)掌握程序的顺序结构、分支结构、循环结构和子程序结构3)掌握汇编语言程序调试方法二实验内容:(一)顺序结构(以下程序至少完成一个)(1)编制计算下列表达式的程序:w=x/2-y+4*z(其中x,y,z均为带符号字节类型的数);(2)编写程序完成两个已知双精度数(4字节)A和B相加并将结果存入双精度变量单元SUM 中(不考虑溢出);(3)从键盘输入一个小写字母,将其转化为大写字母显示出来。
(二)分支结构(以下程序至少完成一个)(1)设平面上一点P的直角坐标为(X,Y),X,Y为字类型符号数,试编制若P落在第i象限内,则令k=i;若P落在坐标轴,则令k=0的程序;(2)编写一程序,把变量BUFX和BUFY中较大者存入BUFZ中,若两者相等,则把其中之一存入BUFZ中。
假设变量存放的是8位无符号数;(3)设变量BUFX为16位带符号数,将其符号状态保存在SIGNX,即如果BUGFX大于等于0,保存0;如果小于0,则保存-1。
(4)BUFX,BUFY和BUFZ是3个有符号十六进制数,编写一个比较相等关系的程序,如果这三个数都不相等,则显示0,如果3个数中有两个相等,则显示1,如果3个数都相等,则显示2.(三)循环结构(以下程序至少完成一个)(1)编程序将符号字数组ARRAYW中的正负数分别送入正数数组PLUS和负数数组MINUS中,同时把0元素的个数送入字变量ZERON;(2)编程序统计16位符号数组ARRAY中的奇数和偶数个数,将奇数个数存入EVENN中,偶数个数存入数组ODDN中。
(3)设有一个数组存放学生的成绩,编写程序统计各分数段学生人数,90-100分人数存入A中,80-89分人数存入B中,70-79分人数存入C中,60-69分人数存入D中,0-59分人数存入E中。
三、撰写实验报告,画出程序流程图,写出源程序,截图给出调试过程和运行结果。
实验二汇编语言程序设计一、实验目的1 . 进一步熟悉汇编语言的上机过程及DEBUG命令。
2 . 熟悉汇编语言程序设计的基本结构常用指令的使用。
3 . 掌握DEBUG命令,以便更直观的了解数据在寄存器和内存单元中的存储形式。
二、实验内容及步骤首先在E盘下新建文件夹dq031(电气031班),dq032(电气032班), dq033(电气033班),将汇编程序MASM,连接程序LINK,拷贝到里面。
1.建立汇编源程序DA TA SEGMENTBUFF1 DB 4FH , 0B6H , 7CH , 34H , 56H , 1FHBUFF2 DB 13H , 24H , 57H , 68H , 0FDH , 9AHSUM DB 6 DUP(?)CONT DB 3DA TA ENDSCODE SEGMENTASSUME CS:CODE , DS:DA TASTART:MOV AX,DA TAMOV DS,AXMOV SI,OFFSET BUFF1MOV DI,OFFSET BUFF2MOV BX,OFFSET SUMMOV CL,CONTMOV CH,0CLCGOON:MOV AX,[SI]ADC AX,[DI]INC SIINC SIINC DIINC DIMOV [BX],AXINC BXINC BXLOOP GOONMOV AX,4CHINT 21HCODE ENDSEND START2.用以下命令对*** . ASM文件进行编译连接使之成为可执行文件。
MASM *** . ASMLINK *** . OBJ3 . 运用DEBUG命令单步执行程序,观察寄存器内容变化以及内存单元的变化情况。
(1)MOV AX,DATAMOV DS,AXMOV SI,OFFSET BUFF1MOV DI,OFFSET BUFF2MOV BX,OFFSET SUMMOV CL,CONTMOV CH,0这个过程中运用T命令注意观察AX,DS,SI,DI,BX,CX的变化。
实验报告课程名称汇编语言程序设计实验项目实验二、分支、循环程序结构和设计实验仪器微机系统、汇编调试环境系别计算机科学与技术专业计算机科学与技术班级/学号学生姓名实验日期成绩指导教师胡信裕实验二分支、循环程序结构和设计一、实验目的1.学习汇编程序设计的基本方法,掌握用汇编语言设计、编写、调试和运行程序的方法;2.熟悉汇编语言源程序的编辑和汇编、目标模块的连接以及可执行程序的调试;3.熟悉、掌握顺序结构、分支结构、循环结构程序设计和调试。
二、实验要求1.Windows操作系统并具有命令提示符操作界面的计算机,且系统内安装有汇编语言编程环境。
2.在开始本实验之前,复习教科书的相关内容,并预先写出相应的源程序。
3.通过汇编IDE上机调试,注意观察,并记录下现象。
三、实验内容(一)将键盘上输入的十六进制数转换成十进制数,在屏幕上显示【可键入任意字符,但只对十六进制数转换显示】,遇ESC键输入结束程序运行退出。
部分程序设计参考如下:【要求分析理解后加必要注释】;读键盘R_key: mov ah,01hint 21hmov dl,20hmov ah,02hint 21h;键入数处理cmp al,1bh ;’ESC’=1bhjz exitcmp al,’0’jl R_keycmp al,’9’jle D0_9cmp al,’A’jl R_keycmp al,’F’jle DA_Fcmp al,’a’jl R_keycmp al,’f’jle Da_fJMP R_key;0~9的处理D0_9:sub al,30hmov ah,0jmp disp; A(a)~F(f)的处理DA_F:add al,0fhand al,0fhmov ah,1disp: add ah,30hmov dl,ahmov ah,2int 21hadd al,30hmov dl,al;mov ah,2int 21hmov dl,0dhint 21hmov dl,0ahint 21hjmp r_keyexit: mov ax,4c00h ;mov ah,4chint 21h;retmain endpend main1.运用文本编辑器编辑实验源程序(EXP2_1.asm);2.在IDE操作环境下,对源程序(EXP2_1.asm)进行编译和连接,生成生成链接文件(EXP2_1.obj)和可执行文件(EXP2_1.exe);3.运行IDE操作环境下的调试命令,调试可执行文件(EXP2_1.exe);4.运行IDE操作环境下的执行命令,运行可执行文件(EXP2_1.exe)5.结果说明:(截图)实验结果【是/否】符合实验程序设计要求。
汇编语言程序设计实验报告班级姓名学号《汇编语言程序设计》实验一、实验教学目标与基本要求汇编语言实验主要使学生掌握DEBUG调用程序中各命令的使用方法,掌握MASM汇编程序对汇编语言源程序进行编辑、汇编、连接、装配、调试到运行的上机操作方法.要求学生熟练掌握汇编语言指令练习、顺序程序设计、分支程序设计、循环程序设计、子程序设计和中断程序设计.二、实验课程内容实验一 DEBUG(用于测试和调试 MS-DOS 可执行文件的程序)命令的使用(1学时)除了q 命令之外,所有 Debug 命令都接受参数.可以用逗号或空格分隔参数,但是只有在两个十六进制值之间才需要这些分隔符.实验目的:掌握DEBUG中各命令的使用方法;掌握在DEBUG命令使用后观察内存单元、寄存器、标志位的内容及意义;学会使用DEBUG来调试程序.实验内容:使用以下DEBUG命令,观察并记录结果(所留空间不够,可以附页).1.程序调用命令C>DEBUG [D:] [PATH] [FILENAME[.EXT]] [PARM1] [PARM2]其中,文件名是被调试文件的名字.如未键入文件名.可用DEBUG命令N和L把需要文件装入存储器后再调试.D指定驱动器,PATH为路径,FILENAME为文件名,PARM为命令参数2.显示存储单元命令-D [ADDRESS]或;ADDRESS 地址-D [RANGE] ;RANGE 范围3.修改存储单元内容命令-E ADDRESS [LIST]4.检查和修改寄存器内容命令-R [REGISTER NAME] ;Register name 寄存器名字5.汇编命令-A [ADDRESS]6.跟踪命令-T [=ADDRESS] [VALUE] ;Value 变量值7.运行命令-G [=ADDRESS ] [ADDRESS2 [ADDRESS3]8.反汇编命令-U [ADDRESS]-U [RANGE]9.命名命令-N FILESPECS [FILESPECS]FILESPECS的格式可为[D:][PATH]FILENAME [.EXT]10.装入命令-L [ADDRESS[DRIVE SECTOR SECTOR]] ;DRIVE SECTOR 磁盘扇区11.写命令W ADDRESS DRIVE SECTOR12.退出命令-Q实验二汇编语言实验操作方法(1学时)实验目的:掌握在DEBUG下运行汇编指令或简单小程序;熟悉标准汇编程序上机流程.实验内容:设计实验使用数据,分析得出理论结果;记录实验结果,与理论结果比较.(所留空间不够,可以附页)1.在DEBUG下运行汇编指令或简单小程序(如:实现1+2;0F3A6+0FFFB等)在DEBUG提示符下,用汇编命令A:输入汇编指令或简单小程序,用单步命令T或全程命令G来执行,并检查执行中间结果与最后结果.2.标准汇编程序上机方法 (如:给出一个AL*7的程序,用加法及移位指令实现)A.建立ASM文件,用EDIT .COM全屏幕编辑文件或其他编辑文件建立扩展名为ASM的源程序.B.用MASM(或ASM)产生扩展名为OBJ目标文件.C.用LINK产生扩展名为EXE可执行文件.D.在DEBUG下,把文件调入内存,调试程序.E.在DOS下可直接执行扩展名为EXE的文件.附:汇编语言的工作环境.A.硬件环境IBM-PC及其系列机内存256K字节以上外存:硬盘或至少一个软驱CPU:80586以上显示器:单色或彩色显示器键盘:标准ASCII码键盘B.软件环境编缉程序:或其他编缉程序汇编程序:MASM.EXE 或ASM.EXE连接程序:LINK.EXE调试程序: 或DEBUG.EXE实验三汇编语言指令练习(2学时)实验目的:1.掌握DEBUG中汇编命令A,反汇编命令U,单步命令T,显示存储单元命令D,修改存储器单元命令E,修改与显示寄存器单元命令R,退出Q等命令的用法.2.熟悉汇编中传送、逻辑等指令.3.了解指令不同的寻址方式,注意规定或限制使用的寄存器如:双操作数指令中,源操作数和目的操作数的地址不能同时为存储器地址,段跨越前缀不能使用CS,操作对象是地址还是地址中的内容,指令隐含使用的寄存器..实验内容:对DEBUG中A,U,T,D,E,R,Q等命令按不同用法进行练习;汇编中传送、逻辑等指令.1:基本题:MOV.PUSH.POP.AND.OR.XOR.TEXT.ADD.SUB.MUL.DIV.2:掌握题:在DEBUG状态下把三个数从大到小排序.3:实验步骤A.在DOS提示符下,在MASM子目录下,按DEBUG及回车.B.在DEBUG提示符下,按A进入小汇编,输入源指令.C.用U反汇编,检查输入源指令是否正确,用T或G,调试与运行指令.D.检查指令运行结果,用E,R检查与修改内存、寄存器内容.E.重复B.C.D过程.实验准备:按实验内容要求,理解指令功能,编写不同寻址方式的指令清单.实验报告:(所留空间不够,可以附页)1.实验目的,要求,内容及算法思想.2.指令的寻址方式,注意规定或限制使用的寄存器.3.指令清单.4.实验心得.实验四顺序程序设计(2学时)实验目的:掌握汇编语言程序设计的基本步骤,分析问题,确立算法,画出程序流程图.说明流程图中各功能的含义和表示法.分配工作单元和存储空间.根据程序算法流程选择合适的指令编制汇编语言源程序.本实验着重掌握顺序程序的设计基本方法和技巧.实验要求:1.程序要结构化:简明、易读和易调试2.执行速度较快3.占用存储空间较少实验内容:1:按实验内容要求,确定算法,画流程图,编写程序2:基本题:计算表达式的值: w=(v-(x*y+z-540))/x3:掌握题:将一字节压缩BCD码转换为二个ASCII码.实验步骤:1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令执行结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.实验报告:(所留空间不够,可以附页)1.目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验五分支程序设计(4学时)实验目的:掌握分支程序设计的原理和方法,重点掌握各种分支程序中形成判断条件而产生的程序段的设计方法和技巧.实验要求:1.如何产生条件2.如何对条件进行判断3.如何实现分支实验内容:1.按实验内容要求,确定算法,画流程图,编写程序2.基本题: 计算函数值: Y=1 X>0Y=0 X=0Y=-1 X<03.掌握题: 多路分支,假定将各分支程序进行编号,若存在0,1,…,N的N+1个分支程序.现根据当前的编号,转入到相应的分支程序.若各分支程序的入口地址分别为:ADDR0,ADDR1,…,ADDRN.1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程序,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果. 实验报告:(所留空间不够,可以附页)1.实验目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验六循环程序设计(4学时)实验目的:掌握循环程序设计的原理和方法,重点掌握循环程序结构的形式和常用循环程序的控制方法和技巧.实验要求:1.置循环参数的初值2.循环体构成3.如何实现循环控制实验内容:1.按实验内容要求,确定算法,画流程图,编写程序2.基本题: 统计某地址中正元素的个数3.掌握题:把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来;假定给出4名学生5门课的成绩,计算每个学生的平均成绩和每门课的平均成绩;冒泡排序.A.认真阅读本实验指导实验步骤:1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程序,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.实验报告:(所留空间不够,可以附页)1.目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验七子程序设计(2学时)实验目的:掌握子程序设计的原理和方法,重点掌握子程序结构的形式和常用子程序的控制方法和技巧.采用子程序设计以增加程序的可读性,有利于程序的模块化和自顶向下的设计方法的实现.实验要求:1.子程序定义及相对应的调用方法.2.子程序设计时需建立子程序的功能说明.3.子程序现场保护和现场恢复.4.子程序的输入参数和输出参数的确定及传递方法,可利用寄存器,内存或堆栈传递参数.5.子程序嵌套调用时,注意任何存放断点和寻找短点进行返回.6.掌握常用DOS系统功能子程序的调用.实验内容:1.按实验内容要求,确定算法,画流程图,编写程序.2.基本题:十进制数到十六进制数转化程序.程序要求从键盘取得一个十进制数,然后以十六进制形式在屏幕上显示出来.3.掌握题: 在屏幕上显示4行“hello!what is your name?”,要求用子程序调用的方法实现;计算N! (N≥0)的程序实验步骤:1.首先进入编辑器,输入源程序,检查正确后,用MASM汇编成目标文件,用连接成可运行文件,若正确无误,则用DEBUG调入内存,进行调试.2.调试与运行程序:用单步,短点,连续等方法调试与运行程序,根据存储器,寄存器与标志位的内容与变化,如:SP,IP,CF,SF,ZF,OF,I等,检查指令结果,程序中间结果及程序运行最后结果是否正确,排除软件错误,直到达到本实验目的为止.3.记录程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.实验报告:(所留空间不够,可以附页)1.目的,要求,内容及算法思想.2.程序流程图,程序清单,重要部位说明.如:重要的指令功能,重要的程序段功能.3.程序入口参数与出口参数,重要的指令结果,程序中间结果及程序运行最后结果.4.实验心得及有意义的建议.实验八中断程序设计(2学时)实验目的:掌握软中断程序设计的原理和方法,重点掌握软中断程序入口、出口地址的产生。
实验七子程序设计
实验类型:综合性
实验目的:
1、掌握主程序与子程序之间的调用关系及调用方法。
2、掌握子程序调用过程中近程调用与远程调用的区别。
3、掌握通过堆栈转送参数的方法。
实验步骤:
1、进入DOS环境
2、输入命令:path c:\windows\command;c:\turbo\masm保证实验过程中使用的所有命令都在当前路径直接调用
3、启动EDIT编辑器输入程序代码
4、检查语法错误,如无错误以ASM为后缀名保存文件(如文件名chen.asm)
5、运行命令MASM CHEN.ASM生成OBJ文件
6、如果出错请回到第3步再纠正错误
7、运行命令LINK CHEN.OBJ(此时提示没有堆栈错误请忽略)生成EXE文件
8、运行DEBUG调入可执行程序DEBUG CHEN.EXE(以下DEBUG 命令请参看第一次实验内容)
9、执行反汇编U
10、查看程序结束地址
11、运行G 命令运行程序
12、运行D和R命令查看相应的内存单元和寄存器的数据是否与结果一致,如果不一致回到第3步纠正错误,也可以运行T命令逐条运行程序寻找错误指令位置再做修改。
实验内容:
从键盘输入一组十进制数据,按从小到大的顺序排列,并以十进制的形式输出。
要求:输入过程有键盘锁;输入、输出有提示;输入和输出之间换行。
data segment
a dw 7 dup(?)
data ends
decihex segment
main proc far
assume cs:decihex,ds:data
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov cx,07h
lea si,a
loop1:call decibin
mov [si],bx
add si,2
call crlf
loop loop1
;********************************
mov cx,7
dec cx
loop3:mov di,cx
lea si,a
loop2:mov ax,[si]
cmp ax,[si+2]
jng coti
xchg ax,[si+2]
mov [si],ax
coti:add si,2
loop loop2
mov cx,di
loop loop3
;*********************************
call crlf
;*********************************
mov cx,7
lea si,a
loop5:call output
call crlf
add si,2
loop loop5
ret
main endp ;............................ decibin proc near
mov bx,0 newchar:
mov ah,1
int 21h
sub al,30h
jl exit
cmp al,9d
jg exit
cbw
xchg ax,bx
mov dx,10d
mul dx
add bx,ax
jmp newchar
exit: ret
decibin endp ;............................. crlf proc near
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp ;............................. output proc near ; begin:
mov ax,[si]
mov bl,10
div bl
; output:
mov dl,al
add dl,30h
mov bl,ah
mov ah,2
int 21h
mov dl,bl
add dl,30h
mov ah,2
int 21h
ret
output endp ;............................ decihex ends
end。