文档库 最新最全的文档下载
当前位置:文档库 › 实验六 宏汇编的程序设计

实验六 宏汇编的程序设计

实验六  宏汇编的程序设计
实验六  宏汇编的程序设计

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

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

实验四循环结构汇编语言程序设计 一、实验目的 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.掌握子程序的程序设计、编制及调用。 二、实验设备 TDN86/88教学实验系统一台 三、实验内容及步骤 1.求无符号字节序列中的最大值和最小值 设有一字节序列,其存储首址为3000H ,字节数为08H 。利用子程序的方法编程求出该序列中的最大值和最小值。实验程序及流程如下: 主程序 STACK1 SEGMENT STACK DW 64 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE START: MOV SI,3000H MOV CX,0008H CALL branch A1: JMP A1 branch: JCXZ A4 PUSH SI PUSH CX PUSH BX

子程序 实验步骤 (1)输入源程序,进行编译、链接和加载。 (2)在调试区键入E0000:3000↙,输入8个字节的数据:D9、07、8B、C5、EB、04、9D、F9。 (3)运行程序,查看结果,在调试区键入R AX↙,显示结果应为AX=F9 04,AH中为最大值,AL中为最小值。 2.数组求和 设有一字节序列(存储地址和字节数可自定义),编写程序,求出该序列的和,求和工MOV BH,[SI] MOV BL,BH A1: LODSB CMP AL,BH JBE A2 MOV BH,AL JMP A3 A2: CMP AL,BL JAE A3 MOV BL,AL A3: LOOP A1 MOV AX,BX POP BX POP CX POP SI A4: RET CODE ENDS END START

程序设计实验报告

学生实验报告 院系:测绘学院 专业班级:测绘13级3班 学号:2013305517 学生姓名:王泽 指导教师:郭辉老师 2016年05月20日

安徽理工大学实验报告 实验课程名称:数据结构与软件开发上机实验 开课院系及实验室:测绘学院红楼二楼机房 实验1 编程基本知识练习 实验目的: 通过该实验课内容的练习,学生应掌握VB 编程的基本语法、变量的定义、数组(动态数组)的定义、VB 语言中子过程与函数的定义以及文本文件的读写等知识。 实验内容: 1)变量的定义动态数组的定义与应用; 2)矩阵的加、减、乘运算(定义Sub()子过程或Function()来实现); 3)数据文件的建立、数据的读取与写入。 实验步骤: 1.编辑界面 1.1 打开VB 编程工具,进入编程主界面。

1.2 在窗体上新建“读入数据”和“输出数据”两个按钮。 1.3 双击“窗体”进入代码输入界面,进行代码编辑。 2.用VB 编写的源代码 2.1 矩阵基本运算源码详见附录一。 (1)两矩阵相加 (2)两矩阵相减 (3)矩阵转置 (4)两矩阵相乘 (5)矩阵求逆 2.2 文本文件(本实验中data.txt)的读取源代码 (1)建立文本文件并输入数据 在桌面上新建一“data.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\data.txt”)。输入以下内容: 6,7,4,0.005 A,35.418 B,45.712 C,25.270

D,24.678 在桌面上新建一“result.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\result.txt”)。(2)从文本文件中读数据 Dim linedata as string, m_GaochaN as integer,m_Pnumber as integer,m_knPnumber as integer,M as Double,k1 as integer 'linedata 为存储文本文件一行信息的字符串变量 Dim a() as String,H() as Double 'a()为存储点名,H()存储高程 Open“C:\Users\ WH\Desktop\练习\data.txt”For Input As #1 Line Input #1, linedata k = Split(linedata, ",") m_GaochaN = Val(k(0)) m_Pnumber = Val(k(1)) m_knPnumber = Val(k(2)) M = CDbl(k(3)) For k1 = 1 To m_knPnumber Line Input #1, linedata k = Split(linedata, ",") a(k1)= k(0) GetstationNumber (a) H(k1) = CDbl(k(1)) Next Close #1 (3)将读入点名存储到点名数组中,且返回该点名所对应编号 Function GetstationNumber(name As String) Dim i As Integer For i = 1 To m_Pnumber If P_Name(i) <> "" Then '将待查点名与已经存入点名数组的点比较 If P_Name(i) = name Then GetstationNumber = i Exit For End If Else '待查点是新的点名,将新点名放到P_Name 数组中 P_Name(i) = name GetstationNumber = i Exit For End If Next i End Function (4)从文本文件中写数据(将从data.txt 读入的数据,写入到result.txt 文件中) Open“C:\Users\ WH\Desktop\ 练习\result.txt” For Output As #1 outstring = outstring + str(m_GaochaN) +","

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

