第 6 章 应用系统开发

68
第6第 第第第 第第 第6第 第第第 第第 6.1 ﹡﹡﹡﹡﹡﹡﹡﹡ 6.2 ﹡﹡﹡ ﹡﹡﹡﹡

description

第 6 章 应用系统开发. ﹡ 6.1 汽车动画程序开发 ﹡ 6.2 发声系统程序开发. 开 始. 6.1 汽车动画程序开发. ﹡ 6.1.1 字符图形显示 ﹡ 6.1.2 动画程序的开发. 返回本章首页. 6.1.1 字符图形显示. 字符图形既可以在显示器上以简单的黑白图形字符显示,也可以在彩色显示器上以彩色的图形字符显示。通过调用 INT 10H 的 AH=0 , AL=0~7 可设置不同的显示方式,调用 INT 10H 的 AH=09H , AH=0AH 等可显示字符。. 返回本节. 6.1.2 动画程序的开发. - PowerPoint PPT Presentation

Transcript of 第 6 章 应用系统开发

Page 1: 第 6 章  应用系统开发

第 6章 应用系统开发

第 6 章 应用系统开发﹡ 6.1 汽车动画程序开发

﹡ 6.2 发声系统程序开发

开 始

Page 2: 第 6 章  应用系统开发

第 6章 应用系统开发

6.1 汽车动画程序开发 ﹡ 6.1.1 字符图形显示

﹡ 6.1.2 动画程序的开发

返回本章首页

Page 3: 第 6 章  应用系统开发

第 6章 应用系统开发

6.1.1 字符图形显示字符图形既可以在显示器上以简单的黑白图字符图形既可以在显示器上以简单的黑白图形字符显示,也可以在彩色显示器上以彩色形字符显示,也可以在彩色显示器上以彩色的图形字符显示。通过调用的图形字符显示。通过调用 INT 10HINT 10H 的的 AAH=0H=0 ,, AL=0~7AL=0~7 可设置不同的显示方式,可设置不同的显示方式,调用调用 INTINT    10H10H 的的 AH=09HAH=09H ,, AH=0AHAH=0AH等可显示字符。等可显示字符。

返回本节

Page 4: 第 6 章  应用系统开发

第 6章 应用系统开发

1 .动画显示的基础2 .程序举例

6.1.2 动画程序的开发

Page 5: 第 6 章  应用系统开发

第 6章 应用系统开发

在屏幕上显示出动画的效果,可分在屏幕上显示出动画的效果,可分 55 步进行:步进行:           在屏幕上显示图形(单字符或多字符图形)。在屏幕上显示图形(单字符或多字符图形)。           延迟一个时间周期,这样图形更清晰。延迟一个时间周期,这样图形更清晰。           清除图形。 清除图形。       改变图形的行列坐标。改变图形的行列坐标。          返回第一步,重复上述过程。返回第一步,重复上述过程。

1 .动画显示的基础

Page 6: 第 6 章  应用系统开发

第 6章 应用系统开发

图图 6.1 “6.1 “ 汽车”各字符的相对位汽车”各字符的相对位移量移量

( - 2,1) (0,1)(0,1)

(0,0)(0,0)

(0,(0, -- 3)3)(0,1)(0,1) (0,1)(0,1) (1,0)(1,0)

上 一 页

Page 7: 第 6 章  应用系统开发

第 6章 应用系统开发

•【例【例 6.16.1 】在屏幕上显示一个开动的汽车如图】在屏幕上显示一个开动的汽车如图 6.16.1 所所示示源程序如下:源程序如下: DATADATA SEGMENTSEGMENT

CARCAR DB 7DB 7 ;字符图形表;字符图形表DBDB 52H 52H ,, 77 ,, 00 ,, 00

DBDB 0B1H 0B1H ,, 77 ,, 00 ,, 11

DBDB 0DBH 0DBH ,, 77 ,, 00 ,, 11

DBDB 0DBH 0DBH ,, 77 ,, 00 ,, 11

DBDB 4FH4FH ,, 77 ,, 11 ,, 00

DBDB 4FH4FH ,, 77 ,, 00 ,, -3-3

DBDB 22 ,, 77 ,, -2-2 ,, 11

2 .程序举例

Page 8: 第 6 章  应用系统开发

第 6章 应用系统开发CHAR_CNTCHAR_CNT DW ? POINTERDW ? POINTER DW ?DW ?

LINE_ONLINE_ON DB ? COL_ON DB ? COL_ON DB ?DB ?

DATADATA ENDSENDS

; ; CODECODE SEGMENTSEGMENT

ASSUME CSASSUME CS :: CODECODE ,, DSDS :: DATADATA

MAINMAIN PROCPROC FAR PUSH FAR PUSH DSDS

SUBSUB AXAX ,, AXPUSHAXPUSH AXAX

MOVMOV AXAX ,, DATADATA ;初始化;初始化 DSDS

上 一 页

Page 9: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV DSDS ,, AXAX

MOVMOV AHAH ,, 00 ;设置;设置 300×200300×200 彩色图彩色图形方式形方式MOVMOV ALAL ,, 4 INT4 INT 10H 10H

MOVMOV AHAH ,, 0BH0BH ;设置背景颜色;设置背景颜色MOVMOV BHBH ,, 0 MOV0 MOV BL BL ,, 22

INTINT 1010

MOVMOV AHAH ,, 0BH0BH ;设置彩色调板;设置彩色调板MOVMOV BHBH ,, 01 MOV01 MOV BL BL ,, 0000

