1、4、显示时间子程序:将计时单元的二进制转换为十进制数加以显示。参考资料:1微型计算机接口技术及应用2汇编语言程序设计3微型计算机汇编语言程序设计一、教科书中关于IBM-PC/XT机系统硬件的内容,包括8250(串行口控制器),8253,8255,8259等。二、DOS系统功能调用。INT 21H1、显示显示单个字符入参: AH=02HDL=字符ASCII值出参: 无显示字符串 AH=09HDS:DX 此寄存器对指向内存中字符串的首地址,字符串以$结束2、键盘检查键盘状态 AH=0BH AL=00H无输入 0FFH有一字符读键盘字符 AH=08H AL=字符ASCII值3、其它退出程序,返回系统
2、 AH=4CH取中断矢量 AH=35H AL=中断类型号 出参: ES:BX 中断矢量,ES为段地址,BX为偏移地址置中断矢量 AH=25H DS:DX 中断矢量,DS为段地址,DX为偏移地址三、BIOS屏幕功能调用。INT 10H1、清屏操作MOV AX,0600HMOV CX,0000HMOV DX,184FHMOV BH,07HINT 10H2、移动光标MOV AH,02HMOV DH,* ;*为目的地行数(0-24)MOV DL,* ;*为目的地列数(0-79)MOV BH,00H3、禁止光标显示MOV AH,01HMOV CX,2000H4、恢复光标显示MOV CX,0C0DH本程序
3、由西南科技大学信息工程学院通信08级 电子测试实验室 李同学提供,包含全部操作过程 源代码解释说明 stack segment stack dw 64 dup(?)stack ends showline macro STR,STA,LEN,POS,COL ;显示字符串宏 push DX push BX push AX mov BP,OFFSET STR ;显示起始位置 add BP,STA ;第几个开始 mov DX,POS ;位置 mov CX,LEN ;长度 mov BX,COL ;颜色 mov AX,1301H ;字符串显示中断 int 10H pop AX pop BX pop DXe
4、ndm delay macro ;延时一秒 local dloop push ax push bx push dx mov ah,00H ;BIOS调用 int 1aH add dl,18 ;定时1s,需要18个定时单位 mov bl,dldloop: mov ah, 00H int 1ah cmp dl,bl ;是否累计到1s jnz dloop ;没到,继续读 pop dx pop bx pop axdata segment ;数据定义 time db 20 times db 20 buf db 00 ;定义交通路口 table01 db | | N table02 db | | tabl
5、e03 db table04 db table05 db table06 db W | | E table07 db _ _ table08 db table09 db table10 db table11 db table12 db table13 db table14 db | |S str db please input times: strcl db flg db 0 data ends code segment assume cs:code, ds:datamain proc far ;主函数 mov ax, data mov ds, ax mov es, ax mov ah,01h
6、 ;清除光标 mov cx,2000h int 10h call initial funct: mov al,times mov time,alN1: call showtime call getchar cmp al,r调整时间 jne loop1 call changtime jmp functloop1:a手动/自动控制状态 jne loop2 call openclose loop2:b夜间模式 jne loop3 call nightloop3:t紧急模式 jne loop4 call tenseloop4:q退出 jne N1 esc: mov ah,4ch int 21h ten
7、se proc near mov time,0 mov flg,1 call timebuf showline buf,0,2,0514h,0004h ;红灯 ;紧急情况 showline buf,0,2,0e10h,0004h ;红灯 showline buf,0,2,080bh,0004h ;红灯 showline buf,0,2,0c19h,0004h ;tn2:紧急控制按钮是否按下 jne tn1tn1:退出控制按钮是否按下 jne tn2 jmp esc rettense endp night proc near call timebuf showline buf,0,2,0514h
8、,000eh ;黄灯 ;夜间显示控制 showline buf,0,2,0e10h,000eh ;黄灯 showline buf,0,2,080bh,000eh ;黄灯 showline buf,0,2,0c19h,000eh ;ng2:夜间控制按钮是否按下 jne ng1ng1: jne ng2 night endp openclose proc near ;开关子函数 mov time,0 op: mov flg,0 call showd op4: call getchar ;调用输入控制字符o手动控制下开 jne op1 jmp opop1:c手动控制下关 jne op2 call sh
9、owdop2: jne op3 ; jmp esc op3: jne op4 ;手动/自动控制 jmp funct openclose endp changtime proc near ;改变时间子函数 showline strcl,0,2,0043h,000fh showline str,0,19,0030h,000fh mov ah,01h int 21h sub al,30h ;将输入时间值转化成 mov bl,10 输出十进制值 mul bl mov times,al sub al,30h add times,al mov time,al changtime endp showtime
10、 proc near ;时钟程序s1: int 16h jnz s3 delay ;延时一秒 dec time cmp time,-1 jne s2 ;倒计时 inc flg cmp flg,2 jne s2s2: jmp s1s3: retshowtime endp showd proc near cmp flg,0 jne d1 showline buf,0,2,0514h,0002h ;绿灯 showline buf,0,2,0e10h,0002h ; jmp d2d1: showline buf,0,2,080bh,0002h ; showline buf,0,2,0c19h,0002
11、h ;d2:showd endp timebuf proc near ;显示时间 time=buf mov di,offset buf mov al,time mov bl,0ah mov ah,00h div bl add al,30h add ah,30h mov di0,al mov di1,ah timebuf endpgetchar proc near ;得到字符 mov ah,07hgetchar endp initial proc near ;初始化交通路口的显示 showline table01,0,38,0000h,15 showline table02,0,38,0100h
12、,15 showline table03,0,38,0200h,15 showline table04,0,38,0300h,15 showline table05,0,38,0400h,15 showline table06,0,38,0500h,15 showline table07,0,38,0600h,15 showline table08,0,38,0d00h,15 showline table09,0,38,0e00h,15 showline table10,0,38,0f00h,15 showline table11,0,38,1000h,15 showline table12,0,38,1100h,15 showline table13,0,38,1200h,15 showline table14,0,38,1300h,15initial endp code ends end main
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1