当前位置:文档之家› 桂电微机实验a所用程序

桂电微机实验a所用程序

1,字符串小于6时,六分频DATA SEGMENTBUF DB 20DB ?DB 20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA,START:MOV AX, DATAMOV DS, AXMOV AH, 0AHLEA DX, BUF ;键盘输入到缓存区INT 21HLEA SI,BUFMOV AL,[SI+1]CMP AL,6JAE LMOV AL,36HMOV DX,283HOUT DX,ALMOV AX,1000MOV DX,280HOUT DX,ALMOV AL,AHOUT DX,ALMOV AL,76HMOV DX,283HOUT DX,ALMOV AX,167MOV DX,281HOUT DX,ALMOV AL,AHOUT DX,ALL:MOV AH,4CHINT 21HCODE ENDSEND START2,8255 显示第一个字母的ASSII 码X;输入一串字符然后用8255 显示第一个字母的ASSII 码用开关来控制显示和不显示DATA SEGMENTBUF DB 20 ;最大输入字符串字符数DB ? ;实际输入字符数DB 20 DUP(?) ;字符缓存,从这里开始存放输入的字符串,偏移地址为2 DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV DX,28BH ;8255 配置MOV AL,80H ;方式0,C口输出OUT DX,AL ;配置成功MOV DX,OFFSET BUFMOV AH,0AH ;0A 号功能输入一串字符INT 21HLEA BX,BUFMOV DX,28AHMOV AL,[BX+2] ;前面说了第一个字符的偏移地址为2OUT DX,ALMOV AX,4C00HINT 21HCODE ENDSEND START3、8255灯闪烁;37dengliangCODE SEGMENTASSUME CS:CODESTART:MOV DX,28BH;初始化MOV AL,80HOUT DX,ALMOV CX,10;循环次数SS1:MOV DX,28AH;A端口MOV AL,88H;全部亮OUT DX,ALCALL DELAY;调用延时MOV DX,28AH;C口OUT DX,ALCALL DELAYLOOP SS1MOV AH,4CHINT 21HDELAY PROC NEARPUSH CXPUSH DIMOV CX,1000Y1: MOV DI,9000X1: DEC DIJNZ X1LOOP Y1POP DIPOP CXRETDELAY ENDPCODE ENDSEND START4、a+b显示结果CODE SEGMENTASSUME CS:CODESTART:MOV DX,28BH ;8255 控制寄存器设置MOV AL,80H ;配置为 A 口 C 口均为方式0 的输出模式,实验中你用哪个口都OK OUT DX,AL ;实现配置MOV AH,01H ;DOS 01 号功能输入数字1INT 21HSUB AL,30H ;ASCII 码转成实际数字MOV BL,AL ;将输入结果暂存在BL 中,因为后面输入还用到ALMOV AH,01H ;输入数字2INT 21HSUB AL,30HADD BL,AL ;两数相加结果存放在BL 中MOV DX,28AH ;A 口地址OUT DX,AL ;数据送到8255A 口进行显示MOV AH,02H ;输出回车MOV DL,0DHINT 21HMOV AH,02H ;换行,为屏幕输出结果准备下MOV DL,0AHINT 21HCMP BL,10 ;判断和是否大于10JB DISPSUB BL,10 ;大于10 的数减去10 就只剩下了个位MOV AH,02H ;02 号功能输出十位1MOV DL,1+30HINT 21HDISP:ADD BL,30HMOV AH,02H ;02 号功能输出个位MOV DL,BLINT 21HMOV AX,4C00HINT 21H ;返回到DOSCODE ENDSEND START5、X大于等于y减6;当X>=Y-6时,用8255使LED灯闪烁。

CODE SEGMENTASSUME CS:CODEMAIN:MOV DX,28BH ;8255 初始化MOV AL,80HOUT DX,ALMOV AH,1 ;输入第一个字符YINT 21HMOV BL,AL ;暂存第一个字符在BLSUB BL,6MOV AH,1 ;输入第二个字符XINT 21HCMP AL,BL ;比较第一个字符和第二个字符的大小JB STOP ;如果小于,则跳转MOV CX ,100LED:MOV AL,0FFH ;1000 0000 PA7输出高电平MOV DX,28AHOUT DX,ALCALL DELAYMOV AL,00H ;1000 0000 PA7输出低电平MOV DX,28AHOUT DX,ALCALL DELAYJMP LED ;用loop野性STOP:MOV AX,4C00HINT 21HDELAY PROC NEARPUSH CXPUSH DIMOV CX,100HY1: MOV DI,1000HX1: DEC DIJNZ X1LOOP Y1POP DIPOP CXRETDELAY ENDPCODE ENDSEND MAIN6,X小于yokX;用键盘输入两个字符XY,若X<Y,则通过8255 点亮一盏LED,否则熄灭LED。

