九九乘法表程序doc.docx
《九九乘法表程序doc.docx》由会员分享,可在线阅读,更多相关《九九乘法表程序doc.docx(13页珍藏版)》请在冰豆网上搜索。
九九乘法表程序doc
九九乘法表程序
九九乘法表
一、课程设计目的
本课程设计是继《微机系统及应用》课程之后的一次综合性设计、实验训练。
根据微机系统及应用课程教学的重点和主要知识点及工程实际需要,设置汇编语言程序设计、PC机内部接口和8086系统接口电路设计等设计题目。
要求学生综合本课程和其它相关课程中学到的80X86系统结构、汇编语言设计、典型接口芯片、电路电子技术等相关知识进行程序设计、硬件接口电路设计和调试,系统地掌握微机原理和接口技术的相关知识,实现知识的融会贯通。
要求学生通过1.5周的学习,提高设计汇编语言程序的能力和技巧,培养实现一个简单应用系统功能的硬件软件设计能力。
二、课程设计内容
汇编语言程序设计及调试
用汇编语言编写九九乘法表在屏幕上显示出来,而且能按一定规律显示.1键为横向排列;2键为颜色输出;0键为取消该功能即退出该程序。
源程序代码
DATASSEGMENT
NUMDB0AH,0DH,0ah,'100900319FANYUYU',0dh,'$'
XDB15dup(?
)
YDB15dup(?
)
table1db'PLEASEINPUT0-2:
$'
table2db'---------------------------1:
mutli2:
color0:
exit-----------------------------$'
table3db'WARNING:
PLEASEINPUT0-2$';此处输入数据段代码
colDB00001000b,00000011b,00000100b,00000111b,00000001b
DB00000110b,00001111b,00000000b,00000010b,00000101b;定义显示颜色
DATASENDS
STACKSSEGMENTSTACK;此处输入堆栈段代码
DW100HDUP(?
)
STACKSENDS
CODESSEGMENT
ASSUMECS:
CODES,DS:
DATAS,SS:
STACKS
mainprocfar;定义主程序
pushds
subax,ax;清零操作
pushax
movax,DATAS;数据段赋值给AX
movds,ax
leadx,table2;自定义数据送给DX
movah,9;功能号为9,显示
int21h
callback;调用子程序,实现回显与清除
t:
leadx,table1
movah,9;功能号为9,显示;
int21h
movah,1
int21h
movbl,al
callback;调用子程序,实现回显与清除
cmpbl,30h;‘0’赋给BL
jzq
cmpbl,31h;‘1’赋给BL
jzn
cmpbl,32h;‘2’赋给BL
jzm
leadx,table3;显示table3定义内容
movah,9;功能号为9,显示
int21h
callback
jmpt;跳转到t
n:
callmutli
jmpt
m:
callcolor
jmpt
q:
MOVDX,OFFSETNUM
MOVAH,9;显示功能
INT21H
MOVAH,1;键盘输入并回显
INT21H
movah,4ch;中断调用
int21h
popax;恢复现场
popds
ret
mainendp
mutliprocnear;九九乘法输出函数
pushbx;保护现场
pushcx
pushdx
SUBAX,BX
PUSHAX
MOVAX,DATAs
MOVDS,AX
MOVBL,0
MOVX,BL;X=0
MOVBH,1
MOVY,BH;Y=1
MOVCL,BL
LOOP1:
ADDBL,1;PRINTX
MOVDL,BL
ADDDL,30H
MOVAH,2
INT21H
MOVDL,'*';PRINT*
MOVAH,2
INT21H
MOVDL,BH;PRINTY
ADDDL,30H
MOVAH,2
INT21H
MOVDL,'=';PRINT=
MOVAH,2
INT21H
MOVAL,BH;PRINTZ=X*Y
IMULBL
MOVAH,00H
MOVCH,0AH
IDIVCH
MOVDH,AH
CMPAL,0
JZLOOP3;比较后跳转
ADDAL,30H
LOOP2:
MOVDL,AL
MOVAH,2H
INT21H
ADDDH,30H
MOVDL,DH
MOVAH,2;显示输出
INT21H
MOVDL,20H
MOVAH,2
INT21H
CMPBL,BH
JLLOOP1
MOVDL,0AH;键盘输入到缓冲区
MOVAH,2
INT21H
MOVDL,0DH
MOVAH,2
INT21H
MOVBL,CL
ADDBH,1
CMPBH,10
JLLOOP1
JMPEXIT
LOOP3:
MOVAL,20H
JMPLOOP2
EXIT:
MOVAH,07H;键盘输入无回显
INT21H
popax
popdx
popcx
popbx;恢复现场
ret
mutliendp
colorprocnear;颜色输出函数
pushax
pushbx
pushcx
pushdx
MOVAX,DATAs
MOVDS,AX
;========MAIN()===========
MOVBH,01H
LOP1:
MOVBL,01H
LOP2:
MOVAL,BH
MULBL
CALLDISPLAY;调用显示子程序
INCBL
CMPBL,BH
JBELOP2
CALLCRLF
INCBH
CMPBH,9
JBELOP1
MOVDX,OFFSETNUM
MOVAH,9
INT21H
MOVAH,1
INT21H
;===========================
popdx;恢复现场
popcx
popbx
popAX
ret
colorendp
;------------------------
CRLFPROCNEAR
PUSHAX
PUSHDX
MOVAH,2
MOVDL,0AH;键盘输入到缓冲区
INT21H
MOVDL,0DH;键盘复位
INT21H
POPDX
POPAX
RET
CRLFENDP
OUTXPROCNEAR
PUSHAX
PUSHDX
MOVAH,2
INT21H
POPDX
POPAX
RET
OUTXENDP
;----------------------------
DISPLAYPROCNEAR
PUSHDX
CMPAL,10
JAEDISP1
MOVDL,'';打印空格
CALLOUTX
JMPDISP2
DISP1:
MOVDL,10
MOVAH,0
DIVDL
MOVDL,AL
ADDDL,'0'
;--------------------------------------
cmpbl,bh
jneshow5
callwritecc
jmpshow1
show5:
cmpbl,1;小于或等于比较后跳转;结果为正就转移
jneshow6
callwritecc
jmpshow1
show6:
cmpbh,9
jneshow
callwritecc
jmpshow1
;-----------------------------------------------
show:
CALLOUTX
show1:
MOVAL,AH
DISP2:
MOVDL,AL
ADDDL,'0'
;------------------------------------------------
cmpbl,bh
jneshow4
callwritecc
jmpshow3
show4:
cmpbl,1
jneshow7
callwritecc
jmpshow3
show7:
cmpbh,9
jneshow2
callwritecc
jmpshow3
;--------------------------------------------------
show2:
CALLOUTX
show3:
MOVDL,''
CALLOUTX
CALLOUTX
popdx
RET
DISPLAYENDP
WriteCCPROCnear
pushAX
pushbx
pushcx
pushdx
pushsi
xorAH,AH;清零操作
MOVdh,9
MOVAL,dh
MOVsi,AX
MOVAH,9;显示字符串
MOVAL,DL
MOVbh,0
MOVbl,col[si]
MOVcx,1
INT10h
MOVAH,3
INT10h
MOVAH,2;显示输出
incDL;自加
INT10h
popsi
popdx
popcx
popbx
popAX
ret
WriteCCENDP
backprocnear
movdl,0Ah
movah,2
int21h
movdl,0Dh
movah,2
int21h
ret
backendp
MOVAH,4CH
INT21H
CODESENDS
END