目录 目录 (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执行,观察执行结果。 (设置存储器的值)

实验3 子程序设计

实验3子程序设计实验 [实验目的] 1.掌握利用堆栈传递参数的子程序调用方法。 2.掌握子程序递归调用方法。 3.过程调用伪指令: PROC,ENDP,NEAR和FAR。 4.8088指令: CALL,RET,RET n。 5.利用RET指令退出EXE文件的方法。 [实验重点和难点] 1.利用堆栈传递参数的子程序调用方法; [实验课时] 2学时 [实验仪器] 联想启天2400微型计算机。 [实验原理] 1.参考教材的汇编语言程序设计 2. [实验内容与步骤] 1.利用堆栈传递参数的子程序调用(求累加和) 程序内容: STACK SEGMENT STACK DB 256 DUP(0) STACK ENDS DATA SEGMENT ARY1 DB 1,2,3,4,5,6,7,8,9,10 COUNT1 EQU $-ARY1 SUM1 DW ? ARY2 DB 10,11,12,13,14,15,16,17,18 COUNT2 EQU $-ARY2 SUM2 DW ? DATA ENDS MAIN SEGMENT ASSUME CS:MAIN,DS:DATA,SS:STACK START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AX,COUNT1 PUSH AX LEA AX,ARY1 PUSH AX CALL FAR PTR SUM MOV AX,COUNT2 PUSH AX LEA AX,ARY2 PUSH AX CALL FAR PTR SUM RET START ENDP MAIN ENDS PROCE SEGMENT ASSUME CS: PROCE SUM PROC FAR MOV BP,SP MOV CX,[BP+6] MOV BX,[BP+4] XOR AX,AX ADN: ADD AL,[BX] ADC AH,0 INC BX LOOP ADN MOV [BX],AX RET 4 SUM ENDP PROCE ENDS END START 操作步骤: (1)输入,汇编并将此程序连接成EXE文件。

汇编语言程序设计实验七

实验七子程序的应用 【实验目的】 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、实验目的: (1)熟悉汇编语言的编辑、汇编、连接、运行的全过程。 (2)了解汇编语言的程序结构、学习调用过程实现输入输出及用INCLUDE 命令包含文件的方法。 (3)子程序设计 2.实验步骤: (1)用编辑软件记事本或EDIT 编辑一个扩展文件名为ASM的汇编语言源程序。 (2)用汇编程序TASM 汇编上述的汇编语言源程序,形成目标代码文件。 (扩展名为OBJ) (3)用连接程序TLINK连接目标代码文件,形成可执行文件。(扩展名为EXE) (4)运行可执行文件。观察执行结果,以验证其正确性。 3.实验内容: (1)从键盘上输入若干个十进制数(-32767

again1: mov ax,[si] cmp ax,[si+2] jle next1 xchg ax,[si+2] xchg ax,[si] next1: add si,2 loop again1 mov cx,di loop again2 mov ah,9 lea dx,out_message int 21h mov cx,count ;输出(升序) lea si,array again3: mov bx,[si] call write call dpcrlf inc si inc si loop again3 mov ax,4c00h int 21h INCLUDE out_B_D.ASM INCLUDE in_D_B.ASM END (2)从键盘上输入若干个十进制数(-32767

实验四 MATLAB程序设计

实验四 MATLAB 程序设计 1.实验目的 (1)熟练掌握MATLAB 的程序流程控制结构。 (2)掌握M 文件的结构,M 函数文件编写、使用。 (3)熟练掌握函数调用和参数传递。 2.实验仪器 (1)Matlab6.5应用软件安装版 一套 (3)PC 机 一台 3. 实验原理 依据MA TLAB 的编程的原理,编写M 函数文件,调用M 函数文件,完成曲线绘制。 4. 实验步骤 (1)利用for 、while 控制语句和sum 指令求和。 (2)使用MA TLAB 函数文件绘图。 (3)利用置换指令绘制脉冲响应曲线. (4)利用feval 指令实现指定的函数。 5. 实验报告内容(选做其中两题) (1)分别用for 和while 循环语句计算∑==630i i 2 K 的程序,再写出一种避免循环的计算程序。 (提示:可考虑利用MA TLAB 的sum (X,n )函数,实现沿数组X 的第n 维求和。)保存为M 文件. (2)将课本例4-8子函数编程及调用演示,三个子图上的圆和多边形绘制在同一坐标系中。并保存为M 文件。保存输出结果图。 (3)利用置换指令subs(X,new),例4-18中的脉冲响应在t=[0,18]的曲线。并保存为M 文件。保存输出结果图。 (4)试利用feval ()指令计算F(x)+F 2(x),其中F 可取‘sin ’、‘cos ’。(提示:先编写以个M 函数function y=trif(F,x)实现F(x)+F 2(x)的计算,在编写调用函数完成F 为‘sin ’、‘cos ’的计算),并保存为M 文件。(指定完成sin(pi/2)+sin(pi/2)^2; cos(pi/3)+cos(pi/3)^2)

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

微机原理实验报告 实验名称汇编语言程序设计 一、实验目的 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 程序运行结果

宏指令及子程序设计实验

实验五:宏指令及子程序设计实验 院系名称:电子工程学院 学生姓名:李倩(33) 专业名称:电子信息工程 班级:电子0808

宏指令及子程序设计实验 5.5.1 实验目的 1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。 2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。 3、了解宏指令与子程序的异同以及各自的适用场合。 5.5.2 实验预习要求 1、复习宏指令的定义与调用方法。 2、复习过子程序的定义与调用方法。 3、根据“2.5.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。 4、从“2.5.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 5.5.3 实验内容 从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在 屏幕上显示出来。 要求: ①在屏幕上显示字符串提示信息的 功能由宏指令DSTRING实现; ②将键盘输入的十进制数转换成二 进制数由子程序DTOB实现; ③在N个无符号字节型二进制数中 找出最大数的功能由子程序FMAX实现; ④将一个无符号字节型二进制数转 换为十进制数并在屏幕上显示的功能由子 程序BTOAD实现。 程序运行结果如右图所示。 1、编程指导 (1)显示提示信息的宏指令DSTRING的编写 宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。 下面给出实现提示信息显示的宏指令的定义: DSTRING MACRO STRING PUSH DX PUSH AX MOV DX,OFFSET STRING MOV AH,09H INT 21H POP AX POP DX ENDM 请读者注意,宏指令应该先定义,后调用。因此,宏定义通常紧跟在代码段中段寄存器赋值指令之

北京理工大学汇编语言实验报告实验五 子程序设计实验

实验五子程序设计实验(设计性实验) 一、实验要求和目的 1.熟悉汇编语言程序设计结构; 2.熟悉汇编语言子程序设计方法; 3.熟悉利用汇编语言子程序参数传递方法; 4.熟悉汇编语言字符串处理基本指令的使用方法; 5.掌握利用汇编语言实现字符串的输入输出程序设计方法; 6.掌握数制转换程序实现方法。 二、软硬件环境 1、硬件环境:计算机系统windows; 2、软件环境:装有MASM、DEBUG、LINK、等应用程序。 三、实验涉及的主要知识 A)子程序知识要点: 1、掌握子程序的定义语句; 过程名 PROC [near/far] 过程体 RET 过程名 ENDP 2.子程序结构形式 一个完整的子程序一般应包含下列内容: 1. )子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法. 说明时,应含如下内容: .子程序名:命名时要名中见意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回 在汇编语言中,子程序的调用用CALL,返回用RET 指令来完成。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS:IP。 3.)子程序的现场保护与恢复 保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复。 一般利用堆栈实现现场保护和恢复的格式: 过程名PROC [NEAR/FAR]

