Skip Navigation Links.
Collapse 电工与电子技术 代码阅读实践
Collapse 电工与电子技术 计算机文化基础
Collapse 电工与电子技术 Visual Foxpro数据库应用技术
Expand 实验室简介 实验课程简介
Expand 实验室简介 实验室简介
Expand 实验室简介 实验大纲
Expand 实验室简介 实验内容
Expand 实验室简介 实验课件
Expand 实验室简介 实验视频
Expand 实验室简介 常见问题及解答
Expand 实验室简介 在线测试
Expand 实验室简介 等级考试题集
Expand 实验室简介 相关知识点
Expand 实验室简介 学习推荐
Collapse 电工与电子技术 数字图像处理
Collapse 电工与电子技术 数据结构和VC编程
Collapse 电工与电子技术 数据库
Collapse 电工与电子技术 多媒体技术应用
Collapse 电工与电子技术 汇编语言程序设计
Collapse 电工与电子技术 VB程序设计
Expand 实验室简介 课程简介
Expand 实验室简介 实验室简介
Expand 实验室简介 理论教学
Expand 实验室简介 实验教学
Expand 实验室简介 创新型实验
Expand 实验室简介 教学视频
Expand 实验室简介 课程习题
Expand 实验室简介 在线测试
Expand 实验室简介 VB等级考试
Expand 实验室简介 软件下载
Expand 实验室简介 2012年秋“VB程序设计”考试题目
Collapse 电工与电子技术 计算机维护维修
首页 >   主页 > 课程 > 计算机类 > 汇编语言程序设计 > 实验内容 > 综合实验(6-15)
综合实验(6-15) 
 

 
实验6 顺序程序设计及跟踪调试实验
实验名称顺序程序设计及跟踪调试实验
【实验目的】
学习顺序程序的设计方法,掌握汇编程序的编辑、编译、连接、运行调试过程。
【实验内容】
编写程序,计算Z=((W-X)/10*Y)的平方值,R为相除所得余数,其中W,X,Y均为八位有符号二进制数。
参考程序清单:
DATA SEGMENT
W  DB -128
X  DB 127
Y  DB -100
R  DB 0
Z  DD 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX,DATA
MOV DS,AX
MOV AL,X
CBW
MOV BX,AX
MOV AL,W
CBW
SUB AX,BX
MOV BL,10
IDIV BL
MOV R,AH
IMUL Y
IMUL AX
MOV WORD PTR Z,AX
MOV WORD PTR Z+2,DX
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
【实验要求】
(1)编写符合实验内容要求的表达式计算程序,
(2)写出调试以上程序的过程,即输入不同参数值,读出Z的执行结果。
(3)熟练使用源程序汇编、连接命令的使用方法。
【实验步骤】
(1)利用UltraEdit等其它编辑软件,编写LX6.ASM源程序。
(2)对其进行编译、连接,产生.EXE文件。
(3)学习使用MASM软件包中CodeView工具的使用方法。
【实验报告】
(1)画出程序流程图,独立编写程序,列出程序清单。
(2)说明本实验是如何利用MASM软件包进行调试的。
(3)说明乘除中字节运算和字运算的存储单元扩展情况。
实验7 分支程序设计及跟踪调试实验
实验名称】分支程序设计及跟踪调试实验
【实验目的】
学习分支程序的设计方法,掌握汇编程序的编辑、编译、连接、运行调试过程,以及MASM软件包中CodeView工具的使用。
【实验内容】
编写程序,从键盘上输入0到9中任一自然数,求其立方值,若输入数据不是0-9,则显示“INPUT ERROR!”。
参考程序清单:
DATA SEGMENT
INPUT DB “PLEASE INPUT X(0...9):$”
TAB DW 0,1,8,27,64,125,216,343,512,729
X DB ?
Y DW ?
INERR DB 0DH,0AH,“INPUT ERROR!$“
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN: MOV AX, DATA
MOV DS, AX
MOV DX, OFFSET INPUT
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
CMP AL, '0'
JB LERR
CMP AL, '9'
LA  LERR
AND AL, 0FH
MOV X, AL
ADD AL, AL
MOV BL, AL
MOV BH, 0
MOV AX, TAB[BX]
MOV Y, AX
EXIT: MOV AH, 4CH
INT 21H
LERR: MOV DX,OFFSET INERR
MOV AH,9
INT 21H
JMP EXIT
CODE  ENDS
END BEGIN
【实验要求】
(1)编写符合实验内容要求的自然数立方值计算程序,
(2)写出调试以上程序的过程,即输入数值,输出程序执行结果的过程。
(3)熟练使用源程序汇编MASM、连接命令LINK的使用方法。
【实验步骤】
(1)利用UltraEdit等其它编辑软件,编写LX6.ASM源程序。
(2)对其进行编译、连接,产生.EXE文件。
(3)学习使用MASM软件包中CodeView工具的使用方法。
【实验报告】
(1)画出程序流程图,独立编写程序,列出程序清单。
(2)说明本实验中求解自然数立方值的算法设计思想。
实验8 循环程序设计及跟踪调试实验
实验名称循环程序设计及跟踪调试实验
【实验目的】
学习循环程序的设计方法,掌握汇编程序的编辑、编译、连接、运行调试过程,理解针对不同的问题,选用不同循环结构的方法。
【实验内容】
编写程序,已知BUF中存放N个数据,编程实现将大于等于0的数放入BUF1中,小于0的数放入BUF2中。
参考程序清单:
DATA SEGMENT
BUF DW -2,5,-3,6,100,0,-20,-9,8,-110,20,0
N=($-BUF)/2
BUF1 DW N DUP(?)
BUF2 DW N DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN:MOV AX, DATA
MOV DS, AX
LEA BX, BUF
LEA SI, BUF1
LEA DI, BUF2
MOV CX, N
LOPA: MOV AX, [BX]
CMP AX, 0
JGE L1
MOV [DI], AX
ADD DI, 2
JMP NEXT
L1:  MOV [SI], AX
ADD SI, 2
NEXT: ADD BX, 2
DEC CX
JNE LOPA
MOV AH,4CH
INT 21H
CODE  ENDS
END BEGIN
【实验要求】
(1)编写符合实验内容要求的数据分类算程序,
(2)写出调试程序中编译MASM、连接命令LINK的使用方法。
(3)学会应用不同循环结构解决不同实际问题的方法。
【实验步骤】
(1)编辑、编译、连接源程序,产生可执行文件.EXE。
(2)使用MASM软件包中CodeView工具单步运行该程序,并验证结果的可靠性。
【实验报告】
(1)列出程序清单,画出程序流程图,编写程序代码。
(2)总结循环程序的循环结构和循环设计的方法。
(3)如果把数据中为“0”的数据也分类出来,程序应作哪些修改。
实验9 子程序设计及跟踪调试实验
实验名称子程序设计及跟踪调试实验
【实验目的】
学习子程序结构的设计方法,理解模块间主程序与子程序之间的调用关系,掌握多模块程序设计方法,学会使用PUBLIC和EXTRN伪指令解决模块间的符号通信问题。
【实验内容】
编写子程序,已知有两组N个元素的数据,分别存放在以BUF1和BUF2为首址的字节存储区中,要求用冒泡排序法将它们从小到大的排序。
参考程序清单:
;主程序MAIN.ASM
EXTRN SORT:FAR
DATA SEGMENT
BUF1 DB 30H,10H,40H,20H,50H,70H,60H,90,80H,0,0FFH
N1=$-BUF1
BUF2 DB 22H,11H,33H,55H,44H,77H,66H,99H,88H,0AAH,0EEH,0
N2=$-BUF2
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DATA,SS:STACK
BEGIN:MOV AX,DATA
MOV DS,AX
LEA BX,BUF1
MOV CX,N1
CALL SORT
LEA BX,BUF2
MOV CX,N2
CALL SORT
EXIT:
;MOV AH,4CH
;INT 21H
RET
MAIN ENDP
CODE ENDS
END BEGIN
;子程序SORT.ASM
PUBLIC SORT
CODE SEGMENT
SORT PROC FAR
PUSH AX
PUSH DX
PUSH SI
PUSH DI
MOV DX,CX
DEC DX
MOV SI,1
LOPI:MOV DI,SI
INC DI
MOV AL,[BX+SI-1]
LOPJ:CMP AL,[BX+DI-1]
JBE NEXT
XCHG [BX+DI-1],AL
MOV [BX+SI-1],AL
NEXT:INC DI
CMP DI,CX
JBE LOPJ
INC SI
CMP SI,DX
JBE LOPI
POP DI
POP SI
POP DX
POP AX
RET
SORT ENDP
CODE ENDS
END
【实验要求】
(1)仔细阅读教材中有关模块化程序设计的方法以及模块间通信的方法。
(2)弄清伪指令PUBLIC和EXTRN的功能及用法。
(3)掌握主程序和子程序之间的参数传递方法。
【实验步骤】
(1)分别对主程序MAIN.ASM和子程序SORT.ASM 模块进行汇编,在连接时,将它们装配成一个以.EXE为扩展名的可执行文件。
(2)应用MASM软件包中CodeView工具对.EXE文件进行调试及运行。
【实验报告】
(1)对源程序清单,画出相应的程序流程图。
(2)总结多模块程序设计的特点和编程方法。
(3)分析实验结果及所遇到的问题,并说明解决的方法。
实验10 宏定义程序设计及跟踪调试实验
实验名称宏定义程序设计及跟踪调试实验
【实验目的】
    学习宏定义、宏调用、宏展开的编程技术,理解宏指令和子程序的根本区别, 掌握宏库的创建及调用流程,以及INCLUDE伪指令的使用格式。
