搜档网
当前位置:搜档网 › 福建农林大学_汇编实验四_子程序设计

福建农林大学_汇编实验四_子程序设计

福建农林大学_汇编实验四_子程序设计
福建农林大学_汇编实验四_子程序设计

福建农林大学计算机与信息学院实验报告

系:计算机专业:计算机科学与技术年级:2014

姓名学号:实验室号__ 计算机号

实验时间:2016-10-29指导教师签字:刘庆连成绩:

实验四子程序设计

1.实验目的

(1)学习子程序的编写,主子程序的调用;

(2)不同模块间程序的调用和调试。

2.实验内容

1)数据段中的3个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,对CALL语句和RET语句观察SP,IP的变化,并用D命令查看栈顶的内容。

DATA SEGMENT

MAG DB ‘ABC’

DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DA TA

START: MOV AX, DA TA

MOV DS, AX

MOV SI, 0

MOV CX, 3

LL: MOV DL, MAG[SI]

CALL MADD

INC SI

LOOP LL

MOV AH, 4CH

INT 21H

MADD PROC

MOV AH, 02H

INT 21H

RET

MADD ENDP

CODE ENDS

END START

2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。

具体步骤如下:

MASM S31.ASM(分别汇编)

MASM S32.ASM

LINK S31 S32 (将两个文件连接成为一个文件名为S31)

S31.EXE (运行)

3)编程:利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。(也可以将找到的不相等字符逐个显示,用INT 21H的02功能调用)

4)编程:子程序搜索指定字符缓冲区中是否有N,如果有用Y替代。调用子程序将BUF1,BUF2,BUF3中的N全部用Y替代。

附源程序:

NAME S31.ASM

不同模块间的段间调用。从键盘输入2位非压缩BCD数,存入AX寄存器中。为了将其转换为二进制数,编写一个子程序TRAN。显示子程序DISP完成将16进制数转换为对应的ASCII码并显示该字符,显示子程序在另一模块S32中。输入数据为00时结束。

EXTRN DISP: FAR

CODE SEGMENT PARA ‘CODE’

ASSUME CS: CODE

START: MOV AH, 01H

INT 21H

MOV BL, AL

INT 21H

MOV AH, AL

MOV AL, BL

CMP AX, 3030H

JE EXIT

CALL NEAR PTR TRAN

CALL FAR PTR disp

JMP START

EXIT: MOV AH, 4CH

INT 21H

TRAN PROC NEAR ;将输入的ASCII码转换成2进制数AND AX, 0F0FH ;将ASCII码转换成非压缩BCD码,

;高位在AL中

MOV BL, AH

MOV CL, 10D

MUL CL

ADD AL, BL

RET

TRAN ENDP

CODE ENDS

END START

NAME S32.ASM

PUBLIC DISP

CODE1 SEGMENT PARA ‘CODE’

ASSUME CS: CODE1

DISP PROC FAR

MOV BL, AL

MOV BH, 00

MOV CH, 4

ROLL: MOV CL, 4

ROL BX, CL

MOV DL, BL

AND DL, 0FH

CMP DL, 9

JBE NEXT1

ADD DL, 07H

NEXT1: ADD DL, 30H

MOV AH, 02H

INT 21H

DEC CH

JNZ ROLL

RET

DISP ENDP

CODE1 ENDS

END

5)编一个子程序:输入一个字符,显示出来。

6)编一个子程序:输入一个字符串,显示出来。

4.算法描述及实验步骤

题1:依题输入相应的代码如下,运行->调试->单步执行,对CALL语句和RET语句观察SP,IP的变化,并用D命令查看栈顶的内容。

题3及4,5,6按要求编写即可

5.调试过程

6. 实验结果

【题一】

实验结果如下

有上图可知,当程序运行到call语句之前,SP一直保持0000不变,而IP则一直在增加。继续单步执行程序

由上图,当程序在RET语句之前运行时,SP、IP每次都是分别按2和1递增,当运行到RET语句时,SP还是按照2来递增,而IP出现了变化,这次却减少了很多,说明指针

回撤执行下一个循环。

【题二】

按要求把s31 s32 分别汇编连接形成一个s31.exe文件,如下汇编s31

汇编s32

Link s31 s32

形成一个s31.exe的文件

【题三】编写代码如下

运行结果如下图

BUF1=’HELLO WORLD!’

BUF2=’HOLLO WOLLD~’比较可知BUF1与BUF2中不同的字符有ER!,结果与预期一致

【题四】

编写代码如下

运行结果如下图

分析:有图可知,结果将BUF1和BUF2中的n改为了y完成题目要求. 【题五】编一个子程序:输入一个字符,显示出来

编写代码如下

【题六】编一个子程序:输入一个字符串,显示出来

编写代码如下

7. 总结

通过本次上机实验,学会了子程序的编写和主子程序的调用,并且掌握了在不同模块间程序的调用和调试。在本次实验中,再一次加深了对汇编程序的汇编以及连接运行的方法。