单片机实验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、掌握主程序与子程序之间的调用关系及其调用方法。 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

微机实验 子程序设计

微机实验三分支和循环程序设计实验 一、分支程序设计实验 1.实验目的 1.掌握分支程序的结构。 2掌握分支程序的设计、调试方法。 2.实验设备 微机一台 3.内容 设计一数据块间的搬移程序 设计思想: 程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三种情况。 对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏。 可以得出以下结论:当源数据块首址〉目的块首址时,从数据块首址开始传送数据。当源数据块首址〈目的块首址时,从数据块末地址开始传送数据。 流程图: 结果: 在源数据块中存入6个数,分别使SI大于、等于、小于DI均发觉数据正确传送。可见程序正确。

实现代码如下: DATA SEGMENT ORG 3500H SRC_MESS DB 1,2,3,4,5,6 ORG 3510H NEW_LOC DB 20 DUP(0) DATA ENDS ; CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,SRC_MESS LEA DI,NEW_LOC MOV CX,6 CLD ;DF置0 CMP SI,DI ;源数据块首址〈目的块首址时,从数据块末地址开始传送数据。 JL NEXT1 ;如果SI小于DI,则跳转到NEXT1(否则直接执行NEXT2) NEXT2: REP MOVSB NEXT1: ADD SI,CX ; SI=SI+CX-1 从末地址开始传递数据 DEC SI ; ADD DI,CX ;DI+=DI+CX-1 DEC DI ; STD ; DF置1 JMP NEXT2 ; CODE ENDS END START 结果显示:将3500H开始的1,2,3,4,5,6复制到3510H开始的地址。 DATA SEGMENT