INTINT 10H10H

CALLCALL CLEAR_SCREENCLEAR_SCREEN ;清屏;清屏上 一 页

Page 10: 第 6 章  应用系统开发

第 6章 应用系统开发LEALEA DIDI ,, CARCAR ;; DIDI 指向字符图形表指向字符图形表

MOVMOV DHDH ,, 55 ;从第;从第 55 行行 55 列位列位置开始置开始MOVMOV DLDL ,, 55 ;显示汽车;显示汽车CALLCALL MOVE_SHAPEMOVE_SHAPE

RET MAINRET MAIN ENDPENDP

; ; CLEAR_SCREEN PROC NEARCLEAR_SCREEN PROC NEAR

PUSHPUSH AXAX ;保护寄存器;保护寄存器PUSHPUSH BXBX

PUSHPUSH CXCX 上 一 页

Page 11: 第 6 章  应用系统开发

第 6章 应用系统开发PUSHPUSH DXDX

MOVMOV AHAH ,, 66 ;屏幕上卷功;屏幕上卷功能能MOVMOV ALAL ,, 00

MOVMOV CHCH ,, 00 ;左上角行号;左上角行号 MOVMOV CLCL ,, 00 ;左上角列号;左上角列号

MOVMOV DHDH ,, 2424 ;右下角行号;右下角行号MOVMOV DLDL ,, 7979 ;右下角列号;右下角列号MOVMOV BHBH ,, 77 ;卷入行属性;卷入行属性INTINT 10H10H ;调用显示属性;调用显示属性POPPOP DXDX ;恢复寄存器;恢复寄存器上 一 页

Page 12: 第 6 章  应用系统开发

第 6章 应用系统开发POPPOP CXCX

POPPOP BXBX

POPPOP AXAX

RETRET ;返回主程序;返回主程序CLEAR_SCREEN ENDPCLEAR_SCREEN ENDP

; ; MOVE_SHAPE PROC NEARMOVE_SHAPE PROC NEAR

PUSHPUSH AXAX ;保护寄存器;保护寄存器PUSHPUSH BX PUSHBX PUSH CXCX

PUSHPUSH DX PUSHDX PUSHDIDI

上 一 页

Page 13: 第 6 章  应用系统开发

第 6章 应用系统开发 MOVMOV AHAH ,, 0FH0FH ;取当前显示方式;取当前显示方式

INTINT 10H10H

SUBSUB CHCH ,, CHCH ;清除计数器;清除计数器 CXCX 的高字节的高字节MOVMOV CLCL ,, [DI][DI] ;; CLCL 放循环次数放循环次数INCINC DI DI ;; DIDI 指向字符图形表中的第一个字符指向字符图形表中的第一个字符MOVMOV CHAR_CNTCHAR_CNT ,, CXCX ;保存循环次数;保存循环次数MOVMOV POINTERPOINTER ,, DIDI

MOVMOV LINE_ONLINE_ON ,, DHDH

MOVMOV COL_ONCOL_ON ,, DLDL

上 一 页

Page 14: 第 6 章  应用系统开发

第 6章 应用系统开发 PLOT_NEXTPLOT_NEXT ::

ADDADD DHDH ,, [DI+2][DI+2] ;改变行列指针;改变行列指针ADDADD DLDL ,, [DI+3][DI+3]

CMPCMP DLDL ,, 8080 ;出屏否?;出屏否?JBJB MOV_CRSRMOV_CRSR

CALLCALL ERASEERASE

POPPOP DI DI

POPPOP DXDX

POPPOP CX CX

POPPOP BXBX

POPPOP AX AX

RETRET

上 一 页

Page 15: 第 6 章  应用系统开发

第 6章 应用系统开发 MOV_CRSRMOV_CRSR ::

MOVMOV AHAH ,, 22 ;移动光标位置;移动光标位置INTINT 10H MOV10H MOV

ALAL , , [DI][DI]

MOVMOV BLBL ,, [DI+1][DI+1] ;取字符值及属性;取字符值及属性PUSHPUSH CX CX

MOVMOV CX CX ,, 11

MOVMOV AHAH ,, 0909 ;显示字符;显示字符INTINT 10H 10H

POPPOP CXCX

ADDADD DIDI ,, 44 ;; DIDI 指向下一个字符指向下一个字符LOOPLOOP PLOT_NEXTPLOT_NEXT

CALLCALL DLY_QRTRDLY_QRTR ;调用延时子程序;调用延时子程序

Page 16: 第 6 章  应用系统开发

第 6章 应用系统开发CALLCALL ERASEERASE ;调用擦除子程序;调用擦除子程序

JMPJMP SHORT PLOT_NEXTSHORT PLOT_NEXT

MOVE_SHAPEMOVE_SHAPE ENDPENDP

;;ERASE PROCERASE PROC NEARNEAR

MOVMOV CXCX ,, CHAR_CNTCHAR_CNT

MOVMOV DIDI ,, POINTERPOINTER

MOVMOV DHDH ,, LINE_ONLINE_ON

MOVMOV DLDL ,, COL_ONCOL_ON

上 一 页

Page 17: 第 6 章  应用系统开发

第 6章 应用系统开发ERASE_NEXTERASE_NEXT ::ADDADD DHDH ,, [DI+2] ADD[DI+2] ADD DLDL ,, [DI+3][DI+3]

MOVMOV AHAH ,, 2 INT2 INT 10H10H