附录:

【题3代码】

DATA SEGMENT

BUF1 DB'HELLO WORLD!'

LEN =$-BUF1

BUF2 DB'HOLLO WOLLD~'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX, DATA

MOV DS, AX

LEA SI, BUF1

LEA DI, BUF2

MOV CX,LEN

CALL CMPP

MOV AH, 4CH

INT 21H

CMPP PROC NEAR ;子程序L1:MOV DL,[SI]

CMP DL,[DI]

JZ NEXT

MOV AH,02H

INT 21H

NEXT:INC SI

INC DI

LOOP L1

RET ;子程序返回CMPP ENDP

CODE ENDS

END START

【题4代码】

DATA SEGMENT

BUF1 DB'aaanaannaaan',0ah,0dh,'$'

LEN1 =$-BUF1

BUF2 DB'bbnnnbbbbnnn', '$'

LEN2 =$-BUF2

DATA ENDS

CODE SEGMENT

ASSUME CS: CODE, DS: DATA START: MOV AX, DATA

MOV DS, AX

LEA SI, BUF1

MOV CX, LEN1

CALL CMMP

LEA SI, BUF2

MOV CX, LEN2

CALL CMMP

MOV AH, 4CH

INT 21H

CMMP PROC

MOV DX, SI

CMP1:CMP BYTE PTR[SI], 'n'

JNE NOTN

MOV AL, 'y'

MOV[SI], AL

NOTN:INC SI

LOOP CMP1

MOV AH, 09H ;显示字符串

INT 21H

RET

CMMP ENDP

CODE ENDS

END START

【题5代码】

STACKS SEGMENT STACK

DW 128 DUP(?)

STACKS ENDS

CSEG SEGMENT PARA PUBLIC 'CODE'

ASSUME CS:CSEG

START: MOV AH,01

INT 21H

MOV DL,AL

MOV AH,02

INT 21H

MOV AL,0

MOV AH,4CH

INT 21H

CSEG ENDS

END START

【题6代码】

STACKS SEGMENT STACK

DW 128 DUP(?)

STACKS ENDS

DSEG SEGMENT

MSG DB 0DH,0AH,'$'

BUF DB 20,?,20 DUP(?)

DSEG ENDS

CSEG SEGMENT PARA PUBLIC 'CODE' ASSUME CS:CSEG,DS:DSEG

START: MOV AX,DSEG

MOV DS,AX LEA DX,BUF MOV AH,0AH INT 21H

LEA DX,MSG MOV AH,09 INT 21H

LEA DX,BUF+2 INT 21H MOV AL,0 MOV AH,4CH INT 21H CSEG ENDS

END START

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

汇编语言程序设计实验七

实验七子程序的应用 【实验目的】 1.掌握子程序的定义 2.掌握子程序中的参数传递 3.掌握子程序的调用。 【实验环境】 配有汇编语言开发环境的计算机 【实验内容】 十进制数到十六进制数转换程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来。 【实验过程、结果】 ;程序名:t6-2.asm ;功能:从键盘获取一个十进制数, ;用十六进制的形式输出 decihex segment assume cs:decihex ;主程序部分 main proc far call decibin call crlf

call binihex call crlf main endp ;*************************** decibin proc near mov bx,0 ;从键盘获取一个数字,转换为二进制 ;结果放在bx寄存器中 newchar: mov ah,1 int 21h ;从键盘输入一个字符并显示在屏幕上 sub al,30h ;转换成ASCII码 jl exit cmp al,9d jg exit cbw ;从al扩展到ax,数字现在存放在ax中 xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar

exit: ret decibin endp ;子程序结束 ;将二进制转换为十六进制子程序binihex proc near mov ch,4 rotate: mov cl,4 rol bx,cl ;循环移位 mov al,bl and al,0fh add al,30h cmp al,3ah jl printint add al,7h printint: mov dl,al mov ah,2 int 21h dec ch jnz rotate ret

汇编语言学习知识程序设计实验

目录 目录 (1) 实验一利用DEBUG熟悉常用指令的使用 (2) 一、实验目的 (2) 二、示例 (2) 三、实验题 (2) 实验二汇编程序和连接程序的使用 (6) 一、实验目的。 (6) 二、示例。 (6) 三、实验题。 (8) 实验三顺序结构程序设计 (11) 一、实验目的 (11) 二、示例 (11) 三、实验题 (12) 四、实验报告 (15) 实验四循环结构程序设计 (16) 一、实验目的 (16) 二、示例 (16) 三、实验题 (18) 实验五分支结构程序设计 (21) 一、实验目的 (21) 二、示例 (21) 三、实验题 (22) 实验六子程序设计 (29) 一、实验目的 (29) 二、实验题 (29)

