计算机应用实验报告
LG GROUP system office room 【LGA16H-LGYY-LGUA8Q8-LGA162】
实验一乘法运算实验
一、实验目的:
1、了解调试程序DEBUG的常用命令和功能。
2、掌握多字节乘法运算程序的编写方法。
3、学会程序调试方法。
二、实验原理
三、实验内容:
将两个无符号数相乘,将结果数存入规定地址。
四、实验报告内容:
1、实验用源程序:
开机选择“开始”→“运行”→输入“command”→输入“debug”调出debug应用程序。
Debug源程序:
D 2000:0000 ;查看部分内存内容
E 2000:0000 2A 30 15 1B ;写入数据
D 2000:0000 ;查看输入后的数据
A 回车 ;写程序
MOV AX,2000
MOV DS,AX
MOV AX,[0000]
MOV BX,[0002]
MUL BX ;让AX乘以DX,结果存入DX:AX
MOV [0004],AX
MOV [0007],DX
INT 20H ;正常中断程序
Ctrl+M ;退出编程,由键盘输入
G ;运行程序
D 2000:0000 ;查看程序运行结果
2、实验结果分析
输出结果显示为72-61 18-05结果正确。
实验中遇到的问题,在debug里输入程序要细心,如果输入有误为保证结果的正确应重新打开debug程序。实验中发现输入的大小写对程序的结果没有影响。
实验二除法运算实验
一、实验目的:
1、了解调试程序DEBUG的常用命令和功能。
2、掌握多字节除法运算程序的编写方法。
3、学会程序调试方法。
二、实验内容:
将两个无符号数相除,将结果数存入规定地址。
被除数和除数的存放地址及数据如下:
三、实验报告内容:
1、实验用源程序
按照实验一中的方法调出debug:
Debug源程序:
D 2000:0000 ;查看部分内存内容
E 2000:0000 5D 7C 5D 4C 3B 2A ;写入数据
D 2000:0000 ;查看输入后的数据
A ;写程序
MOV AX,2A3B
MOV DX,4C5D
MOV BX,7C5D
MOV AX,[0010]
MOV DX,[0012]
MOV BX,[0014]
DIV BX ;被除数DX:AX除BX,商存入AX,余数存到DX MOV [0016],AX
MOV [0018],DX
INT 20H ;正常中断程序
Ctrl+M ;退出编程,由键盘输入
G ;运行程序
D 2000:0000 ;查看程序运行结果
2、实验结果分析
实验正确结果:7D-FF 9E-11
实验中应注意的问题,在输入数值时应高低位颠倒输入,程序运算时是先进后出。遇到的问题:当输入正序时得到的结果是EE-56 E7-6F
(为错误结果)。
实验三数据转换实验
一、实验目的:
1、进一步掌握DEBUG使用方法。
2、掌握数制转换程序的编写方法。
3、学会调试循环程序和子程序方法。
二、实验内容:
将单元2000:0000~003中的8位十进制数35,26,38,74(数据高位在前,低位在后),转换成二进制数,存入单元2000:0004~0007
中。
在编写程序时,要充分利用循环程序和调用子程序的方法来简化程序设计,并注意循环的地址及子程序入口地址的设置方法。
三、实验报告内容:
1、实验用源程序
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP() ;只有128个字节
STACKS ENDS
DATAS SEGMENT ;数据段
D1 DB 10
; D2 DB
; D3 DB 38H
; D4 DB 74H
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
MOV AX,2000H
MOV DS,AX
MOV AX,2635H
MOV DI,0000H
MOV [DI],AX
MOV DI,0002H
MOV AX,7438H
MOV [DI],AX
MOV BL,10
MOV BX,0010
MOV [BX],AL
DO1 MACRO ADD1,ADD2
MOV SI,CX
MOV DI,0000H
MOV CX,4
NEXT:
MOV AL,[DI]
SHR AL,4
MUL BL
PUSH AX
MOV AL,[DI]
AND AL,0FH
POP DX
XOR AH,AH
XOR DH,DH
ADD AL,DL
MOV SI,[CL+4]
MOV [DI+4],AL
INC DI
LOOP NEXT
ENDM
DO1 0H 4H
DO1 1 5
DO1 2 6
DO1 3 7
MOV AX,4C00H ;退出程序 INT 21H
CODES ENDS
END START
实验四显示字符串实验
一、实验目的:
1、掌握宏汇编语言源程序的编辑方法。
2、学会用MASM及LINK程序将源程序文件转换成可执行文件的方法。
3、学会调用DOS软中断功能来显示字符串的方法。
二、实验步骤:
1、利用全屏幕编辑程序来编辑源程序,文件扩展名为ASM,操作
如下:
A>NE 盘号:文件名.ASM
2、利用MASM程序将源程序文件汇编成目标文件,目标文件扩展
名为OBJ,操作如下:
A>MASM 盘号:文件名.ASM 盘号:文件名.OBJ
在编辑中发生错误,要用NE程序来修改源程序文件。
3、用LINK程序将目标文件转换成可执行文件,可执行文件扩展
名为EXE,操作如下:
A>LINK 盘号:文件名.OBJ 盘号:文件名.EXE
4、在DOS环境下执行可执行文件。
三、实验内容:按照宏汇编语言源程序格式的要求,编写一个文件,显示如
下字符串:
I like microcomputer very much.
四、实验报告内容:
1、实验用源程序
DW 128 DUP() ;只有128个字节
STACKS ENDS
DATAS SEGMENT ;数据段
MSG1 DB 'I like microcomputer very much.','$'
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
2、实验结果分析
实验显示出了“I like microcomputer very much.”
实验五显示字符串实验
一、实验目的:
1、进一步掌握字符串的显示方法。
2、掌握键盘信号的输入和分析方法。
3、进一步熟悉源程序的编写方法。
二、实验内容:
先使计算机提问下列问题:
Do you like this lesson(Y/N)
如果用户回答N,计算机回答:
You should change your interest.
如果用户回答Y,计算机回答:
You are good student.
三、实验报告:
1、实验用源程序:
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP() ;注意这里只有128个字节
STACKS ENDS
DATAS SEGMENT ;数据段
MSG1 DB 'Do you like this lesson(Y/N)','$'
MSG2 DB 10,'You should change your interest.','$'
MSG3 DB 10,'You are good student.','$'
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
INT 21H
CMP AL,'Y'
JZ Y1
CMP AL,'y'
JZ Y1
CMP AL,'N'
JZ Y2
CMP AL,'n'
JZ Y2
Y1: MOV DX,OFFSET MSG3
MOV AH,9
INT 21H
JMP DONE
Y2: MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
DONE:
MOV AX,4C00H ;退出程序 INT 21H
CODES ENDS
END START
实验六数据排序实验
一、实验目的:
1、掌握比较数据大小的方法。
2、掌握由大到小排列数据的方法。
3、掌握显示某一数据区的方法。
二、实验内容:
先在数据区输入十个随机排列的数据,然后用气泡排序法把数据由大到小排列好,并显示在屏幕上。
然后改变数据的内容,再用同样的程序来排列,并显示出结果。
第一次排列的数据为:
41H,70H,03H,53H,88H,16H,20H,3FH,74H,8EH
第二次排列的数据为:
10H,78H,23H,04H,1AH,7AH,35H,4BH,9FH,0BH
显示结果:班级,学号,名字
排序好的数据。
三、实验报告内容:
1、实验用源程序
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP()
STACKS ENDS
DATAS SEGMENT ;数据段
MSG1 DB 'Do you like this lesson(Y/N)','$'
MSG2 DB 10,'You should change your interest.','$'
MSG3 DB 10,'You are good student.','$'
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS,SS:STACKS
MOV DS,AX
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
MOV AH,1
INT 21H
CMP AL,'Y'
JZ Y1
CMP AL,'y'
JZ Y1
CMP AL,'N'
JZ Y2
CMP AL,'n'
JZ Y2
Y1: MOV DX,OFFSET MSG3
MOV AH,9
INT 21H
JMP DONE
Y2: MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
DONE:
MOV AX,4C00H ;退出程序 INT 21H
CODES ENDS
END START
实验七显示字符串实验
一、实验目的:
1、掌握显示菜单的方法。
2、学会分析键盘输入数据的方法。
3、掌握编写宏指令和宏调用的方法。
二、实验步骤:
先在屏幕上显示下列菜单
What item do you want to know?
1.My name
2.My age
3.My interesting work
4.My family
Please input the number:
然后根据输入的数据,分别回答你的姓名,年龄,感兴趣的工作和家庭成员,具体回答内容由同学自己拟定。
在程序中尽量采用宏指令,并注意程序设计的技巧。
三、实验报告内容:
1、实验用源程序
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP()
STACKS ENDS
DATAS SEGMENT ;数据段
M01 DB 'What item do you want to know','$'
M02 DB 10,28 DUP(8),' 1. My name ','$'
M03 DB 10,28 DUP(8),' 2. My age ','$'
M04 DB 10,28 DUP(8),' 3. My interesting work ','$'
M06 DB 10,28 DUP(8),'Please input the number: ','$' M07 DB 10,28 DUP(8),' Li Juan ','$'
M08 DB 10,28 DUP(8),' 22 ','$'
M09 DB 10,28 DUP(8),' play balls. ','$' M10 DB 10,28 DUP(8),' My parents and me. ','$'
DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS ;初始化
MOV DS,AX
PRT MACRO X
MOV DX,OFFSET X
MOV AH,9
INT 21H
ENDM
IPT MACRO
MOV AH,1
INT 21H
ENDM
IFGO MACRO X,Y
CMP AL,X
JZ Y
ENDM
PRT M01
PRT M02
PRT M03
PRT M04
PRT M05
PRT M06
IPT
IFGO '1',Y1
IFGO '2',Y2
IFGO '3',Y3
IFGO '4',Y4
Y1: PRT M07
JMP DONE
Y2: PRT M08
JMP DONE
Y3: PRT M09
JMP DONE
Y4: PRT M10
DONE:
MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
实验八时钟显示实验
一、实验目的:
1、了解计算机中时钟数据的存取方法。
2、掌握时钟显示的编写方法。
3、进一步掌握BIOS和DOS中子程序的调用方法。
二、实验内容:
在计算机屏幕的右上角显示时钟值,直到按下一个键再返回DOS。
三、实验报告内容:
1、实验用源程序:
DATA SEGMENT
WHOUR DB 0 ;秒表的时、分、秒、毫秒
WMIN DB 0
WSEC DB 0
WMSEC DB 0
OLD1CH DD 0
SIGNAL DB 0
COUNT DW 0
;---------------------------------------------------------------------------------------------------------------
CHOUR DB 0 ;闹钟的时、分、秒
CMIN DB 0
CSEC DB 0
;-----------------------------------------------------------------------------------------------------------------
SPACE DB 2000 DUP (' ')
PATTERN DB 6 DUP (' '),0C9H,26 DUP (0CDH),0BBH,6 DUP (' ')
DB 6 DUP (' '),0BAH,26 DUP (20H),0BAH,6 DUP (' ')
DB 6 DUP (' '),0C8H,26 DUP (0CDH),0BCH,6 DUP (' ')
;----------------------------------------------------------------------------------------------------------------
DBUFFER DB 8 DUP (':'),12 DUP (' ')
DBUFFER1 DB 20 DUP (' ')
DBUFFER2 DB 11 DUP (':'),15 DUP (' ')
STR1 DB 0DH,0AH, ' INPUT ''M'' TO NEXT-STATE, INPUT ''Q'' TO EXIT: $',0DH,0AH,'$'
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKS
;------------------------------------------------------------------- PUSHA1 MACRO
PUSH DS
PUSH AX
PUSH BX
PUSH CX
PUSH DX
ENDM
POPA1 MACRO
POP DX
POP CX
POP BX
POP AX
POP DS
ENDM
;图形化界面设计
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,0003H ;设置显示方式为40*25彩色文本方式 INT 10H
LEA DX,STR1 ;显示提示信息
MOV AH,9
INT 21H
MOV BP,OFFSET SPACE
MOV DX,0B00H
MOV CX,1000
MOV BX,0000H
MOV AX,1300H
INT 10H ;显示字符串,定义显示方式
;---------------------------------------------------------------
;主程序
LP1:
MOV AH,1 ;从键盘输入单个字符
INT 21H
CMP AL,'M' ;AL='M'
JNE LP5
CALL DATE ;显示系统日期
LP2: MOV AH,1 ;从键盘输入单个字符
INT 21H
CMP AL,'M' ;AL='M'
JNE LP5
LP3: MOV AH,1 ;从键盘输入单个字符
INT 21H
CMP AL,'M' ;AL='M'
JNE LP4
CALL STOPWATCH ;显示秒表
LP4: MOV AH,1 ;从键盘输入单个字符
INT 21H
CMP AL,'M' ;AL='M'
JNE LP5
CALL RING
LP5: CMP AL,'Q' ;AL='Q'
JNE LP1
MOV AH,4CH ;返回DOS状态
INT 21H
;---------------------------------------------------------------;显示日期子程序
DATE PROC NEAR
DISPLAY9:
MOV AH,2AH ;取日期CX:DH:DL=年:月:日 AL=星期 INT 21H
MOV SI,0
MOV AX,CX
MOV BX,100
DIV BL
MOV BL,AH
CALL BCDASC1 ;日期数值转换成相应的ASCII码字符 MOV AL,BL
CALL BCDASC1
INC SI
MOV AL,DH
CALL BCDASC1
INC SI
MOV AL,DL
CALL BCDASC1
MOV BP,OFFSET DBUFFER1
MOV DX,001DH
;;;;;;;;;; L;;;;;;;;;;;;;
MOV CX,20
MOV BX,004EH
MOV AX,1301H
INT 10H
MOV AH,02H ;设置光标位置
;;;;;;;;222
MOV DX,0900H
INT 10H
MOV BX,0018H
REPEA: MOV CX,0FFFFH ;延时
REPEAT: LOOP REPEAT
DEC BX
JNZ REPEA
MOV AH,01H ;读键盘缓冲区字符到AL寄存器 INT 16H
JE DISPLAY1
JMP LP2
MOV AX,4C00H
INT 21H
RET
DATE ENDP
;------------------------------------------------------
;显示时间子程序
TIME PROC NEAR
DISPLAY1:
MOV SI,0
MOV BX,100
DIV BL
MOV AH,2CH ;取时间CH:CL=时:分 DH:DL=秒:1/100秒 INT 21H
MOV AL,CH
CALL BCDASC ;将时间数值转换成ASCII码字符
INC SI
MOV AL,CL
CALL BCDASC
INC SI
MOV AL,DH
CALL BCDASC
MOV BP,OFFSET DBUFFER
MOV DX,003AH
MOV CX,20
MOV BX,004EH
MOV AX,1301H
INT 10H
MOV AH,02H
MOV DX,0310H
MOV BH,0
INT 10H
MOV BX,0018H
RE: MOV CX,0FFFFH
REA: LOOP REA
DEC BX
JE DISPLAY1
JMP LP3
MOV AX,4C00H
INT 21H
RET
TIME ENDP
;------------------------------------------------------
;显示秒表子程序
STOPWATCH PROC NEAR
DISPLAY2:
PUSHA1
MOV SI,0
MOV BX,100
DIV BL
;CALL WATCH
DISP3:
MOV AX,DATA
MOV DS,AX
MOV AL,WHOUR
CALL BCDASC2 ;将时间数值转换成ASCII码字符 INC SI
MOV AL,WMIN
CALL BCDASC2
INC SI
MOV AL,WSEC
CALL BCDASC2
MOV AL,WMSEC
INC SI
CALL BCDASC2
MOV BP,OFFSET DBUFFER2
MOV DX,0037H
MOV CX,20
MOV BX,004EH
MOV AX,1301H
INT 10H
MOV AH,02H
MOV DX,0300H
MOV BH,0
INT 10H
MOV BX,0018H
RE2: MOV CX,0FFFFH
REA2: LOOP REA2
DEC BX