MOVMOV ALAL ,, [DI] MOV[DI] MOV BLBL ,, 00

PUSHPUSH CX MOVCX MOV CXCX ,, 11

MOVMOV AHAH ,, 9 INT9 INT 10H10H

POPPOP CX ADDCX ADD DIDI ,, 44

LOOPLOOP ERASE_NEXTERASE_NEXT

MOVMOV CXCX ,, CHAR_CNTCHAR_CNT

上 一 页

Page 18: 第 6 章  应用系统开发

第 6章 应用系统开发

MOVMOV DIDI ,, POINTERPOINTER

MOVMOV DHDH ,, LINE_ONLINE_ON

INCINC COL_ONCOL_ON

MOVMOV DLDL ,, COL_ONCOL_ON

RETRET

ERASEERASE ENDPENDP

; ; DLY_QRTR PROC NEARDLY_QRTR PROC NEAR ;延时子程序;延时子程序

PUSHPUSH CXCX

Page 19: 第 6 章  应用系统开发

第 6章 应用系统开发PUSHPUSH DXDX

MOVMOV DXDX ,, 50005000

D11D11 ::MOVMOV CXCX ,, 28012801

D12D12 ::LOOPLOOP D12 DECD12 DEC DXDX

JNZJNZ D11 POPD11 POP DXDX

POPPOP CX RETCX RET

DLY_QRTRDLY_QRTR ENDPENDP

CODECODE ENDSENDS

END MAINEND MAIN

返回本节上 一 页

Page 20: 第 6 章  应用系统开发

第 6章 应用系统开发

6.2 发声系统程序开发 ﹡ 6.2.1 系统发声途径

﹡ 6.2.2 发声应用程序举例

返回本章首页

Page 21: 第 6 章  应用系统开发

第 6章 应用系统开发

6.2.1 系统发声途径1.8254定时器作为发声源2.8255端口B(PB1位)作为发声源

返回本章首页

Page 22: 第 6 章  应用系统开发

第 6章 应用系统开发

1 . 8254 定时器作为发声源将定时器产生的方波信号同将定时器产生的方波信号同 82558255 的端口的端口 BB 相与来相与来控制扬声器发声的(如图控制扬声器发声的(如图 6.26.2 所示),因此当所示),因此当 PB1=PB1=11 时,才能控制扬声器的音调。在系统中时,才能控制扬声器的音调。在系统中 82558255 的的 BB口地址为口地址为 61H61H ,用指令:,用指令: ININ ALAL ,, 61H61H

OROR ALAL ,, 33

OUTOUT 61H61H ,, ALAL

Page 23: 第 6 章  应用系统开发

第 6章 应用系统开发

图图 6.2 6.2 控制扬声器发声原理图控制扬声器发声原理图

Page 24: 第 6 章  应用系统开发

第 6章 应用系统开发

ROM BIOSROM BIOS 中的发声子程序如下:中的发声子程序如下:BEEPBEEP PROC NEAR PROC NEAR

MOVMOV ALAL ,, 10110110B10110110B

OUTOUT 43H43H ,, AL AL

MOVMOV AXAX ,, 533H533H

OUTOUT 42H42H ,, AL AL

MOVMOV ALAL ,, AHAH

OUTOUT 42H42H ,, AL AL

ININ ALAL ,, PORT_BPORT_B

Page 25: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV AHAH ,, ALAL

OROR ALAL ,, 0303

OUTOUT PORT_BPORT_B ,, ALAL

SUBSUB CXCX ,, CXCX

G7G7 :: LOOPLOOP G7G7

DECDEC BLBL

JNZJNZ G7G7

MOVMOV ALAL ,, AHAH

OUTOUT PORT_BPORT_B ,, ALAL

RET BEEPRET BEEP ENDPENDP

返回本节

Page 26: 第 6 章  应用系统开发

第 6章 应用系统开发

2 . 8255 端口 B ( PB1 位)作为发声源使使 82558255 端口端口 BB (或相应的等效电路)最低(或相应的等效电路)最低位位 DD00=0=0 ,关闭定时器声源的输出,,关闭定时器声源的输出, OUT2OUT2

为常高电位(方式为常高电位(方式 33 所致)。又通过使所致)。又通过使 82558255端口端口 BB (或相应等效电路)的(或相应等效电路)的 DD11 位置位置 11 或或置置 00 ( 按 指 定 的 频 率 来 编 程 ) , 便 能 让( 按 指 定 的 频 率 来 编 程 ) , 便 能 让“与”门输出一周期性变化的方波,使扬声“与”门输出一周期性变化的方波,使扬声器发声。器发声。

返回本节

Page 27: 第 6 章  应用系统开发

第 6章 应用系统开发

6.2.2 发声应用程序举例1.扬声器发声通用子程序2.演奏乐曲程序3.定时报警程序

Page 28: 第 6 章  应用系统开发

第 6章 应用系统开发1 .扬声器发声通用子程序

【例【例 6.26.2 】通用发声程序】通用发声程序 GENSOUNDGENSOUND 。。PUBLICPUBLIC GENSOUNDGENSOUND

CODECODE SEGMENT PARA ‘CODE’SEGMENT PARA ‘CODE’

ASSUME CSASSUME CS :: CODECODE

GENSOUNDGENSOUND PROCPROC FARFAR

PUSHPUSH AXAX ;保存将要用到的;保存将要用到的寄存器寄存器PUSHPUSH BXBX

Page 29: 第 6 章  应用系统开发