实验一利用DEBUG熟悉常用指令的使用 一、实验目的 熟悉指令系统,掌握常用指令的用法;通过实验加深对各种寻址方式的理解;能熟练使用DEBUG中的命令对指令进行反汇编,观察并了解机器代码。 二、示例 请分别用一条汇编语言指令完成如下功能:(过程略)。 1.用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加,并把结果送到AL中。 ADD AL,[BX][SI] 2.用位移量为0520H的直接寻址方式把存储器中的一个字与3412H相加,并把结果送回该存储单元。 ADD WORF PTR [0520H],3412H 三、实验题 1.调试、验证下列指令的结果,已知(DS)=2000H,(BX)=0100H,(SI)=0002H,(BP)=0200H,(SS)=2300H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(21201)=4CH,(21202)=B7H,(21203)=65H,(23204)=88H,说明各指令执行完后AX寄存器的内容。要求输入指令,相应存储单元的内容要事先设置,单步 P执行,观察执行结果。 (设置存储器的值)

实验七-网络程序设计综合实验汇总

网络程序设计 实验报告 实验名称:winsock 编程接口实验实验类型:设计型 指导教师:贾浩 专业班级:信安1204 姓名:马灿 学号:20123252 电子邮件: 实验地点:东6 E307 实验日期:

实验成绩:__________________________

实验七网络程序设计综合实验 摘要:本课程设计包含了文件传输协议的简单设计与实现。文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。文件传输协议的简单设计与实现建立在计算机网络实验环境TCP/IP网络体系结构之上,使用socket编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),利用了已有网络环境设计并实现简单应用层协议。本设计包括了具体设计任务,基本思路及所涉及的相关理论,设计流程图,调试过程中出现的问题及相应解决办法,实验运行结果,核心程序,个人体会及建议等。 关键词:SOCKET编程,FTPclient/server程序 一.问题描述及设计思路 1.1 问题描述 服务器端: 1.指定一个目录作为FTP目录(之后所有的文件操作均在此目录下进行) 2.接收客户端的命令请求并提供相应的服务。 客户端:完成与FTP用户的人机界面,以命令的方式向服务器请求服务,主要的命令有:1.CONNECTIP地址端口号 2.指定FTP服务器的IP地址和端口号,连接到服务器。响应:连接成功/失败。 3.LOGIN用户名 4.用户登录(假设在服务器端有用户管理功能)

5.响应:若用户不存在,提示“无此用户”;若用户存在,提示“密码:”;用户输入密码后,若正确提示“登录成功”;若不成功,提示“密码错误”。6.3.DIR 7.显示FTP服务器的FTP目录的文件列表(假设无子目录) 8.响应:目录列表(只要文件名即可)。 9.4.GET文件名 10.将FTP目录下的文件下载到本地,支持断点续传 11.响应:传送成功/失败/无此文件。 12.5.PUT文件名 13.将本地文件上传到FTP目录,支持断点续传 14.响应:传送成功/失败/无此文件。 15.6.HELP(客户端和服务器端均有该功能) 16.实验环境本次实验采用MFC工程工程采用MFC对话框界面工程名称为MyServer和FTPSOCKET。 17.详细设计过程 1.2 设计思路 1. FTP协议基础 FTP 是TCP/IP 协议组中的协议之一,该协议是Internet文件传送的基础,它由一系列规格说明文档组成。目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上或从自己计算机中拷贝至远程计算机上。在TCP/IP协议中FTP标准命令TCP端口号为21,Port

C++程序设计实验-1-7 - 完整

二、参照例1-2,用结构化方法编程实现: 1、 根据每学年学费、专业总学分、某课程学分,计算上该课程的总花费,以及每学时,每 分钟的花费。(1学分=18学时) 2、 P43编程题1,2,3 1.输入一个三位整数,将它反向输出。 2.输入平面上某点横坐标x 和纵坐标y ,若该点在由图 3.1表示的方块区域内,则输出1;否则,输出0。 图1.11 正方形 3.输入三个整数,求出其中最小数(要求使用条件表达式)。 根据每学年学费、专业总学分、某课程学分,计算上该课程的总花费,以及每学时,每分钟的花费。使得本校不同专业,不同课程的同学都能用它来计算。(1学分=18学时) 提示: 1、定义一个类, 类的数据成员包括:每学年学费、专业总学分、课程学分; 类的成员函数包括: 设置每学年学费、专业总学分、课程学分; 显示每学年学费、专业总学分、课程学分; 计算上某课程的总花费; 计算上某课程的每学时花费; 计算上某课程的每分钟的花费; 1.输入某学生成绩,若成绩在85分以上输出“very good ”,若成绩在60分到85分之间输出“good ”,若成绩低于60分输出“no good ”。 2.输入三个整数,按从小到大的顺序输出它们的值。 3.输入三角形的三条边,判别它们能否形成三角形,若能,则判断是等边、等腰、还是一般三角形。 4.输入百分制成绩,并把它转换成五级分制,转换公式为: ?????????-----=59 069607970898010090(不合格)(合格)(中等)(良好)(优秀)(级别)E D C B A grade 5.编程序模拟剪刀、石头和纸游戏。游戏规则为:剪刀剪纸,石头砸剪刀,纸包石头。玩游戏者从键盘上输入s (表示剪刀)或r (表示石头)或p (表示纸),要求两个游戏者交

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 1、掌握Lab6000p实验教学系统基本操作; 2、掌握8088/8086汇编语言的基本语法结构; 3、熟悉8088/8086汇编语言程序设计基本方法 二、实验设备 装有emu8086软件的PC机 三、实验内容 1、有一个10字节的数组,其值分别是80H,03H,5AH,FFH, 97H,64H,BBH,7FH,0FH,D8H。编程并显示结果:如果数组是无符号数,求出最大值,并显示; 如果数组是有符号数,求出最大值,并显示。 2、将二进制数500H转换成二-十进制(BCD)码,并显示“500H 的BCD是:” 3、将二-十进制码(BCD)7693转换成ASCII码,并显示“BCD 码7693的ASCII是:” 4、两个长度均为100的内存块,先将内存块1全部写上88H,再 将内存块1的内容移至内存块2。在移动的过程中,显示移动次数1,2 ,3…0AH…64H(16进制-ASCII码并显示子程序) 5、键盘输入一个小写字母(a~z),转换成大写字母 显示:请输入一个小写字母(a~z): 转换后的大写字母是: 6、实现4字节无符号数加法程序,并显示结果,如99223344H +