CODE SEGMENTASSUME CS:CODEMAIN:MOV DX,28BH ;8255 初始化MOV AL,80HOUT DX,ALMOV AH,01H ;输入第一个字符INT 21HMOV BL,AL ;暂存第一个字符在BLMOV AH,01H ;输入第二个字符INT 21HCMP BL,AL ;比较第一个字符和第二个字符的大小JB BELOW ;如果小于,则跳转MOV AL,00H ;如果大于,则熄灭LEDMOV DX,28AHOUT DX,ALJMP EXITBELOW:MOV AL,0FFH ; quan点亮LEDMOV DX,28AH ;C口OUT DX,ALEXIT:MOV AH,4CHINT 21HCODE ENDSEND MAIN7、流水灯CODE SEGMENTASSUME CS:CODESTART: MOV DX,28AHMOV AL,80HOUT DX,ALMOV CX,00FFHMOV BL,80HL1: MOV DX,28AHMOV AL,BLOUT DX,ALCALL DELAYROL BL,1LOOP L1QUIT:MOV AH,4CHINT 21HDELAY PROC NEARPUSH CXPUSH DIMOV CX,1000Y1: MOV DI,9000X1: DEC DIJNZ X1LOOP Y1POP DIPOP CXRETDELAY ENDPCODE ENDSEND START8、输入两个字符相同XDATA SEGMENTSTRI DB 0DH,0AH,'NO MATCH$'DATA ENDSCODE SEGMENTASSUME DS:DATA,CS:CODESTART:MOV AX,DATAMOV DS,AXMOV DX,28BH ;8255 控制寄存器设置MOV AL,80H ; A 口、C 口均为方式0 的输出模式,实验中你用哪个口都OK OUT DX,AL ;实现配置MOV AH,01H ;输入第一个字符INT 21HMOV BL,AL ;结果暂存在BL 中MOV AH,01H ;输入第二个字符INT 21HCMP BL,AL ;两个字符相比较JZ MATCH ;相等则用8255 输出到LED;如果不相等则输出下面的字符串MOV DX,OFFSET STRI ;获取NO MATCH 字符的偏移地址MOV AH,09H ;调用09 号功能输出字符串INT 21HJMP ENDCMATCH:MOV DX,28AHMOV AL,BLOUT DX,AL;使用8255 A 口输出ENDC:MOV AH,4CHINT 21HCODE ENDSEND START9、输入量字符小的屏幕显示大的led;键盘输入两个数字,比较大小,小的再屏幕显示,大的通过8255 用发光二极管显示。

CODE SEGMENTASSUME CS:CODESTART:MOV DX,28BH ;8255 配置MOV AL,80H ;A 口输出模式OUT DX,AL ;配置完成MOV AH,01H ;01 号功能输入第一个数字INT 21HMOV BH,AL ;结果暂存MOV AH,01H ;输入第二个数字INT 21HMOV BL,AL ;结果暂存CMP BL,BH ;两数比较JB BELOW;如果BL 不小于BH,则BL,BH 交换MOV AL,BLMOV BL,BHMOV BH,ALBELOW :MOV AH,02H ;显示回车换行为输出结果准备MOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HMOV AH,02H ;02 功能显示小值MOV DL,BLINT 21HSUB BH,30H ;输出实际大小MOV DX,28AH ;用A 口输出大的值MOV AL,BHOUT DX,AL ;输出MOV AX,4C00HINT 21HCODE ENDSEND START10、小写转大写屏蔽数字DATA SEGMENTMSG1 DB 'INPUT STRING:$'MSG2 DB 'OUTPUT STRING:$'MSG3 DB 0DH,0AH,'$' ;或MSG3 DB 13,10,'$'回车换行BUF DB 30DB ?DB 30 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX ;数据段初始化LEA DX,MSG1 ;或MOV DX,OFFSET MSG1,提示输入字符MOV AH,09H ;字符串输出INT 21HMOV DX,OFFSET BUF ;或LEA DX,BUFMOV AH,0AH ;字符串输入INT 21HLEA DX,MSG3 ;回车换行MOV AH,09HINT 21HLEA DX,MSG2 ;提示输出结果MOV AH,09HINT 21HMOV SI,OFFSET BUF ;LEA SI,BUF SI指针取字符MOV CL,[SI+1] ;SI+1存的是字符串实际长度MOV CH,00HCMP CX,00H ;目标-源,结果不回送,只根据运算结果置标志位JZ STOP ;结果为0(ZF=1)跳转,判断字符串长度是不是0ADD SI,2 ;实际存放字符串的开始NEXT: MOV AL,BYTE PTR[SI] ;字符类型判断CMP AL,30H ;和a比较JB NEXT1 ;低于(CF=1)跳转CMP AL,39H ;和z比较JA NEXT1 ;高于跳转INC SILOOP NEXTNEXT1:CMP AL,61H ;和a比较JB NEPA ;低于(CF=1)跳转CMP AL,7AH ;和z比较JA NEPA ;高于跳转SUB AL,20H ;小写转换成大写MOV BYTE PTR[SI],ALNEPA: MOV AH,02HMOV DL,[SI] ;输出结果INT 21HINC SILOOP NEXTSTOP: MOV AH,4CH ;返回DOS INT 21HCODE ENDSEND START11、去缔几个字符位数字DATA SEGMENTSTRING1 DB 'Press any keys please: ', 10, 13, 24H STRING2 DB 13, 10, 'The string is: ', 10, 13, 24H BUF1 DB 20DB ?DB 20 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, ES:DATA START:MOV AX, DATAMOV DS, AXL:MOV AH, 09H ;输入提示LEA DX, STRING1INT 21HMOV AH, 0AHLEA DX, BUF1 ;键盘输入到缓存区INT 21HMOV AH, 09H ;输出提示LEA DX, STRING2INT 21HLEA SI, BUF1 ;键盘输入缓存区;MOV CL, [SI] ;取出实际输入个数;MOV CH, 0L3:MOV AH, 02H ; 显示MOV DL, [SI+3];显示第2个字符INT 21HINC SICMP DL,30HJBE EXITCMP DL,39HJAE EXITMOV DX,28BHMOV AL,80HOUT DX,ALMOV CX,00FFHMOV BL,80HLL: MOV DX,28AHMOV AL,BLOUT DX,ALCALL DELAYROR BL,1LOOP LLQUIT:MOV AH,4CHINT 21HDELAY PROC NEARPUSH CXPUSH DIMOV CX,1000 Y1: MOV DI,9000 X1: DEC DIJNZ X1LOOP Y1POP DIPOP CXRETDELAY ENDPEXIT:MOV AH, 4CHINT 21H CODE ENDSEND START。

相关主题