手机版

贵州大学微型计算机原理实验报告_Ex04_子程序实验(一)

发布时间:2024-11-08   来源:未知    
字号:

实验课程名称 微型计算机原理实验报告 实验项目名称 子程序实验(一) 专 业 班 级 电子信息科学与技术08级1班 学 生 姓 名 学 号 实 验 成 绩 指导教师签字

理 学 院

实验时间:2010年11月16日

实验四 子程序实验(一)

本实验的目的在于让读者掌握同一模块内的子程序调用的方法。 1.实验目的

(1)掌握主程序与子程序之间的调用关系及其调用方法。 (2)掌握子程序调用过程中近程调用与过程调用的区别。 (3)掌握通过堆栈传送参数的方法。 2.实验内容

(1)将BUP开始的10个单元中的二进制数转换成两位进制数的ASCII码,并在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,在转换过程中,通过子程序DISP实现显示。

(2)编写一个主程序,从键盘接收基于个字符,然后用远调用的方法,调用子程序统计该字符串中字符“b”的个数。子程序的是字符串的首地址TABLE、字符长度N及字符“b”。子程序返回字符“b”的个数。参数传送采用堆栈实现。主程序在子程序返回后,显示字符“b”及其个数(设为一位十六进制数)。 3.实验说明

(1)第一个实验程序用子程序的近程调用实现。由于在调用HEXASC子程序时,子程序双调用了DISP子程序,这叫做子程序的嵌套调用。实验过程中可以从堆栈的内容看到两个子程序的返回地址值。由于是近调用,地址值只包括返回地址的段内偏移量。在每个子程序的所选中,检查CS值是不变的。

(2)第二个程序是利用远调用的方法调用子程序的。在无调用情况下,主程序与子程序自在不同的逻辑代码段中,可在子程序执行中查看CS值,它与主程序中的CS传下是不同的。子程序调用,堆栈中保留了返回地址的段地址及段内偏移量。

(3)第二个程序中,主程序与子程序之间参数的传送是由堆栈实现的。一段是将参数(此处是串首址TABLE,串的长度N及统计的字符“b”)顺序大雨复没床堆栈,在子程序调用后,通过BP指针对堆栈中的参数访问,并将统计的结果通过堆栈返回。有关该方法的原理此处不再介绍。 4.实验准备

(1)预习子程序设计的基本方法,根据实验内容要求,画出主程序及子程序的流程图。 (2)熟悉键盘输入字符串及用堆栈传送参数的程序段编制方法。

5.实验步骤

(1)编辑、汇编两个源程序,生成相应的可执行文件(.EXE)。 (2)有DEBUG的R命令、T命令或G命令和D命令检查远程调用及近程调用时堆栈的变化。特别是通过堆栈传送的参数和子程序取出的参数是返回参数的详细过程。 (3)检查程序执行的结果是否正确。

6.实验报告要求

(1)分析远程调用与近程调用的区别,在用DEBUG有关命令观察时,执行过程有何不同。 (2)说明用堆栈传送参数的过程及具体的方法。

(3)分析实验结果及所南至的问题,并说明解决的方法。 7.参考程序清单

(1)码型转换程序清单:

DATA BUF DATA CODE

SEGMENT

DB 0ABH,0CDH,0DEH,01H,02H,03H DB 3AH,4BH,5CH,6FH ENDS SEGMENT

ASSUME CS:CODE,DS:DATA

AX,DATA DS,AX

CX,10

MOV MOV

START: MOV

LEA BX,BUF

AGAIN: MOV AL,[BX]

CALL INC LOOP MOV INT

HEXASC BX AGAIN AH,4CH 21H

HEXASC PROC NEAR MOV DL,AL ;!此处有错误,程序运行时AL中的数据已被

破坏,可改为[BX]

PUSH MOV SHR POP CALL MOV AND CALL

CX CL,4 DL,CL CX DISP DL,AL

DL,0FH DISP ;显示低位HEX数

;显示高位HEX数

RET

HEXASC ENDP DISP

PROC

CMP

DL,9

NEXT DL,7

DL,30H ;将一位HEX数转为ASCII码 AH,2

21H ;显示

JBE ADD NEXT: ADD

MOV INT RET ENDP ENDS END

DISP CODE

START

2

微型计算机原理实验报告

|

运行结果:

(2)统计并显示某键入字符的个数的程序: DATA

;COUNTER.ASM

SEGMENT

CHAR DB 'b' BUF DB 50H,?,50H DUP(?) ;!“?”号应有一“,” DATA ENDS

MCODE SEGMENT ASSUME CS:MCODE,DS:DATA START: MOV

AX,DATA

DS,AX DX,BUF AH,9 ;!应为10号调用,从键盘接收数据

MOV LEA MOV

INT LEA MOV MOV INC INC MOV MOV PUSH PUSH PUSH CALL MOV MOV INT MOV MOV INT POP MOV MOV INT MOV PUSH MOV SHR CMP JBE ADD

21H SI,BUF

CL,[SI+1] CH,0 ;CX中为字符串长度 SI SI

;SI指向串首址TABLE

AL,CHAR AH,0 ;AX中为待查字符 SI CX AX

;参数送堆栈

CHECK ;!远调用子程序,应为CALL FAR PRT CHECK DL,0DH AH,2 21H

DL,0AH AH,2 21H AX AH,2 21H DL,AL AX CL,4 DL,CL DL,9 NEXT2 DL,7 DL,30H AH,2 21H AX DL,AL DL,0FH DL,9 NEXT DL,7 DL,30H AH,2 21H AH,4CH 21H

;显示统计个数的低位

;统计个数在AL中

DL,CHAR

;显示待检字符

NEXT2: ADD MOV

INT POP MOV AND CMP

JBE ADD NEXT: ADD

4

MOV INT MOV INT

微型计算机原理实验报告

|

MCODE ENDS

SCODE SEGMENT

ASSUME CS:SCODE CHECK PROC FAR

PUSH MOV MOV MOV MOV

BP BP,SP SI,[BP+10] CX,[BP+8] AX,[BP+6] AH,AH AL,[SI]

XOR AGAIN: CMP NEXT1:

CHECK

JNE NEXT1 INC AH INC SI

LOOP AGAIN MOV MOV POP RET 4 ENDP END

AL,AH [BP+10],AX BP

;!代码段应有结束语句“SCODE START

ENDS”

程序执行结果:

6

微型计算机原理实验报告

|

贵州大学微型计算机原理实验报告_Ex04_子程序实验(一).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)