99223344H = xxxxxxxxH 四、实验代码及结果 实验代码见代码附录 1.1程序运行结果 图1 无符号最大值结果截图 1.1 程序运行结果

图2 有符号最大值截图2.0 程序运行结果

图3 BCD码显示3.0 程序运行结果

图4 ASCII码显示4.0 程序运行结果

图5 移动次数显示5.0 程序运行结果

单片机实验4 子程序设计-- BCD码转换为二进制

实验4. 子程序设计----BCD 码转换为二进制 单字节可存放两位压缩BCD 码(0—99) 为0 —9) 单字节BCD 码转换为二进制子程序 入口:(R0)= 压缩BCD 码的地址 出口:(A)= 转换结果 DSFR::MOV A,@R0 ANL A,#0F0H ;取十位数 SWAP A ;变为标准BCD 码 MOV B,#10 MUL AB ;(A)=D1×10 MOV R7,A ;D1× 10暂存 R7 MOV A,@R0 ANL A,#0FH ;取个位 ADD A,R7 ;A=D1×10+D0 RET 1、实验内容: 子程序设计要点: 1) 子程序一般为多次返复使用的程序段,一般应说明入口条件,DSFR 子程序的 入口条件是:被转换为二进制的单字节BCD 码为间接寻址,间接寻址寄存器为R0。要调用DFSR 子程序必需先将压缩BCD 码的存放地址赋与R0。而出口条件是指最后结果在哪儿存放。本子程序转换结果在ACC 内。 2) 主程序调用子程序,在调试时一般要先调试子程序、再调试主程序。

2、实验步骤 1)打开PV32编程序。汇编正确进入调试界面。否则修改程序重新汇编直到通过。 2)打开DATD窗口给20H、21H、R6、R7赋值 3)单步调试DSFR子程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现 问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 4) 设断点调试主程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问 题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 3.实验报告 1.写出主程序流程图、子程序流程图、程序清单 2.根据记渌数据给程序加注解 3.调试心得

实验一简单程序设计实验