【实验内容】
创建宏库,编写宏程序,首先把清屏和在屏幕上显示单个字符的功能模块定义成宏,并创建宏库文件MY.LIB,然后调用宏库MY.LIB中宏指令,实现屏幕显示10个“1”功能。
参考程序清单:
;宏库MY.LIB中的宏PRINT
PRINT MACRO A,B
MOV    AH,0AH
MOV    AL,A
MOV    CX,B
MOV    BH,O
MOV    BL,OFH
INT    10H
ENDM
;宏库MY.LIB中的宏CLS
CLS    MACRO
MOV    AX,060OH
MOV    CX,0
MOV    DX,1849H
MOV    BH,7
INT    10H
ENDM
INCLUDE MY.LIB
CODE    SEGMENT
ASSUME CS: CODE
START: CLS
PRINT    31H, 10
MOV    AX, 4C00H
INT    21H
CODE    ENDS
END    START
【实验要求】
(1)仔细阅读教材中有关宏汇编程序设计的方法内容。
(2)弄清宏库创建和INCLUDE伪指令使用方法。
(3)掌握 宏定义、宏调用、宏展开的编程技术
【实验步骤】
(1)   分别定义宏体CLS和PRINT,创建宏库MY.LIB。
(2)   创建列表文件(.LST),查看宏展开代码。
(3)   应用MASM软件包中CodeView工具对.EXE文件进行调试及运行。
【实验报告】
(1)对源程序清单,画出相应的程序流程图。
(2)总结宏汇编程序设计的特点和编程方法。
(3)分析实验结果及所遇到的问题,并说明解决的方法。
实验11 汇编语言与C语言混合编程实验
实验名称】汇编语言与C语言混合编程实验
【实验目的】
学习汇编语言与C语言的混合编程技术,进而理解C++与汇编的混合编程,以及Win32下汇编语言的可视化编程方法。
【实验内容】
汇编主程序调用C子函数程序,根据x、y、z的输入值,计算x2、y2、z2的值,根据 x2+y2值与 z2值的比较结果,实现“0”与“1”标识符的输出。
参考程序清单:
1.汇编主程序模块代码,文件名E624_1.ASM
.386
.MODEL FLAT
INPUT PROTO C PX:PTR SDWORD,PY:PTR SDWORD,PZ:PTR SDWORD
VERIFY PROTO C X:DWORD,Y:DWORD,Z:DWORD
OUTPUT PROTO C X:DWORD,Y:DWORD,Z:DWORD,RESULT:DWORD
.DATA
X DWORD ?
Y DWORD ?
Z DWORD ?
RESULT DWORD ?
.CODE
MAIN PROC C
INVOKE INPUT,OFFSET X,OFFSET Y,OFFSET Z
INVOKE VERIFY,X,Y,Z
MOV RESULT,EAX
INVOKE OUTPUT,X,Y,Z,RESULT
RET
MAIN ENDP
END
2.C子程序模块代码,文件名E624_2.C
#include "stdio.h"
extern void input(int *px,int *py,int *pz);
extern int verify(int x,int y,int z);
extern void output(int x,int y,int z,int result);
void input(int *px,int *py,int *pz)
{
printf("input x,y,z:");
scanf("%d,%d,%d",px,py,pz);
printf("x=%d,y=%d,z=%d\n",*px,*py,*pz);
}
int verify(int x,int y,int z)
{
if(x*x+y*y==z*z)
return 1;
else
return 0;
}
void output(int x,int y,int z,int result)
{
printf("verify(%d,%d,%d)=%d\n",x,y,z,result);
}
【实验要求】
(1)仔细阅读教材中有关汇编语言与高级语言混合编程内容。
(2)弄清汇编语言与高级语言混合编程的实质。
(3)掌握Win32下汇编语言调用系统库函数的方法。
【实验步骤】
(1)   分别定义汇编主程序E624_1.ASM,C子程序E624_2.C。
(2)   汇编语言与C语言混合编程的编译链接过程。
(3)   应用MASM软件包中CodeView工具对.EXE文件进行调试及运行。
【实验报告】
(1)对源程序清单,画出相应的程序流程图。
(2)总结汇编语言与高级语言混合编程的方法和特点。
(3)分析实验结果,查找主程序和子程序所对应的二进制代码。
实验12 多模块程序的运行及子程序库设计实验
实验名称】多模块程序的运行及子程序库设计实验
【实验目的】
学习多模块的链接技术,理解模块化程序设计思想,掌握子程序库的创建方法。
【实验内容】
根据模块化程序设计思想,编程实现屏幕动画程序设计。
参考程序清单:
data segment
Car db 7
db 52h,70h,0,0
db 0b2h,70h,0,1
db 0dbh,7,0,1
db 0dbh,7,0,1
db 4fh,7,1,0
db 4fh,7,0,-3
db 2,7,-2,1
char_cnt dw ?
pointer dw ?
line_on db ?
col_on   db ?
data ends
code segment
assume cs:code,ds:data
main proc far
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
call clear_screen
lea di,car
mov dh,10
mov dl,10
call move_shape
ret
main endp
clear_screen proc near
push ax
push bx
push cx
push dx
mov ah,6
mov al,0
mov ch,0
mov cl,0
mov dh,24
mov dl,79
mov bh,7
int 10h
pop dx
pop cx
pop bx
pop ax
ret
clear_screen endp
move_shape proc near
push ax
push bx
push cx
push dx
push di
mov ah,0fh
int 10h
sub ch,ch
mov cl,[di]
inc di
mov char_cnt,cx
mov pointer,di
mov line_on,dh
mov col_on,dl
plot_next:
add dh,[di+2]
add dl,[di+3]
cmp dl,80
jb mov_crsr
call erase
pop di
pop dx
pop cx
pop bx
pop ax
ret
mov_crsr:
mov ah,2
int 10h
mov al,[di]
mov bl,[di+1]
push cx
mov cx,1
mov ah,9
int 10h
pop cx
add di,4
loop plot_next
call dly_qrtr
call erase
jmp short plot_next
move_shape endp
erase proc near
mov cx,char_cnt
mov di,pointer
mov dh,line_on
mov dl,col_on
erase_next:
add dh,[di+2]
add dl,[di+3]
mov ah,2
int 10h
mov al,[di]
mov bl,0
push cx
mov cx,1
mov ah,9
int 10h
pop cx
add di,4
loop erase_next
mov cx,char_cnt
mov di,pointer
mov dh,line_on
inc col_on
ret
erase endp
dly_qrtr proc near
push cx
push dx
mov dx,0ffh
dl1:mov cx,0ffffh
dl2:loop dl2
dec dx
jnz dl1
pop dx
pop cx
ret
dly_qrtr endp
code ends
end main
【实验要求】
(1)理解弄清模块化编程思想的本质。
(2)掌握子程序库的创建、调用原理方法。
【实验步骤】
(1)   对实验例程进行编译、链接后创建EXE文件。
(2)   把例程中的子程序改写为独立代码段的子程序,并且创建子程序库。
(3)   应用MASM软件包中CodeView工具对.EXE文件进行调试、运行,以及子程序库中子程序代码的定位。
【实验报告】
(1)对源程序清单,画出相应的程序流程图。
(2)总结子程序库的创建方法和过程。
(3)分析实验结果,查找主程序调用子程序的入口地址。
实验13 I/O接口中端口号存储单元内容的读写实验
【实验名称】I/O接口中端口号存储单元内容的读写实验
【实验目的】
学习接口、端口、端口地址的概念,掌握I/O端口的寻址方式,熟练使用I/O指令实现对外设端口地址的读写编程。
【实验内容】
CMOS数据的读取,读取显示系统时间程序。参考程序清单:
cursor equ     45H
attrib equ     2fh
code    segment
assume cs:code,ds:code
start:
jmp     go
oldcur dw      ?
OLD1C   DW      2 DUP(?)
NEWINT1C:
PUSHF
CALL DWORD PTR CS:OLD1C
push    ax
PUSH    BX
PUSH    CX
PUSH    DX
XOR     BH,BH
MOV     AH,3
INT     10H
MOV     CS:OLDCUR,DX
MOV     AH,2
XOR     BH,BH
MOV     DX,CURSOR
INT     10H
MOV     AH,2
INT     1AH
PUSH    DX
PUSH    CX
POP     BX
PUSH    BX
CALL    SHOWBYTE
CALL    SHOWCOLON
POP     BX
XCHG    BH,BL
CALL    SHOWBYTE
CALL    SHOWCOLON
POP     BX
CALL    SHOWBYTE
MOV     DX,CS:OLDCUR
MOV     AH,2
XOR     BH,BH
INT     10H
POP     DX
POP     CX
POP     BX
POP     AX
IRET
SHOWBYTE PROC NEAR
PUSH    BX
MOV     CL,4
MOV     AL,BH
SHR     AL,CL
ADD     AL,30H
CALL    SHOW
CALL    CURMOVE
POP     BX
MOV     AL,BH
AND     AL,0FH
ADD     AL,30H
CALL    SHOW
CALL    CURMOVE
RET
SHOWBYTE ENDP
SHOWCOLON PROC NEAR
MOV     AL,':'
CALL    SHOW
CALL    CURMOVE
RET
SHOWCOLON ENDP
CURMOVE PROC NEAR
PUSH    AX
PUSH    BX
PUSH    CX
PUSH    DX
MOV     AH,3
MOV     BH,0
INT     10H
INC     DL
MOV     AH,2
INT     10H
POP     DX
POP     CX
POP     BX
POP     AX
RET
CURMOVE ENDP
SHOW    PROC NEAR
PUSH    AX
PUSH    BX
PUSH    CX
MOV     AH,09H
MOV     BX,attrib
MOV     CX,1
INT     10H
POP     CX
POP     BX
POP     AX
RET
SHOW    ENDP
GO:     PUSH    CS
POP     DS
MOV     AX,351CH
INT     21H
MOV     OLD1C,BX  
MOV     BX,ES
MOV     OLD1C+2,BX
MOV     DX,OFFSET NEWINT1C
MOV     AX,251CH
INT     21H
MOV     DX,OFFSET GO
SUB     DX,OFFSET START
MOV     CL,4
SHR     DX,CL
ADD     DX,11H
MOV     AX,3100H 
INT     21H
CODE ENDS
END START
【实验要求】
(1)理解CMOS数据的存储地址端口号。
(2)写出CMOS数据存储格式。
(3)熟练使用I/O指令进行端口编程。
【实验步骤】
(1)编辑、编译、连接源程序,产生可执行文件.EXE。
(2)读出CMOS数据,列表微机的配置信息。
【实验报告】
(1)列出程序清单,画出程序流程图,编写程序代码。
(2)总结IN、OUT指令的用法。
(3)如果把CMOS数据中的内存容量参数读出来,程序应作哪些修改。
实验14 常用系统中断调用实验
【实验名称】 常用系统中断调用实验
【实验目的】
学习DOS和BIOS中断服务程序的功能、参数设置、调用方法,理解子程序调用CALL和返回指令RET的使用方法,掌握使用中断服务程序设置屏幕显示方式。
【实验内容】
通过 调用BIOS 中断,编程实现图形方式下的 1 0 ×16行列 方格的程序, 参考程序清单如下:
CODE   SEGMENT
     ASSUME CS:CODE