实验5 子程序设计

实验五子程序结构设计 一、实验目的 1、加深对子程序的理解,掌握子程序的结构。 2、掌握子程序的设计、编写及调试方法。 二、实验内容 1、已知在内存数据段中GRADE开始单元连续存放着10个学生的成绩,试 采用子程序结构编程实现以下功能: (1)找到最高成绩,将其偏移地址存放在内存单元MAX中。 (2)统计不及格的人数,存放在内存单元COUNT中。 (3)计算平均成绩(只取整数部分)。 (4)在屏幕上显示平均成绩。 要求:将以上功能分别写成子程序,数据区定义如下 DSEG SEGMENT GRADE DB 76,68,54,80,45,92,63,58,94,85 MAX DW ? COUNT DB ? DSEG ENDS 答:源程序: DATAS SEGMENT GRADE DB 76,68,54,80,45,92,63,58,94,85 MAX DW? COUNT DB? DATAS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS MAIN PROC FAR START: PUSH DS MOV AX,0 PUSH AX MOV AX,datas MOV DS,AX CALL MAXGRADE CALL BUJIGE

CALL AVGRADE RET MAIN ENDP MAXGRADE PROC FAR push ax push cx push si mov cx,10 mov ax,0 mov si,ax start_loop: mov ax,word ptr grade[si] cmp ax,word ptr grade[si+1] jge big mov ax,word ptr grade[si+1] big: inc si loop start_loop mov max,ax pop si pop cx pop ax ret MAXGRADE ENDP BUJIGE PROC FAR PUSH SI PUSH CX PUSH AX MOV AX,0 MOV COUNT,0 MOV CX,10 LOOP_START2: MOV AX,WORD PTR GRADE[SI] CMP AX,60 JG SMALL2 INC COUNT SMALL2: INC SI LOOP LOOP_START2 POP AX POP CX POP SI

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

Web应用程序设计综合实验报告解析

Web应用程序设计综合实验报告题目:网上购物系统 学生姓名: XXX 学号: XXXXXXXXXXX 院(系): XXXXXXX 专业: XXXXXXXXXX 指导教师: XXXXXXXXXX 2014 年 7月 6 日