第 6章 应用系统开发PUSHPUSH CX PUSHCX PUSH DXDX

PUSHPUSH DIDI

MOVMOV ALAL ,, 0B6H0B6H ;向;向 8253-5/8254-28253-5/8254-2 计数器计数器 22 写控制字写控制字OUTOUT 43H43H ,, ALAL ;方式;方式 33 、双字节写和二进制计数方式写到控、双字节写和二进制计数方式写到控制口制口MOVMOV DXDX ,, 12H12H ;设置被除数;设置被除数MOVMOV AXAX ,, 533H*896533H*896

DIVDIV DIDI ;其商(;其商( AXAX )为预置值)为预置值OUTOUT 42H42H ,, ALAL ;先送;先送 LSBLSB

Page 30: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV ALAL ,, AHAH

OUTOUT 42H42H ,, ALAL ;后送;后送 MSBMSB

ININ ALAL ,, 61H61H ; 读; 读 82558255 端 口端 口 BB(( 61H61H )原值)原值MOVMOV AHAH ,, ALAL ;保存端口原值;保存端口原值OROR ALAL ,, 3 3

OUTOUT 61H61H ,, ALAL ;接通扬声器;接通扬声器WAIT1WAIT1 :: MOV CXMOV CX ,, 8FF0H8FF0H ;在;在 80486/DX2/6680486/DX2/66 中中取取DELAYDELAY :: LOOP DELAYLOOP DELAY ;循环次数为;循环次数为 8FF0H8FF0H

DECDEC BXBX ;循环持续;循环持续 BXBX 次次JNZJNZ WAIT1WAIT1

Page 31: 第 6 章  应用系统开发

第 6章 应用系统开发

MOVMOV ALAL ,, AHAH ;写回;写回 61H61H 口原值,关闭扬口原值,关闭扬声声 OUTOUT 61H61H ,, ALAL

POPPOP DIDI ;恢复寄存器;恢复寄存器POPPOP DX POPDX POP CXCX

POPPOP BX POPBX POP AXAX

RETRET ;子程序结束返回;子程序结束返回GENSOUNDGENSOUND ENDPENDP

CODECODE ENDSENDS

ENDEND

返回本节

Page 32: 第 6 章  应用系统开发

第 6章 应用系统开发2 .演奏乐曲程序

音名 C D E F G A B C D E F G A B C

唱名 1 2 3 4 5 6 7 1 2 3 4 5 6 7 i

频率(Hz)

131

147

165

175

196

220

247

262

294

330

349

392

440

492

523

表表 6.16.1 音律与频率对应表音律与频率对应表

Page 33: 第 6 章  应用系统开发

第 6章 应用系统开发

程序如下:程序如下:TITLE MUSIC –TITLE MUSIC – 乐曲“玛丽有只小羊羔”乐曲“玛丽有只小羊羔”;汇编过程: ;汇编过程: MASM MUSIC.ASM MASM MUSIC.ASM 连接过程;连接过程; LILINK MUSIC+GENLOUNDNK MUSIC+GENLOUND

EXTRN GENSOUNDEXTRN GENSOUND :: FARFAR ;定义外部调用程序;定义外部调用程序STACKSTACK SEGMENT PARA STACK ‘STACK’SEGMENT PARA STACK ‘STACK’

DB 64 DUPDB 64 DUP (‘(‘ STACK’STACK’ ))STACKSTACK ENDSENDS

; ;

【例 6.3 】以乐谱“玛丽有只小羊羔”为例编写演奏程序

Page 34: 第 6 章  应用系统开发

第 6章 应用系统开发DATADATA SEGMENT PARA ‘DATA’ SEGMENT PARA ‘DATA’

MUS_FREQMUS_FREQ DW 330 DW 330 ,, 294294 ,, 262262 ,, 294294 ,, 3 DU3 DUPP (( 330330 );为演奏的乐曲定义一个);为演奏的乐曲定义一个DWDW 3 DUP3 DUP (( 294294 ),), 330330 ,, 392392 ,, 392392 ;频;频率表率表DWDW 330330 ,, 294294 ,, 262262 ,, 294294 ,, 4 DUP4 DUP (( 330330 ))DWDW 294294 ,, 294294 ,, 330330 ,, 294294 ,, 262262 ,, -1MUS_TIM-1MUS_TIME E

DWDW 6 DUP6 DUP (( 25*825*8 ),), 50*850*8 ;为演奏的乐曲定义;为演奏的乐曲定义一个一个DWDW 2 DUP2 DUP (( 25*825*8 ,, 25*825*8 ,, 50*850*8 );节拍时间表);节拍时间表

Page 35: 第 6 章  应用系统开发

第 6章 应用系统开发DWDW 12 DUP12 DUP (( 25*825*8 ),), 100*8 100*8

DATADATA ENDS ENDS

; ; CODECODESEGMENTSEGMENT PARA ‘CODE’PARA ‘CODE’

ASSUME CSASSUME CS :: CODECODE ,, SSSS :: STACKSTACK

ASSUME DSASSUME DS :: DATADATA

MUSICMUSIC PROCPROC FARFAR

PUSHPUSH DS SUBDS SUB AXAX ,, AXAX

PUSHPUSH AXAX

MOVMOV AXAX ,, DATADATA ;指向数据指针;指向数据指针

Page 36: 第 6 章  应用系统开发

第 6章 应用系统开发

MOVMOV DSDS ,, AXAX