MAIN   PROC FAR
START: PUSH DS
     SUB   AX, AX
     PUSH AX
     MOV   AH, 0
     MOV   AL, 4
     INT   10H
     CALL HORI
     MOV   AH, 0
     INT   16H
     MOV   AH, 0
     MOV   AL, 4
     INT   10H
     CALL VERT
     MOV   AH, 0
     INT   16H
     MOV   AH, 0
     MOV   AL, 4
     INT   10H
     CALL HORI
     CALL VERT
     MOV   AH, 0
     INT   16H
     MOV   AH, 0
     MOV   AL, 3
     INT   10H
     RET    
MAIN ENDP
HORI PROC NEAR    
     MOV   DX, 0
HLINE:
     MOV   CX, 0
HDOT:
     MOV   AL, 1
     MOV   AH, 0CH
     INT   10H
     INC   CX
     CMP   CX, 300
     JL    HDOT
     ADD   DX, 20
     CMP   DX, 200
     JL    HLINE
     RET
HORI ENDP
VERT PROC NEAR      
     MOV   CX, 0
VLINE:
     MOV   DX, 0
VDOT:
     MOV   AL, 2
     MOV   AH, 0CH
     INT   10H
     INC   DX
     CMP   DX, 180
    JL    VDOT
     ADD   CX, 20
     CMP   CX, 320
     JL    VLINE
     RET      