1、选题背景 随着计算机技术的发展和网络人口的增加,网络世界也越来越广播,也越来越来越丰富,网上商城已经成为网上购物的一股潮流。互联网的跨地域性和可交互性使其在与传统媒体行业和传统贸易行业的竞争中是具有不可抗拒的优势。在忙碌丰富的社会生活中,人们开始追求足不出户就能买到心仪的商品,是越来越多的上网爱好者实现购物的一种方式,对于企业来说,网络交易能大大提高交易速度、节约成本。在这种形势下,传统的依靠管理人员人工传递信息和数据的管理方式就无法满足企业日益增长的业务需求,因而开发了这样一个具有前台后台的网上商城系统,以满足购物者和企业的需求。 因此这次毕业设计题目就以目前现有的网上商城系统为研究对象,研究一般的网上商城的业务流程,猜测其各个功能模块及其组合、连接方式,并分析其具体的实现方式,最后使用Java加web服务器和数据库完成一个网上商城系统的主要功能模块。通过这样一个设计,可以提高自己Java编程的水准,也练习了怎样构建一个完整的系统,从系统的需求分析到设计,直至编码、测试并运行,熟悉并掌握一个完整的Web开发流程,为今后工作打下基础。 1.1设计任务 从以下几个方面实现网络商城的基本功能: 1、用户部分: (1)用户的登录和注册,用户必须注册才能购物,注册时系统会对注册信息进行验证,进入系统或是结账时,用户可以进行登录,登录时,如果密码错误,系统会进行验证并提示错误。 (2)浏览商品,实现用户可以在网络商店中随意浏览商品,商品按类别分类,方便用户查找不同类别的商品 (3)购物车管理,能实现添加商品、删除商品、更新商品的功能。 (4)生成订单,查看购物车后单击下一步则生成订单信息表,一旦提交订单,则购物车就不能被改变。 2、管理员部分:

子程序设计实验

实验四子程序设计实验 一、实验目的 1.学习子程序的定义和调试方法。 2.掌握子程序、子程序的嵌套、递归子程序的结构; 3.掌握子程序的程序设计及调试方法。 二、实验设备 PC 机一台,TD-PITE 实验装置一套。 三、实验内容及步骤 1.求无符号字节序列中的最大值和最小值 设有一字节序列,其存储首地址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值和最小值。程序流程图如图4-1所示。 图4-1 程序流程图 实验程序 SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE

START: MOV AX, 0000H MOV DS, AX MOV SI, 3000H ; 数据区首址 MOV CX, 0008H CALL BRANCH ; 调用子程序 HERE: JMP HERE BRANCH PROC NEAR JCXZ A4 PUSH SI PUSH CX PUSH BX MOV BH, [SI] MOV BL, BH CLD A1: LODSB CMP AL, BH JBE A2 MOV BH, AL JMP A3 A2: CMP AL, BL JAE A3 MOV BL, AL A3: LOOP A1 MOV AX, BX POP BX POP CX POP SI A4: RET BRANCH ENDP CODE ENDS END START 实验步骤: (1)根据程序流程图编写实验程序; (2)经编译、链接无误后装入系统; (3)键入E3000命令,输入8个字节的数据,如:D9 07 8B C5 EB 04 9D F9; (4)运行实验程序; (5)点击停止按钮,停止程序运行,观察寄存器窗口中AX的值,AX应为F9 04,其中AH中为最大值,AL中为最小值; (6)反复测试几组数据,检验程序的正确性。 程序说明:该程序使用BH和BL暂存现行的最大值和最小值,开始时初始化成首字节的内容,然后进入循环操作,从字节序列中逐个取出一个字节的内容与BH和BL相比较,若取出的字节内容比BH的内容大或比BL的内容小,则修改之。当循环操作结束时,将BH送AH,将BL送AL,作为返回值,同时恢复BX原先的内容。

实验十一 子程序设计