实验一:简单程序设计实验 (1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。 程序流程图略。 参考源程序: DATA SEGMENT NUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ? NUM4 DW ? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA ;数据段寄存器初始化 MOV DS,AX MOV AX, WORD PTR NUM1 MOV DX, WORD PTR NUM1+2 DIV NUM2 MOV NUM3,AX MOV NUM4,DX MOV AH,4CH ;正常返回DOS 系统 INT 21H CODE ENDS END START (2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X 1X 2 拆为 X 1 和 X 2 两 部分,并以 0X 1 和 0X 2 的形式分别存入 ARY+1 和 ARY+2 单元中。 程序流程图略。 参考源程序: DATA SEGMENT ARY DB 2AH,?,? DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX,DATA MOV DS,AX MOV SI,OFFSET ARY ;取ARY 的偏移地址 MOV AL,[SI] ;取16进制数至AL

MOV BL,AL AND AL,0F0H ;取16进制数的高四位,即X1 SHR AL,4 MOV [SI+1],AL ;存0X1 MOV AL,BL AND AL,0FH ;取16进制数的低四位,即X2 MOV [SI+2],AL ;存0X2 MOV AH,4CH INT 21H CODE ENDS END START

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

汇编语言程序设计实验报告三(子程序设计实验) 一、实验目的 1、掌握主程序与子程序之间的调用关系及其调用方法。 2、掌握子程序调用过程中近程调用与远程调用的区别。 3、熟练掌握码型变换的程序。 二、实验内容 1、从键盘输入二位非压缩BCD数,存入AX寄存器中,编程实现将其转换为二进制 数,并在屏幕上显示。要求码型转换程序用远程子程序编写,字符显示用近程子程序编写。数据可循环输入,遇‘00’结束。 三、实验准备 1、预习子程序设计的基本方法,根据实验内容要求编写出实验用程序。 2、熟悉键盘输入和字符显示的程序段的编制。 四、实验步骤 1、编辑、汇编源程序,生成可执行文件。 2、执行程序,检查输入、输出结果,看是否正确。如不正确,用DEBUG检查,修改 源程序,再汇编、运行,直到程序正确为止。 3、用DEBUG的T命令或P命令跟踪程序的执行,观察在远程和近程调用过程中,堆 栈的变化情况。 五、实验报告要求 1、分析近程调用和远程调用的主要区别。用DEBUG命令观察执行过程有何不同。 2、分析实验结果及所遇到的问题的解决方法。 主程序流程图 转换子程序TRAN流程图

七、程序清单 STA SEGMENT STACK ’STACK’ DB 100 DUP(0) STA ENDS GSAG SEGMENT PARA ‘CODE’ ASSUME CS:CSAG MAIN PROC FAR STRA T: PUSH DS SUB AX,AX PUSH AX REV: MOV AH,1 INT 21H MOV BL,AL INT 21H MOV AH,AL MOV AL,BL CMP AX,3030H JE ENDTRAN CALL NEAR PTR TRAN CALL FAR PTR CON MOV AL,0DH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP MOV AL,0AH CALL FAR PTR DISP JMP REV ENDTRAN: RET MAIN ENDP TRAN PROC NEAR AND AX,0F0FH MOV BL,AL MOV BL,AL MOV CL,3 SHL AL,CL MOV CL,1 SHL BL,CL ADD AL,BL ADD AL,AH RET TRAN ENDP CSAG ENDS CSBG SEGMENT PARA’CODE’ ASSUME CS:CSBG

汇编语言 实验七子程序设计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

实验三-选择结构程序设计

实验三选择结构程序设计 3.1实验要求与目的 1.掌握关系表达式和逻辑表达式的正确应用 2.条件表达式的正确应用 3. 掌握if语句,if-else语句,if语句的嵌套的编程方法 4. 掌握switch的编程方法及执行特点 5.掌握相关的算法(大小写字母的转换,判断数的奇偶,整数的整除,分段函数的求解,成绩的转换等) 6. 培养解决实际问题的能力 3.2实验指导 结构化程序设计的三大结构:顺序结构、选择结构和循环结构。 计算机在执行过程时,根据条件选择所要执行的语句,称为选择结构,也称为分支结构。在解决实际问题时,可能会因为其种条件的约束产生分支,可能是单分支结构、双分支结构和多分支结构等。因此可选择相应的语句进行程序设计。 C语言程序设计实现单分支结构常采用,if语句;实现双分支结构常采用:if-else语句;实现多分支结构常采用:if-else嵌套语句或switch语句。 选择结构的程序设计除了选择适当的语句外,另一关键问题是条件的正确表示。条件可以用表达式来描述,如关系表达式、逻辑表达式等。 【3.1】录入下列程序,输入给定的测试数据,观察其程序执行结果。程序文件名为:ex3_1.c。 输入测试数据:23 56 程序运行结果:max=56 #include void main() { int a,b,max; scanf("%d%d",&a,&b); /*从键盘输入两整数*/ max=a; if(max

实验四子程序设计实验

实验四:子程序设计实验 专业班级 姓名: 学号: 联系方式

一、任务要求: 1. 调试程序dmove.asm,观察片外数据区7000H、A000H开始的单元内容变化规律。 修改程序将7010H-7073H单元内容传送至B000H开始的存储区中。 2. 设计一个子程序,统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。 3.(选作题)设计子程序,实现对片外数据存储器的测试。具体要求如下: 1)测试方法自选 2)数据存储区首地址、长度可变。 3)可统计坏单元数目,并记录坏单元地址。 4)利用LED指示灯,提示测试过程和结果状态。 二、设计思路 实验一: 1.用MOVX @DPTR, A 指令,向片外数据区7000H到70FFH单元内容送值。 2.用同样的指令,将7010H-7073H单元内容传送至B000H开始的存储区中。 实验二: 1.将要检验的地址区域内容逐个取出,进行奇偶判断 2.是偶数则统计加一,之后对下一位进行判断 3.不是则对下一位进行判断 4.结束后返回 实验三: 1.先将监测区域内赋值 2.赋值完成后通过改变区域内的内容,再进行检测 3.若两次的内容不相同,则统计数加一并记录地址 4用P1,P2,P3口的状态来表示LED指示灯的工作状态 三、资源分配

