8086总汇编语言实现1616点阵输出6中字体变换.docx
《8086总汇编语言实现1616点阵输出6中字体变换.docx》由会员分享,可在线阅读,更多相关《8086总汇编语言实现1616点阵输出6中字体变换.docx(15页珍藏版)》请在冰豆网上搜索。
8086总汇编语言实现1616点阵输出6中字体变换
8086汇编语言实现16*16点阵输出汉字以与6种变化
所使用实验板,实验板上有地址所以在程序中不再表现,:
程序:
STACKedSEGMENTSTACK
STADW1000DUP(?
)
TOPEQUSIZESTA
STACKedENDS
;堆栈段定义
DATASEGMENT
TABLEDB0FCH,3FH,0FCH,3FH,80H,01H,80H,01H,0F8H,1FH,0F8H,1FH,80H,01H,80H,01H,80H,01H,0C0H,03H,60H,06H,30H,0CH,18H,18H,0CH,30H,06H,60H,03H,0C0H
DB0CH,02H,18H,02H,0B0H,0FH,20H,0AH,0C4H,7FH,1CH,0AH,0B8H,0FH,20H,02H,00H,02H,0C0H,1FH,20H,02H,30H,02H,0F0H,3FH,18H,02H,0CH,02H,0CH,02H
DB00H,00H,80H,01H,80H,01H,80H,01H,0FCH,3FH,0FCH,3FH,0C0H,03H,0C0H,03H,60H,06H,60H,0CH,30H,1CH,18H,18H,18H,18H,0CH,30H,06H,60H,06H,60H
DB48H,0CH,48H,06H,90H,03H,0FCH,1FH,04H,10H,04H,10H,0E0H,03H,00H,01H,80H,00H,80H,00H,0F8H,0FH,80H,00H,80H,00H,0A0H,00H,0C0H,00H,80H,00H
TEMPDB32DUP(00H)
DXX_TDW?
P2_COUNTDB?
P2_COUNT1DB?
DATAENDS
;数据段定义,其中TABLEA表中输入的是“某某大学〞四个字的字体模型,用于在LED上输出,字模设计由个人自己设计,本实验以“某某大学〞4个字为例
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACKed
START:
MOVAX,DATA
MOVDS,AX
MOVAX,STACKed
MOVSS,AX
MOVSP,TOP;程序段地址的传输
;---------------------------常规变换----------------------------------
MOVBX,OFFSETTABLE;BX可以用来向此子程序传输显示值地址
MOVSI,04FFH;字体切换时间
CALLDISPLAY
ADDBX,20H;BX可以用来向此子程序传输显示值地址
MOVSI,04FFH;字体切换时间
CALLDISPLAY
ADDBX,20H;BX可以用来向此子程序传输显示值地址
MOVSI,04FFH;字体切换时间
CALLDISPLAY
ADDBX,20H;BX可以用来向此子程序传输显示值地
MOVSI,04FFH;字体切换时间
CALLDISPLAY
;---------------------------输出阴文----------------------------------
MOVBX,OFFSETTABLE;BX可以用来向此子程序传输显示值地址
MOVSI,04FFH;字体切换时间
CALLDISPLAY2
ADDBX,20H;BX可以用来向此子程序传输显示值地址
MOVSI,04FFH;字体切换时间
CALLDISPLAY2
ADDBX,20H;BX可以用来向此子程序传输显示值地址
MOVSI,04FFH;字体切换时间
CALLDISPLAY2
ADDBX,20H;BX可以用来向此子程序传输显示值地
MOVSI,04FFH;字体切换时间
CALLDISPLAY2
;----------------------------向上滑行----------------------------------
MOVBX,OFFSETTABLE;BX可以用来向此子程序传输显示值地址
MOVCX,0000H
MOVDX,0000H
C2_DELAY:
INCDX
MOVSI,008FH
CALLDISPLAY
CMPDX,0009H;调节控制第123个字的环
JNAC2_DELAY
SUBBX,02H
AGAIN:
ADDBX,02H
MOVSI,008FH;调整控制上升速度
CALLDISPLAY
ADDCL,01H
CMPCL,10H
JNAC2
INCCH
MOVCL,00H
MOVDX,0000H
C_DELAY:
INCDX
CALLDISPLAY
CMPDX,0009H;延时循环
JNAC_DELAY
SUBBX,02H
C2:
CMPCH,02H
JNAAGAIN
;--------------------------左右两边滑行消失-------------------------------
MOVBX,OFFSETTABLE;BX可以用来向此子程序传输显示值地址
MOVSI,0CF10H;字体切换时间
CALLDISPLAY1
ADDBX,20H
MOVSI,0CF10H;字体切换时间
CALLDISPLAY1
ADDBX,20H
MOVSI,0CF10H;字体切换时间
CALLDISPLAY1
ADDBX,20H
MOVSI,0CF10H;字体切换时间
CALLDISPLAY1
;---------------------------逐行刷新----------------------------------
MOVCX,0000H
MOVBX,OFFSETTABLE
MOVDI,OFFSETTEMP
C3_LOOP:
MOVAL,[BX]
MOV[DI],AL
MOVAL,[DI]
INCBX
INCDI
MOVAL,[BX]
MOV[DI],AL
MOVAL,[DI]
INCBX
INCDI
INCCL
INCCH
PUSHBX
MOVBX,OFFSETTEMP;BX可以用来向此子程序传输显示值地址
MOVSI,008FH;字体切换速度
CALLDISPLAY
POPBX
CMPCL,0FH
JNAC3_JUDGE
MOVDI,OFFSETTEMP
MOVCL,00H
MOVDX,0000H
C3_DELAY:
INCDX
PUSHBX
MOVBX,OFFSETTEMP;BX可以用来向此子程序传输显示值地址
MOVSI,00FFH;字体暂留时间
CALLDISPLAY
POPBX
CMPDX,0005H;字体停留时间
JNAC3_DELAY
C3_JUDGE:
CMPCH,3FH
JNAC3_LOOP
;---------------------------分块刷新----------------------------------
MOVCX,0000H
MOVBX,OFFSETTABLE
MOVDI,OFFSETTEMP
CLEAR:
MOVAL,00H
MOV[DI],AL
INCDI
INCCL
CMPCL,20H
JNACLEAR
MOVCL,00H
C4_LOOP:
MOVDI,OFFSETTEMP
C4_MOV:
MOVAL,[BX]
MOV[DI],AL
MOVAL,[DI]
ADDBX,02H
ADDDI,02H
INCCL
CMPCL,10H
JNAC4_MOV
MOVCL,00H
PUSHBX
MOVBX,OFFSETTEMP;BX可以用来向此子程序传输显示值地址
MOVSI,00FFH;字体切换速度
CALLDISPLAY
POPBX
SUBBX,21H
SUBDI,21H
C4_MOV2:
MOVAL,[BX]
MOV[DI],AL
MOVAL,[DI]
ADDBX,02H
ADDDI,02H
INCCL
CMPCL,10H
JNAC4_MOV2
MOVCL,00H
PUSHBX
MOVBX,OFFSETTEMP;BX可以用来向此子程序传输显示值地址
MOVSI,003FFH;字体切换速度
CALLDISPLAY
POPBX
SUBBX,03H
INCCH
CMPCH,03H
JNAC4_LOOP
;------------------------程序停止---------------------------
MOVAH,4CH
INT21H
;-------------------------------------------------DISPLAY-----------------------------------------------
;程序作用:
对一个32个Bite的数据在16*16数码版上做输出
;入口参数:
BX中存入32Bite的数据段的首地址
;SI中存入让此32Bite数据显示的时间长短
;无输出参数
;子程序自动进展现场保护
;------------------------------------------------------------------------------------------------------------
DISPLAYPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHBP
PUSHSI
MOVAH,00H
MOVCX,8000H
MOVBP,02B3H
CLC
P1_LOOP:
MOVDX,02B0H;行
PUSHBX;第一次压入保护2B0H中BX
PUSHBX;第二次压入保护2B1H中BX
MOVAL,CL
ADDBX,AX
MOVAL,[BX]
OUTDX,AL
MOVDX,02B1H;行
POPBX;取出2B1H中BX
MOVAL,CL
INCAL
ADDBX,AX
MOVAL,[BX]
OUTDX,AL
POPBX;取出2B0H中BX
MOVDX,BP;列
MOVAL,CH
OUTDX,AL
CMPBP,02B3H
JNZP1_SHOW
MOVDX,02B2H
MOVAL,00H
OUTDX,AL
JMPP1_JMP
P1_SHOW:
MOVDX,02B3H
MOVAL,00H
OUTDX,AL
P1_JMP:
ADDCL,02H
RCRCH,1
CMPCH,00H
JAP1_JUDGE1;大于时不做修改,直接跳转
CMPBP,02B3H
JZP1_CHANG;等于时,改变片选
MOVBP,02B3H
MOVCH,80H
JMPP1_JUDGE1
P1_CHANG:
MOVBP,02B2H
MOVCH,80H
P1_JUDGE1:
CMPCL,1FH
JNAP1_JUDGE2;不大于时直接跳过
MOVCL,00H
P1_JUDGE2:
MOVDX,0000H
DELAY:
INCDX
CMPDX,06500H;延时循环
JNADELAY
DECSI
CMPSI,0000H
JNAP1_OUT;不大于,这里是等于零,表示每一行都输出过
JMPP1_LOOP
P1_OUT:
POPSI
POPBP
POPDX
POPCX
POPBX
POPAX
RET
DISPLAYENDP
;-----------------------------------------------DISPLAY1----------------------------------------------------------
;程序作用:
对一个32个Bite的数据在16*16数码版上做输出,输出最后会实现文字从左右
;滑行消失
;入口参数:
BX中存入32Bite的数据段的首地址
;SI中存入让此32Bite数据显示的时间长短
;无输出参数
;子程序自动进展现场保护
;----------------------------------------------------------------------------------------------------------------------
DISPLAY1PROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHBP
PUSHSI
MOVAH,00H
MOVCX,8000H
MOVP2_COUNT,00H
MOVP2_COUNT1,00H
MOVBP,02B3H
CLC
P1_LOOP:
MOVDX,02B0H;行
PUSHBX;第一次压入保护2B0H中BX
PUSHBX;第二次压入保护2B1H中BX
MOVAL,P2_COUNT
ADDBX,AX
MOVAL,[BX]
SHRAL,CL
OUTDX,AL
MOVDX,02B1H;行
POPBX;取出2B1H中BX
MOVAL,P2_COUNT
INCAL
ADDBX,AX
MOVAL,[BX]
SHLAL,CL
OUTDX,AL
POPBX;取出2B0H中BX
MOVDX,BP;列
MOVAL,CH
OUTDX,AL
CMPBP,02B3H
JNZP1_SHOW
MOVDX,02B2H
MOVAL,00H
OUTDX,AL
JMPP1_JMP
P1_SHOW:
MOVDX,02B3H
MOVAL,00H
OUTDX,AL
P1_JMP:
ADDP2_COUNT,02H
RCRCH,1
CMPCH,00H
JAP1_JUDGE1;大于时不做修改,直接跳转
CMPBP,02B3H
JZP1_CHANG
MOVBP,02B3H
MOVCH,80H
JMPP1_JUDGE1
P1_CHANG:
MOVBP,02B2H
MOVCH,80H
P1_JUDGE1:
CMPP2_COUNT,1FH
JNAP1_JUDGE2;不大于时直接跳过
MOVP2_COUNT,00H
INCP2_COUNT1
CMPP2_COUNT1,030H;调整可以控制暂留时间
JNAP1_JUDGE2
INCCL
CMPCL,0DH;左移位数,可调节消失时间
JAP1_OUT
P1_JUDGE2:
MOVDX,0000H
DELAY:
INCDX
CMPDX,06500H;延时循环+向左滑的速度
JNADELAY
DECSI
CMPSI,0000H
JNAP1_OUT
JMPP1_LOOP
P1_OUT:
POPSI
POPBP
POPDX
POPCX
POPBX
POPAX
RET
DISPLAY1ENDP
;---------------------------------------------DISPLAY2----------------------------------------------
;程序作用:
对一个32个Bite的数据在16*16数码版上做阴文输出
;入口参数:
BX中存入32Bite的数据段的首地址
;SI中存入让此32Bite数据显示的时间长短
;无输出参数
;子程序自动进展现场保护
;-------------------------------------------------------------------------------------------------------
DISPLAY2PROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHBP
PUSHSI
MOVAH,00H
MOVCX,8000H
MOVBP,02B3H
CLC
P3_LOOP:
MOVDX,02B0H;行
PUSHBX;第一次压入保护2B0H中BX
PUSHBX;第二次压入保护2B1H中BX
MOVAL,CL
ADDBX,AX
MOVAL,[BX]
NOTAL
OUTDX,AL
MOVDX,02B1H;行
POPBX;取出2B1H中BX
MOVAL,CL
INCAL
ADDBX,AX
MOVAL,[BX]
NOTAL
OUTDX,AL
POPBX;取出2B0H中BX
MOVDX,BP;列
MOVAL,CH
OUTDX,AL
CMPBP,02B3H
JNZP3_SHOW
MOVDX,02B2H
MOVAL,00H
OUTDX,AL
JMPP3_JMP
P3_SHOW:
MOVDX,02B3H
MOVAL,00H
OUTDX,AL
P3_JMP:
ADDCL,02H
RCRCH,1
CMPCH,00H
JAP3_JUDGE1;大于时不做修改,直接跳转
CMPBP,02B3H
JZP3_CHANG;等于时,改变片选
MOVBP,02B3H
MOVCH,80H
JMPP3_JUDGE1
P3_CHANG:
MOVBP,02B2H
MOVCH,80H
P3_JUDGE1:
CMPCL,1FH
JNAP3_JUDGE2;不大于时直接跳过
MOVCL,00H
P3_JUDGE2:
MOVDX,0000H
DELAY3:
INCDX
CMPDX,06500H;调节控制字体刷新速度
JNADELAY3
DECSI
CMPSI,0000H
JNAP3_OUT;不大于,这里是等于零,表示每一行都输出过
JMPP3_LOOP
P3_OUT:
POPSI
POPBP
POPDX
POPCX
POPBX
POPAX
RET
DISPLAY2ENDP
CODEENDS
ENDSTART