实验十一子程序设计 知识提要: 1、掌握子程序的定义语句; 过程名 PROC [near/far] 过程体 RET 过程名 ENDP 其中过程名的命名方法与变量名相同,同一源程序中不能有相同的过程名.PROC为过程定义开始的伪指令,ENDP为过程定义结束伪指令,且PROC-ENDP必须配对使用。配对的PROC-ENDP 前面的过程名应相同。NEAR/FAR定义了过程的属性,前者表示所定义的过程只能被相同代码段的程序调用,称为段内调用;而后者所表示的过程只能被不同代码段的程序调用,称为段间远调用。 2.子程序结构形式 一个完整的子程序一般应包含下列内容: 1.)子程序的说明部分 在设计了程序时,要建立子程序的文档说明,使用户能清楚此子程序的功能和调用方法.说明时,应含如下内容: .子程序名:命名时要见名中意. .子程序的功能:说明子程序完成的任务; .子程序入口参数:说明子程序运行所需参数及存放位置; .子程序出口参数:说明子程序运行结果的参数及存放位置; .子程序所占用的寄存器和工作单元; .子程序调用示例; 2、)掌握子程序的调用与返回 在汇编语言中,子程序的调用用CALL,返回用RET指令来完成。当发生CALL过程调用时,返回地址入栈;而运行RET指令时,则由栈顶取出返回地址。 CALL指令执行分两步走;第一步,保护返回地址,利用堆栈实现,即将返回的地址压入

堆栈;第二步,转向子程序,即把子程序的首地址送入IP 或CS :IP 。 RET 指令功能是返回主程序,即把子程序的返回地址送入IP 或CS :IP 。 .段内调用与返回:调用子程序指令与子程序同在一个段内。因此只修改IP ; .段间调用与返回:调用子程序与子程序分别在不同的段,因此在返回时,需同时修改CS :IP 。 3.)子程序的现场保护与恢复 保护现场:在子程序设计时,CPU 内部寄存器内容的保护和恢复,在运行主程序时已经占用了一定数量的寄存器,子程序执行时也要使用寄存器。子程序执行完返回主程序后,要保证主程序按原来状态执行,这就需要对那些在主程序和子程序中都要使用的寄存器的内容在子程序体执行之前加以保护,这就是保护现场。 恢复现场:子程序执行完后再恢复这些主程序中寄存器的内容,称为恢复现场。 一般利用堆栈实现现场保护和恢复的格式: 过程名PROC [NEAR/FAR] PUSH AX PUSH BX . . PUSH DX . . . POP DX . . . POP AX RET 过程名 ENDP 4.子程序的参数传递方法 1. 寄存器传递参数

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

合肥工业大学计算机与信息学院 实验报告 课程:汇编语言程序设计专业班级:**************** 学号:********** 姓名:***** 目录

实验一 (3) 实验二 (7) 实验三 (12) 实验四 (22)

实验一Debug程序的使用 一.实验目的 1、熟悉DEBUG程序中的命令,学会在DEBUG下调试运行汇编语言源程序。 2、掌握8086/8088的寻址方式及多字节数据的处理方法。 二.实验内容 1、利用DEBUG程序中的“E”命令,将两个多字节数“003F1AE7H”和“006BE5C4H”分别送入起始地址为DS:0200H和DS:0204H两个单元中。 2、分别用直接寻址方式和寄存器间接寻址方式编写程序段,实现将DS:0200H 单元和DS:0204H单元中的数据相加,并将运算结果存放在DS:0208H单元中。要求: 本次实验的内容均在DEBUG下完成,实现数据的装入、修改、显示;汇编语言程序段的编辑、汇编和反汇编;程序的运行和结果检查。 三.实验过程和程序 实验内容一: e ds:0200 E7 1A 3F 00 e ds:0204 C4 E5 6B 00 实验内容二: (1)直接寻址方式 MOV AX,[0200] MOV BX,[0202] ADD AX,[0204] ADC BX,[0206] MOV [0208],AX MOV [020A],BX (2)寄存器间接寻址方式 MOV SI,0200H MOV DI,0204H MOV BX,0208H MOV AX,[SI] MOV DX,[SI+2] ADD AX,[DI] ADC DX,[DI+2]

相关文档
相关文档 最新文档