实验一: 1.起始地址为0090H 2.向片外数据区7000H、A000H开始的单元赋值。 3.将7010H-7073H单元内容传送至B000H开始的存储区中。 实验二: 1. 起始地址1000H 2. 统计片外数据区从2000H开始的256个符号数中偶数的个数,低位存入R3,高位存入R2。 实验三:(选作题) 1.起始地址2000H 2.向7000H开始的片外RAM空间送监测数 3.错误数目放在R2中 4.错误地址放在片内IDA TE中 四、流程图

实验七子程序设计

实验七:子程序设计 一、实验目的: 通过运行例题程序,了解并掌握简单子程序的编写以及调用方法。 二、实验基础知识: 1、什么是子程序? 子程序又称为过程,是能完成特定功能有一定通用性的程序段,在需要时能被其它程序调用。调用子程序的程序常称为主程序。一般把源程序中反复出现的程序段或常用的功能独立的程序段设计成子程序供用户使用。 这样可以简化源程序结构、节省目标程序的存储空间,提高程序设计的效率。子程序结构也是模块化程序设计的基础。 2、子程序的定义 子程序的定义是由过程定义伪指令PROC和ENDP实现,格式如下: 过程名PROC [NEAR|FAR] …;过程体(实现某功能的指令集合体) 过程名ENDP 说明:NEAR属性的过程只能被相同代码段的其他程序调用,FAR属性的过程可以被不同代码段的程序调用。过程体中必须包括RET(返回主程序)指令。其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。(1)子程序和主程序在同一个代码段中,则子程序定义为NEAR属性。 (2)子程序和主程序不在同一个代码段中,则子程序定义为FAR属性。 (3)主程序通常定义为FAR属性,这是因为主程序被看作DOS调用的一个子程序,以便执行完返回DOS。 3、子程序的设计方法 子程序可以放在代码段主程序开始执行之前的位置,也可放在代码段的末尾主程序执行终止后的位置。 为了便于其他程序员能正确使用子程序,在编写子程序时,还要养成书写子程序说明信息的良好习惯。子程序说明信息一般包括以下内容: (1)子程序名 (2)功能描述 (3)入口和出口参数 (4)调用注意事项和说明等 子程序实例: ;子程序名:stob ;功能:将小写字母修改为大写字母 ;入口参数:al存放输入的字符 ;出口参数:al存放修改后的字符 stob proc near cmp al,61h jb next cmp al,7ah

实验报告 子程序设计实验

实验5 子程序实验 一.实验目的 1.掌握主程序与子程序之间的调用关系及调用方法; 2.掌握子程序调用过程中近程调用与远程调用的区别; 3.掌握通过堆栈转送参数的方法。 4. 掌握多模块程序设计方法 二.实验内容 1.将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来。要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示。 DATAS SEGMENT BUF DB 00000111B,00100001B,00100010B,00000011B,00000101B,10000010B,10010011B,00100100B, 11100010B,01010010B CAN DB $-BUF ;定义常量CAN DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS MAIN PROC FAR ;主程序块 START: MOV AX,DATAS MOV DS,AX MOV CL,10 LEA SI,BUF LOOP1: ;调用子程序语句 call HEXAC call DISP DEC CAN JNZ LOOP1 EXIT: MOV AH,4CH INT 21H MAIN ENDP HEXAC PROC NEAR ;二进制转换成十六进制子程序 MOV BL,[SI] INC SI RET HEXAC ENDP

DISP PROC NEAR ;显示子程序 MOV CL,4 MOV CH,2 MOVE: ;移位语句 ROL BL,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,'9' JBE PRINT ADD DL,07H PRINT: MOV AH,02H ;显示语句 INT 21H DEC CH JNZ MOVE MOV DL,' ' MOV AH,02H INT 21H RET DISP ENDP CODES ENDS END START 2.编写一个主程序,从键盘接收若干个字符,然后用远调用的方法,调用子程序统计字符串中字符’b’的个数.子程序的参数是字符串的首地址TABLE,字符串长度N及字符”b”.子程序返回字符"b”的个数.参数传送采用堆栈实现.主程序在子程序返回后,显示字符”b”及其个数(设为一位十六进制数)。 DATA SEGMENT STR1 DB 0ah,0dh,'PLEASE INPUT YOUR STRING:$' STR2 DB 0ah,0dh,'THE NUMBER OF b is:$' TABLE DB 50, ? ,50 DUP(?),'$' DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX,DATA MOV DS,AX LEA DX,STR1 MOV AH,9 INT 21H LEA DX,TABLE

汇编实验四 子程序设计

福建农林大学计算机与信息学院实验报告 系:计算机专业:网工年级:10 姓名:学号:20 实验室号__田513 计算机号 实验时间:指导教师签字:刘庆连成绩: 实验四子程序设计 1.实验目的 (1)学习子程序的编写,主子程序的调用; (2)不同模块间程序的调用和调试。 2.实验内容 1)数据段中的3个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,对CALL语句和RET语句观察SP,IP的变化,并用D命令查看栈顶的内容。 DATA SEGMENT MAG DB ‘ABC’ DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DA TA START: MOV AX, DA TA MOV DS, AX MOV SI, 0 MOV CX, 3 LL: MOV DL, MAG[SI] CALL MADD INC SI LOOP LL MOV AH, 4CH INT 21H MADD PROC MOV AH, 02H INT 21H RET