VERT ENDP
CODE ENDS
     END START
【实验要求】
(1)能够计算BIOS中INT 10H号中断服务程序的向量地址。
(2)查找定位终端服务程序代码。
3 )熟练使用 BIOS 中断服务程序进行程序设计。
【实验步骤】
1 )编辑、编译、连接源程序,产生可执行文件 .EXE
2 )跟踪定位 BIOS INT 10H 中断服务程序代码。
【实验报告】
1 )列出程序清单,画出程序流程图,编写程序代码。
2 )总结 BIOS 中断功能调用的方法。
3 )如果改变屏幕显示方式,程序应如何修改。
实验15 DOS中断服务程序设计、调用实验
【实验名称】 DOS 中断服务程序设计、调用实验
【实验目的】
学习常驻内存程序的编写,理解中断向量的重新定向技术,掌握 DOS 中断服务程序的设计方法。
【实验内容】
编写一个时钟程序,要求把时钟信号显示在屏幕的右上角,并在程序结束后常驻内存。参考程序清单如下:
CODE    SEGMENT
       ASSUME CS:CODE,DS:CODE
CLOCK   PROC     FAR
       DEC      CS:X      
       JZ       C2        
       JMP      CEND      
C2:     PUSH      DS
       PUSH      ES
       PUSH      AX
       PUSH      BX
       PUSH      CX
       PUSH      DX
       PUSH      SI
       PUSH      DI      
       PUSH      CS
       POP       DS