LEALEA SISI ,, MUS_FREQMUS_FREQ ;将频率表的偏移地址送入;将频率表的偏移地址送入 SISI

LEALEA BPBP ,, DSDS :: MUS_TIMEMUS_TIME ;将节拍时间表的偏移地;将节拍时间表的偏移地址送入址送入 BPBP

FREQFREQ :: MOVMOV DIDI ,, [SI][SI] ;取音符频率;取音符频率CMPCMP DIDI ,, -1-1 ;结束?;结束?JEJE END_MUSEND_MUS ;是,退出;是,退出MOVMOV BXBX ,, DSDS :: [BP][BP] ;取音符持续时间;取音符持续时间

Page 37: 第 6 章  应用系统开发

第 6章 应用系统开发CALLCALL GENSOUNDGENSOUND ; 调 用; 调 用 GENSOUNDGENSOUND 发 音 子 程发 音 子 程序序

ADDADD SISI ,, 22 ;频率表指针增;频率表指针增 22

ADDADD BPBP ,, 22 ;时间表指针增;时间表指针增 22

JMPJMP FREQFREQ ;继续演奏;继续演奏END_MUSEND_MUS :: RETRET ;返回;返回 DOSDOS

MUSICMUSIC ENDPENDP

;;CODECODE ENDSENDS

ENDEND MUSICMUSIC

返回本节

Page 38: 第 6 章  应用系统开发

第 6章 应用系统开发3 .定时报警程序

图图6.3 6.3 实时钟中断处理流程图

实时钟中断处理流程图

Page 39: 第 6 章  应用系统开发

第 6章 应用系统开发

;利用;利用 INT 1AHINT 1AH 中断实现定时报警,本程序在执行中断实现定时报警,本程序在执行后,若设置成功则首先显示后,若设置成功则首先显示;字符串“;字符串“ Set up all right ”Set up all right ” 并使扬声器发声,这表明并使扬声器发声,这表明设置成功;设置成功; 11 分钟(为定时时间,分钟(为定时时间,;读者也可自己设定)后屏幕显示“!”并发声,以;读者也可自己设定)后屏幕显示“!”并发声,以示报警。示报警。;汇编过程:;汇编过程: MASMMASM :: ALARM.ASMALARM.ASM

;连接过程:;连接过程: LINK LINK :: ALARM+GENSOUNDALARM+GENSOUND

EXTRN GENSOUNDEXTRN GENSOUND :: FARFAR ;定义外部调用程序;定义外部调用程序

【例 6.4 】 TITLE ALARM—— 定时报警程序

Page 40: 第 6 章  应用系统开发

第 6章 应用系统开发

STACKSTACK SEGMENT PARA STACK ‘STACK’SEGMENT PARA STACK ‘STACK’