MADD ENDP CODE ENDS END START 2)阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。 具体步骤如下: MASM S31.ASM(分别汇编) MASM S32.ASM LINK S31 S32 (将两个文件连接成为一个文件名为S31) S31.EXE (运行) 3)编程:利用主程序调用子程序,比较BUF1和BUF2缓冲区中不相等的字符,并将不相等的字符显示出来。(也可以将找到的不相等字符逐个显示,用INT 21H的02功能调用) 4)编程:子程序搜索指定字符缓冲区中是否有N,如果有用Y替代。调用子程序将BUF1,BUF2,BUF3中的N全部用Y替代。 附源程序: NAME S31.ASM 不同模块间的段间调用。从键盘输入2位非压缩BCD数,存入AX寄存器中。为了将其转换为二进制数,编写一个子程序TRAN。显示子程序DISP完成将16进制数转换为对应的ASCII码并显示该字符,显示子程序在另一模块S32中。输入数据为00时结束。 5)编一个子程序:输入一个字符,显示出来。 6)编一个子程序:输入一个字符串,显示出来。 4.算法描述及实验步骤 第一题 (1) 编写源程序,用记事本输入程序,并存储为源程序 (2)对源程序进行汇编、连接 (3)在debug提示符下输入g ,运行程序 (4)运行t命令,单步执行程序 (5)用d命令查看栈顶的内容 第二题 (1) 编写两段源程序,用记事本输入程序,并存储为源程序,分别为s31和s32 (2)分别对源程序进行汇编

实验三-选择结构程序设计

实验三-选择结构程序设计 实验三选择结构程序设计 实验要求与目的 1.掌握关系表达式和逻辑表达式的正确应用 2.条件表达式的正确应用 3. 掌握if语句,if-else语句,if语句的嵌套的编程方法 4. 掌握switch的编程方法及执行特点 5.掌握相关的算法 6. 培养解决实际问题的能力 实验指导 结构化程序设计的三大结构:顺序结构、选择结构和循环结构。计算机在执行过程时,根据条件选择所要执行的语句,称为选择结构,也称为分支结构。在解决实际问题时,可能会因为其种条件的约束产生分支,可能是单分支结构、双分支结构和多分支结构等。因此可选择相应的语句进行程序设计。 C语言程序设计实现单分支结构常采用,if语句;实现双分支结构常采用:if-else语句;实现多分支结构常采用:if-else嵌套语句或switch语句。 选择结构的程序设计除了选择适当的语句外,另一关键问题是条件的正确表示。条件可以用表达式来描述,如关系

表达式、逻辑表达式等。录入下列程序,输入给定的测试 数据,观察其程序执行结果。程序文件名为:ex3_。输 入测试数据:23 56 程序运行结果:max=56 #include void main() { int a,b,max; scanf(\ /*从键盘输入两整数*/ max=a; if(max void main() { char c; scanf(\ if('a' void main() { int m,n; printf(\ m & n:\ scanf(\ if(m%n==0) /*判断m能否被n整除*/ printf(\ else printf(\} 第一次运行程序, 输入测试数据:21 7 程序运行结果:m=21,n=7 第二次 运行程序。 输入测试数据:23 6 程序运行结果:5 小结: 1.此题可扩展为,判断一个数是偶数还是奇数。若m 是偶数则只需考虑m能否被2整除,若能整除,则m是偶数,不能整除则m是奇数。 2.注意一个等号“=”与双等号“==”的区别。

实验1 汇编程序设计

实验一、汇编语言程序设计 一、实验目的 1. 熟悉Keil C51集成开发环境的使用方法。 2. 掌握数据传送指令的用法。 3. 掌握算术运算指令的用法 4. 掌握汇编语言程序设计方法 二、实验设备(仪器) PC微机一台 Keil C51集成开发环境一套 三、实验内容 1.按照Keil C51集成开发环境的要求,建立程序,然后进行编译。 2.将编译好的程序进行软件模拟仿真运行。 3. 数据传送,算术运算指令。 4. 逻辑操作、位操作和控制转移指令。 5.顺序程序设计 6.分支程序设计 7.循环程序设计 四、实验步骤 1.打开计算机电源,在桌面上双击“Keil uVision”图标,打开Keil C51集成开 发环境。 2.选择“Project”-“New Project…”建立新的工程文件(注意工程文件放置的文 件夹),输入文件名,选择“保存”。 3.在接下来的窗口中选择单片机芯片类型,暂时选择“Philips”下的“80C51FA”, 然后在接下来的窗口中,选择“否”,暂时不要加载芯片基本参数。 4.选择“File”-“New”或者点击新文件快捷图标,会打开一个文本编辑器窗口。 输入下列数据传送的程序,然后选择“File”-“Save…”,注意保存的时候给文件 起名字以后,加个文件名后缀,Keil C支持汇编语言及一种C语言编程,它是 依靠文件名后缀来判断文件是汇编语言还是C语言格式的,如果是汇编语言, 后缀为“.a”,C语言格式的,后缀为“.c”。我们选择保存为汇编语言格式,比 如保存为“Mcu1-1.a”。注意此时程序中的一些代码和寄存器将会自动蓝色显示,方便观察。 5.选择“Project”-“Targets,Groups,Files…”,选择“Groups/Add Files”标签, 首先点击下边窗口中的“Source Group 1”,然后选择下边的“Add Files to Group…”,在接下来的窗口中,首先选择你需要加入的文件的后缀名(默认是.c,我们选择“Asm Source file,即后缀为.a”),然后选择对应的文件,选择“Add”, 然后选择“Close”,最后选择“确定”,完成文件的添加工作。 6.然后选择“Project”-“Build target”或者直接按下F7,对文件进行编译。如果