MOV     X, 20      
INC     S          
CMP     S, 60
JB      C1        
MOV     S, 0      
INC     M          
CMP     M, 60
JB      C1          
MOV     M, 0      
INC     H          
CMP     H, 24
JB      C1        
MOV     H, 0      
C1:     MOV   AL, S
   MOV  AH, 0
   MOV DL, 10
   DIV DL
   OR   AX, 3030H
MOV WORD PTR [T+6], AX
MOV    AL, M
MOV    AH, 0
DIV    DL
OR     AX, 3030H
MOV WORD PTR [T+3], AX
MOV    AL, H
MOV    AH, 0
DIV    DL
OR     AX, 3030H
MOV WORD PTR [T], AX  
MOV    CX, 8
CLD
MOV AX, 0B800H
MOV ES, AX            
MOV AH, 1FH          
LEA SI, [T]
MOV DI, 71*2
C3: LODSB
   STOSW
LOOP   C3              
POP    DI
POP       SI
POP       DX
POP       CX
POP       BX
POP       AX
POP       ES
POP       DS
CEND:    IRET
T        DB        "00:00:00"
H        DB        0          
M        DB        0          
S        DB        0        
X        DB        20        
CLOCK   ENDP
MAIN:   MOV AX, CODE
      MOV DS, AX
      MOV AH, 2CH
      INT 21H        
      MOV H, CH      
      MOV M, CL      
      MOV S, DH      
LEA DX, CLOCK
MOV AX, 251CH
INT 21H        
MOV AX, 3100H
LEA DX, MAIN
MOV CL, 4
SHR DX, CL
ADD DX, 11H    
INT 21H        
RET
CODE   ENDS
      END MAIN
【实验要求】
(1)学习常驻内存程序的编写,以及操作系统对程序的分段管理方法。
(2)理解中断向量、中断服务程序、子程序入口地址之间的关系。
3 )掌握通过中断向量调用自定义子程序的实现过程。
【实验步骤】
1 )编辑、编译、连接源程序,产生可执行文件 .EXE
2 )编写自定义子程序,实现通过中断向量调用自定义子程序。
【实验报告】
1 )列出程序清单,画出程序流程图,编写程序代码。
2 )总结常驻内存程序和修改中断向量程序的编写方法。
3 )如果更改 1CH 号中断向量为其它常用中断向量,在保证不破坏其它常用中断向量功能的前提下, 程序应如何修改。