DB 64 DUPDB 64 DUP (‘(‘ STACK ’﹒﹒﹒STACK ’﹒﹒﹒

STACKSTACK ENDSENDS

;;DATADATA SEGMENT PARA PUBLIC ‘DATA’SEGMENT PARA PUBLIC ‘DATA’

BJBJ DB ‘Set up all right .’DB ‘Set up all right .’

DB 13DB 13 ,, 1010 ,’,’ $’$’

DATADATA ENDS ENDS

; ;

Page 41: 第 6 章  应用系统开发

第 6章 应用系统开发CODECODE SEGMENT PARA PUBLIC ‘CODE’ SEGMENT PARA PUBLIC ‘CODE’

ASSUME CSASSUME CS :: CODECODE ,, SSSS :: STACKSTACK ,, DSDS :: DADATATA

ENTRYENTRY PROC FARPROC FAR

PUSHPUSH DSDS ;保存旧的数据段;保存旧的数据段SUBSUB AXAX ,, AXAX

PUSHPUSH AXAX

MOVMOV AXAX ,, DATADATA

MOVMOV DSDS ,, AXAX

MOVMOV ALAL ,, 4AH4AH ;读取;读取 INT 4AHINT 4AH 中断向量中断向量上 一 页

Page 42: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV AHAH ,, 35H INT 21H35H INT 21H

PUSHPUSH ESES ;入栈保护 ;入栈保护 PUSHPUSH BXBX

STEP1STEP1 :: MOV AHMOV AH ,, 77 ;清除实时钟报警;清除实时钟报警INTINT 1AH1AH

JCJC STEP1STEP1 ;进位位为;进位位为 11 则转移(成功则转移)则转移(成功则转移);; MOVMOV ALAL ,, 4AH4AH ;设置新的;设置新的 INT 4AHINT 4AH 中断向量中断向量MOVMOV DXDX ,, SEG ALARMSEG ALARM

MOVMOV DSDS ,, DXDX

上 一 页

Page 43: 第 6 章  应用系统开发

第 6章 应用系统开发

LEALEA DXDX ,, ALARM MOVALARM MOV AHAH ,, 25H25H

INTINT 21H CLI21H CLI ;关中断;关中断STEP2STEP2 :: MOVMOV AHAH ,, 22 ;利用;利用 INT 1AHINT 1AH 读当前实时钟时间读当前实时钟时间INTINT 1AH1AH ;时、分、秒分别置入;时、分、秒分别置入 CHCH 、、 CLCL 、、 DHDH

JCJC STEP2STEP2 ;不成功再读;不成功再读MOVMOV ALAL ,, CLCL

ADDADD ALAL ,, 11 ;增;增 11 分钟分钟DAADAA ;调整为;调整为 BCDBCD 码格式码格式CMPCMP ALAL ,, 60H60H ;是;是 6060 分吗(分吗( BCDBCD 数)?数)?

上 一 页

Page 44: 第 6 章  应用系统开发

第 6章 应用系统开发JLJL STEP3STEP3 ;不是,则转移;不是,则转移MOVMOV ALAL ,, 00H00H ;是,改为;是,改为 00 分分STEP3STEP3 :: MOV CLMOV CL ,, ALAL ;得到报警时刻的分值;得到报警时刻的分值MOVMOV AHAH ,, 66 ;; CHCH 、、 DHDH 仍为原值仍为原值INTINT 1AH1AH ;设置报警时刻;设置报警时刻JCJC STEP2STEP2 ;不成功重做;不成功重做STISTI ;开中断;开中断MOVMOV CXCX ,, 1212

SETUPSETUP :: MOV AHMOV AH ,, 22 ;设置成功发出“嘟嘟”声;设置成功发出“嘟嘟”声上 一 页

Page 45: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV DLDL ,, 07H07H ;; 07H07H 是振铃控制码是振铃控制码INTINT 21H21H ;用;用 INT 21H INT 21H 的的 22 号功能实现号功能实现LOOPLOOP SETUPSETUP ;循环发声;循环发声MOVMOV AXAX ,, DATADATA

MOVMOV DSDS ,, AXAX

MOVMOV DXDX ,, OFFSET BJOFFSET BJ ;显示“;显示“ Set up all Set up all right .”right .” 字符串字符串MOVMOV AHAH ,, 99

INTINT 21H21H

;;上 一 页

Page 46: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV DXDX ,, 3200032000

MAINP1MAINP1 :: MOV CXMOV CX ,, 2550025500 ;延时程序段,等待报;延时程序段,等待报警警MAINP2MAINP2 :: LOOPLOOP MAINP2MAINP2

DECDEC DXDX

JNEJNE MAINP1MAINP1

RESRES :: POPPOP DXDX ;恢复;恢复 INT 4AH INT 4AH 原中断向量原中断向量POPPOP DSDS

MOVMOV ALAL ,, 4AH4AH

MOVMOV AHAH ,, 35H35H

上 一 页

Page 47: 第 6 章  应用系统开发

第 6章 应用系统开发INTINT 21H RET 21H RET

ENTRYENTRY ENDPENDP

;;ALARMALARM PROCPROC ;报警中断服务程序 ;报警中断服务程序 PUSHPUSH AX PUAHAX PUAH BXBX

PUSHPUSH DI STIDI STI

MOVMOV AHAH ,, 22 ;显示字符‘!’;显示字符‘!’MOVMOV DLDL ,‘!’,‘!’INTINT 21H21H

上 一 页

Page 48: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV DIDI ,, 300300 ;发音频率;发音频率MOVMOV BXBX ,, 14001400 ;发音延迟时间;发音延迟时间CALLCALL GENSOUNDGENSOUND ;调用通用发声子程序;调用通用发声子程序POPPOP DI POPDI POP BXBX

POPPOP AX IRETAX IRET

ALARMALARM ENDPENDP

CODECODE ENDSENDS

;;ENDEND ENTRYENTRY ;程序结束;程序结束

上 一 页

Page 49: 第 6 章  应用系统开发

第 6章 应用系统开发【例 6.5 】用软中断 INT 60H 、发声中断服务程序 INT 61H 以及软中断 INT 62H 、 INT 63H ,实现字符串“ intel 80486 DX2/66 CPU” 显示、扬声器发声和变色三角形的显示功能,定时器 ICH 中断作为计数器使用。

;;DATADATA SEGMENT PARA ‘DATA’SEGMENT PARA ‘DATA’ ;数据段;数据段D1D1 DB 0DHDB 0DH ,‘,‘ intel 80486 DX2/66 CPU intel 80486 DX2/66 CPU $’$’

D3D3 DW 0DW 0

D20D20 DB ? DATADB ? DATA ENDSENDS

;;

Page 50: 第 6 章  应用系统开发

第 6章 应用系统开发STACSTAC SEGMENT PARA STACK ‘STAC’SEGMENT PARA STACK ‘STAC’ ;堆栈段;堆栈段STA1STA1 DW 100 DUP(?)DW 100 DUP(?)

STACSTAC ENDSENDS

;;CODECODE SEGMENT PARA ‘CODE’SEGMENT PARA ‘CODE’ ;代码段;代码段ASSUME CSASSUME CS :: CODECODE ,, DSDS :: DATADATA

ASSUME SSASSUME SS :: STACSTAC ,, ESES :: DATADATA

STARSTAR PROCPROC FARFAR ;主程序开始;主程序开始

上 一 页

Page 51: 第 6 章  应用系统开发

第 6章 应用系统开发PUSHPUSH DS XOR AXDS XOR AX ,, AXAX

PUSHPUSH AX MOV AXAX MOV AX ,, DATADATA

MOVMOV DSDS ,, AX MOVAX MOV ESES ,, AXAX

CLICLI ;关中断;关中断MOVMOV ALAL ,, 1CH1CH ;保存定时器时钟中断向;保存定时器时钟中断向量量MOVMOV AHAH ,, 35H35H

INTINT 21H21H

PUSHPUSH ESES

上 一 页

Page 52: 第 6 章  应用系统开发

第 6章 应用系统开发PUSHPUSH BX PUSHBX PUSH DSDS

MOVMOV DXDX ,, OFFSET RINGOFFSET RING ;设置定时器时钟中断向量;设置定时器时钟中断向量MOVMOV AXAX ,, SEG RINGSEG RING

MOVMOV DSDS ,, AXAX

MOVMOV ALAL ,, 1CH 1CH

MOVMOV AHAH ,, 25H25H

INTINT 21H21H

POPPOP DS DS

ININ ALAL ,, 21H21H ;读;读 IMRIMR 中的屏蔽码中的屏蔽码

上 一 页

Page 53: 第 6 章  应用系统开发

第 6章 应用系统开发ANDAND ALAL ,, 1111110B1111110B ;开放中断;开放中断 00 并保留中断屏并保留中断屏蔽设置蔽设置OUTOUT 21H21H ,, ALAL ;将新屏蔽码写入;将新屏蔽码写入 IMRIMR 中中PUSHPUSH DSDS ;入栈保护;入栈保护 DSDS 寄存器寄存器MOVMOV DXDX ,, OFFSET I60OFFSET I60 ;取;取 I60I60 的偏移地址的偏移地址MOVMOV AXAX ,, SEG I60SEG I60 ;取;取 I60I60 的段基地址的段基地址MOVMOV DSDS ,, AXAX

MOVMOV AHAH ,, 25H25H

MOVMOV ALAL ,, 60H60H

INTINT 21H21H

上 一 页

Page 54: 第 6 章  应用系统开发

第 6章 应用系统开发LEALEA DXDX ,, I61I61 ;设置;设置 61H61H 软中断向量软中断向量MOVMOV AXAX ,, SEG I61SEG I61

MOVMOV DSDS ,, AXAX

MOVMOV AHAH , , 25H25H

MOVMOV ALAL ,, 61H61H

INTINT 21H21H

LEALEA DXDX ,, I62I62 ;设置;设置 62H62H 软中断向量软中断向量MOVMOV AXAX ,, SEG I62SEG I62

MOVMOV DSDS ,, AXAX

上 一 页

Page 55: 第 6 章  应用系统开发

第 6章 应用系统开发

MOVMOV AHAH ,, 25H MOVAL25H MOVAL ,, 62H62H

INTINT 21H21H

LEALEA DXDX ,, I63I63 ;设置;设置 63H63H 软中断向量软中断向量MOVMOV AXAX ,, SEG I63 MOVSEG I63 MOV DSDS ,, AXAX

MOVMOV AHAH ,, 25H MOV25H MOV ALAL ,, 63H63H

INTINT 21H POP21H POP DSDS ;; DSDS 出栈出栈STISTI ;开中断;开中断MOVMOV DIDI ,, 80008000

上 一 页

Page 56: 第 6 章  应用系统开发

第 6章 应用系统开发DELAYDELAY :: MOVMOV SISI ,, 150150

INTINT 60H60H ;调用;调用 60H60H 中断,使程序进入中断,使程序进入DELAY1DELAY1 :: DECDEC SISI ;循环状态;循环状态JNZJNZ DELAY1 DECDELAY1 DEC DIDI

JNZJNZ DELAYDELAY

POPPOP DXDX ;恢复定时器控制(;恢复定时器控制( ICHICH )中断向量)中断向量POPPOP DS MOVDS MOV ALAL ,, 1CH1CH

MOVMOV AHAH ,, 25H INT25H INT 21H21H

MOVMOV AHAH , , 00 ;显示器恢复文本状态;显示器恢复文本状态

上 一 页

Page 57: 第 6 章  应用系统开发

第 6章 应用系统开发

MIVMIV ALAL ,, 3 INT3 INT 10H 10H

RET STARRET STAR ENDPENDP

;;RINGRING PROCPROC FARFAR ;定时器中断服务程序;定时器中断服务程序PUSHPUSH DS PUSHDS PUSH AXAX

MOVMOV AXAX ,, DATADATA

MOVMOV DSDS ,, AX STIAX STI

INCINC D20D20 ;计数单元加;计数单元加 11

上 一 页

Page 58: 第 6 章  应用系统开发

第 6章 应用系统开发B11B11 :: POP AXPOP AX

POPPOP DSDS

IRETIRET ;中断服务结束返回;中断服务结束返回RINGRING ENDPENDP

;;I60I60 PROCPROC FARFAR ;; 60H60H 中断服务程序完成对中断服务程序完成对

PUSHPUSH AXAX ;; 61H61H 和和 62H62H 中断的调用中断的调用PUSHPUSH DXDX

LEALEA DXDX ,, D1D1 ;显示‘;显示‘ intel 80486 DXintel 80486 DX

上 一 页

Page 59: 第 6 章  应用系统开发

第 6章 应用系统开发2/66 CPU‘ MOV2/66 CPU‘ MOV AHAH ,, 99

INTINT 21H21H

CMPCMP D20D20 ,, 22 ;中断延时到否?;中断延时到否?JNEJNE C11C11 ;到,则转置;到,则转置 C11C11

MOVMOV D20D20 ,, 00 ;否则使;否则使 D20D20 清清 00

INTINT 61H61H ;用发声中断;用发声中断 INT 61HINT 61H

INTINT 62H62H ;用延时绘图中断;用延时绘图中断 INT 62HINT 62H

C11C11 :: POPPOP DXDX

POPPOP AXAX

上 一 页

Page 60: 第 6 章  应用系统开发

第 6章 应用系统开发IRETIRET ;中断服务结束返回;中断服务结束返回I60I60 ENDPENDP

;;I61I61 PROCPROC FARFAR ;声中断:;声中断: INT 61HINT 61H

PUSHPUSH AX PUSHAX PUSH CXCX

PUSHPUSH DXDX

MOVMOV DXDX ,, 140H140H ;置发音持续时间;置发音持续时间ININ ALAL ,, 61H61H ;; 8255A PB 8255A PB 口内容到口内容到 ALAL

ANDAND ALAL ,, 11111100B11111100B ;; LL 的的 DD11DD00 位置位置 00

上 一 页

Page 61: 第 6 章  应用系统开发

第 6章 应用系统开发

L1L1 ::XORXOR ALAL ,, 00000010B00000010B ;; LL 的的 D1D1 取反取反OUTOUT 61H61H ,, ALAL ;; LL 送送 PBPB 口,控制扬声器发声口,控制扬声器发声MOVMOV CXCX ,, 0F600H0F600H ;置方波信号频率变换时;置方波信号频率变换时间常数间常数L2L2 :: LOOPLOOP L2 DECL2 DEC DXDX

JNZJNZ L1 POPL1 POP DXDX ;恢复现场;恢复现场POPPOP CX POPCX POP AXAX

IRETIRET

I61I61 ENDPENDP

上 一 页

Page 62: 第 6 章  应用系统开发

第 6章 应用系统开发;;I62I62 PROCPROC FARFAR ;延时调用绘图中断;延时调用绘图中断 INT 63HINT 63H

PUSHPUSH CX PUSH DX MOVCX PUSH DX MOV DXDX ,, 40H40H

K1K1 :: MOVMOV CXCX ,, 440H440H

K2K2 :: LOOPLOOP K2 DECK2 DEC DXDX

JNZJNZ K1K1

INTINT 63H63H ;调用软中断;调用软中断 63H63H

POPPOP DX POPDX POP CX IRETCX IRET

I62I62 ENDPENDP

上 一 页

Page 63: 第 6 章  应用系统开发

第 6章 应用系统开发;;I63I63 PROCPROC FARFAR ;绘图中断程序;绘图中断程序 INT 63HINT 63H

PUSHPUSH AX PUSHAX PUSH BXBX

PUSHPUSH CX PUSHCX PUSH DXDX

PUSHPUSH DS MOVDS MOV AHAH ,, 00

MOVMOV ALAL ,, 12H12H ;设置显示模式;设置显示模式 44 (图形(图形方式方式 320*200320*200 ))INTINT 10N10N

MOVMOV ALAL ,, 11 ;设图形色号;设图形色号A0A0 :: MOVMOV DXDX ,, 11 ;设置图形起点行坐标;设置图形起点行坐标DX=10DX=10

上 一 页

Page 64: 第 6 章  应用系统开发

第 6章 应用系统开发MOVMOV D3D3 ,, 11 ;设图形第一行点数;设图形第一行点数 D3=1D3=1

MOVMOV CXCX ,, 320320 ;设图形起点列坐标;设图形起点列坐标 CX=160CX=160

A1A1 :: PUSHPUSH CXCX ;入栈保护;入栈保护 CXCX

PUSHPUSH D3D3

A2A2 :: MOVMOV AHAH ,, 1212

PUSHPUSH AXAX

INTINT 10H10H ;写点(;写点( 1212 号功能调用)号功能调用)POPPOP AXAX

INTINT CXCX ;修改写点列坐标;修改写点列坐标 CX=CX+1CX=CX+1

上 一 页

Page 65: 第 6 章  应用系统开发

第 6章 应用系统开发

SUBSUB D3D3 ,, 11 ;修改写点计数;修改写点计数 D3=D3=D3-1D3-1

JNZJNZ A2A2 ;判断;判断 D3=0D3=0 ?非?非 00 到到 A2A2

POPPOP D3D3 ;; D3=0D3=0 ,, D3D3 出栈出栈ADDADD D3D3 ,, 22 ;; D3=D3+2D3=D3+2 修改点修改点数数POPPOP CXCX ;; CXCX 出栈出栈INCINC DXDX ;; DX=DX+1DX=DX+1 (起点行坐(起点行坐标)标)

DECDEC CXCX ;; CX=CX-1CX=CX-1 (起点列坐(起点列坐标)标)JNEJNE A1A1 ;; CX=0CX=0 ?非?非 00 到到 A1A1

JNCJNC ALAL ;; CX=0CX=0 ,, AL=AL+1AL=AL+1

上 一 页

Page 66: 第 6 章  应用系统开发

第 6章 应用系统开发CMPCMP ALAL ,, 44 ;; AL=4AL=4 ??JNEJNE A0A0 ;非,转到;非,转到 A0A0

MOVMOV AHAH ,, 00 ;设置文本;设置文本 80*2580*25模式模式MOVMOV ALAL ,, 33

INTINT 10H10H

POPPOP DSDS ;恢复现场;恢复现场POPPOP DXDX

POPPOP CXCX

POPPOP BXBX

上 一 页

Page 67: 第 6 章  应用系统开发

第 6章 应用系统开发

POPPOP AXAX

IRETIRET

I63I63 ENDPENDP

;; CODECODE ENDSENDS

ENDEND STARSTAR ;结束;结束

上 一 页 返回本节

Page 68: 第 6 章  应用系统开发

第 6章 应用系统开发

Thank you very much !

返回本章首页结 束

本章到此结束,谢谢您的光临!