汇编实验1-分支程序设计-实验报告

昆明理工大学信息工程与自动化学院学生实验报告 ( 2011 — 2012 学年第 1 学期) 课程名称:汇编与微机接口开课实验室:信自楼机房445 2011年09月27日年级、专业、班学号姓名成绩 实验项目名称分支程序设计指导教师 教师评语该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□ 该同学的实验能力: A.强□ B.中等□ C.差□ 该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□ 实验报告是否规范: A.规范□ B.基本规范□ C.不规范□ 实验过程是否详细记录: A.详细□ B.一般□ C.没有□ 教师签名: 年月日 一、实验目的 1)熟悉汇编语言程序设计的开发环境、格式以及汇编过程; 2)Debug的主要命令(结合教材第四章的例子),熟练掌握Debug命令的U命令、D命令、R命令、G命令、T命令、Q命令等; 3)掌握分支程序的设计方法; 二、所用仪器、材料(设备名称、型号、规格等) 计算机一台,MASM 5.0软件。 三、实验内容 1)输入并汇编折半查找程序; 2)观察并记录运行结果。

四、实验方法、步骤(或:程序代码或操作过程) 程序代码: STACKSG SEGMENT STACK 'S' DW 64 DUP('ST') STACKSG ENDS DATA SEGMENT BUF DB 30H,31H,32H,33H,34H,35H,36H, 37H,38H,39H,41H,42H,43H,44H,45H;有序表COUNT EQU $-BUF ;表项数 CHAR DB ? ;要查找的数 MARK DW 0 ;查找次数 PROMPT DB 'NO FOUND$' ;没找到提示信息 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSG MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV AH,1 ;输入要查找数的字符 INT 21H MOV CHAR,AL ;保存要找的数 LEA SI,BUF ;表起始地址,初始 ;化区间下限(左) MOV CX,COUNT

实验9 程序设计三

实验九VFP程序设计三——子程序与过程 一、实验目的: 1. 学习模块化程序设计,理解子程序、自定义函数和过程的异同; 2. 掌握子程序的编写,理解参数的传递; 3. 进一步掌握分支和循环结构,掌握变量的作用域。 二、实验环境 1.Windows系统 2.VFP6.0 三、实验内容(步骤) 1. 练习教材P162的例7.26 2. 完成下面题目: 已有数据库表“学生.dbf”,“课程.dbf”和“选课.dbf”,如下表所示。 编程实现: 1.根据用户的输入查询该同学所选修的课程的情况,并统计输出该生的平均成绩。2.按以下格式显示出来,如所输入的学号查找不到,则显示“查无此人”。 请输入所查学生的学号:s0201101 姓名课程名课时成绩 王小平数学建模 80 86 王小平计算机网络 60 89 该生的平均成绩:87.5 (请在实验报告册上写出程序代码)参考代码如下: set talk off set safe off

clear select 1 use 课程 index on 课程号tag kch select 2 use 选课 select 3 use 学生 index on 学号tag xh select 2 set relation to 学号into c set relation to 课程号into a addi accept "请输入所查学生的学号:" to no locate fo 学号=no if found() aver for 学号=no to pjcj ?"姓名课程名课时成绩" locate all for 学号=no do while found() ?c.姓名,a.课程名,a.课时,成绩 continue enddo ? ?"该生的平均成绩:" ,pjcj else ?"查无此人" endif set talk on set safe on close data return 3. 完成实验教材P13页实验七第三题的第1、2、3小题。 四、认真总结,填写实验报告

汇编语言程序的设计实验篇(emu8086)

1.汇编语言程序设计实验篇 1.1.汇编系统软件简介 Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和存单元的容。 1.1.1创建程序 https://www.sodocs.net/doc/4319045605.html, TEMPLATE程序 本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。 在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。

在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。 输入全部指令后,单击按钮,保存相应的程序段。 2.EXE TEMPLATE程序 本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。

在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。 在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。

相关主题