当前位置:文档之家› 8086汇编经典例程

8086汇编经典例程

==========================================5.编写一个数组排序(从小到大)的小程序,数组在程序中定义,程序先将原数组显示一遍,然后排序,再将排好序的数组显示一遍。

==========================================AAA SEGMENTBUF DB '45$'L = $ - BUFary dw -897,345,6789,8654,-1234,-3456,-99,-678,987,567,32762,-12121,0,3434,4645,-234,23455,-100,100,1000,-1000dw 572,-2345,-6543,-1234,9999|len dw ($-ary)/2ASSUME CS:AAA, DS:AAAMAIN PROC FARPUSH CSPOP DSLEA SI,ARYMOV CX,LENNEXT3: MOV BX,[SI]CALL DISPCALL SPACE-ADD SI,2LOOP NEXT3CALL CRLFCALL CRLFLEA SI,ARYMOV CX,LENCALL SORTLEA SI,ARYMOV CX,LENNEXT5: MOV BX,[SI]CALL DISP…CALL SPACEADD SI,2LOOP NEXT5MOV AH,4CHINT 21HMAIN ENDPDISP PROCPUSH SIPUSH AXPUSH BX!PUSH DXPUSH CXMOV CX,0CMP BX,0JNL NEXT1NEG BXMOV CX,1NEXT1: LEA SI,BUF+l-1MOV AX,BXMOV BX,10NEXT: MOV DX,0}DIV BXADD DL,30HDEC SIMOV [SI],DLCMP AX,0JNE NEXTCMP CX,0JE NEXT2DEC SIMOV BYTE PTR [SI],'-'NEXT2: MOV DX,SI!MOV AH,9INT 21HPOP CXPOP DXPOP BXPOP AXPOP SIRETDISP ENDPSORT PROC(NEXTT: PUSH CXMOV DI,SIMOV AX,[SI]NEXT0: CMP AX,[DI]JL NEXTQMOV BX,AXMOV AX,[DI]MOV [DI],BXNEXTQ: ADD DI,2LOOP NEXT0MOV [SI],AX…ADD SI,2POP CXLOOP NEXTTRETSORT ENDPCRLF PROCPUSH AXPUSH DXMOV DL,13MOV AH,2|INT 21H MOV DL,10 INT 21H POP DXPOP AXRET CRLF ENDPSPACE PROCPUSH AXPUSH DX】MOV DL,' 'MOV AH,2INT 21HPOP DXPOP AXRETSPACE ENDPAAA ENDSEND MAIN===============================================6.!7.编写一个程序,从键盘输入10个十进制数字字符,然后将这些数字加密存储在缓冲区BUFFER中。

加解密表如下:==========================================qqq segmentTAB1 DB 'QWERTYUIOPASDFGHJKLZXCVBNM'TAB2 DB 'qazwsxedcrfvtgbyhnujmikolp'TAB3 DB ')(*&^%/#@!'LEN = $-tab1MSS1 DB 13,10,'Please chose afunctioc:',0DH,0AHDB ' 1--jiami ',0DH,0AHDB ' 2---jiemi ',13,10…DB ' 0--exit$'MSS2 DB 0dh,0ah,'Error! You have press " "key!$'MM1 DB 'Your input is:'BUF1 DB 255 DUP()MM2 DB 'My output is:'BUF2 DB 255 DUP()qqq endsccc segmentassume cs:ccc,ds:qqqmain proc far;start: mov ax,qqqmov ds,axrep1: call crlfLEA SI,BUF1LEA DI,BUF2lea dx,mss1 ;显示菜单mov ah,9int 21hmov ah,1 ;输入你的选项int 21h#cmp al,'0' ;输入0,结束je quitcmp al,'1' ;输入1,加密je jiamicmp al,'2' ;输入2,解密je jiemimov [mss2+25],al ;其他字符,错误,重输入lea dx,mss2mov ah,9int 21hjmp rep1#quit: mov ah,4chint 21hjiami: call crlfnext1: mov ah,1int 21hcmp al,27je NEXT14MOV [SI],ALcmp al,'A'jnae next3]cmp al,'Z'ja next3sub al,'A'lea bx,tab1jmp next10next3: cmp al,'a'jnae next4cmp al,'z'ja next4sub al,'a'lea bx,tab2·jmp next10next4: cmp al,'0'jb next13cmp al,'9'ja next13lea bx,tab3sub al,'0'next10: xlatnext13: MOV [DI],ALINC SIINC DI:jmp next1next14: MOV BYTE PTR [SI],24H MOV BYTE PTR [DI],24HCALL CRLFLEA DX,MM1MOV AH,9INT 21HCALL CRLFLEA DX,MM2INT 21HJMP REP1~jiemi: call crlf next18: mov ah,1int 21hcmp al,27je NEXT14MOV [SI],ALmov bx,0next20: cmp al,tab1[bx]je next22inc bx、cmp bx,62jb next20jmp next40next22: cmp bx,26jae next23mov al,'A'add al,bljmp next40next23: cmp bx,52jae next24sub bl,26—mov al,'a'add al,bljmp next40next24: sub bl,52mov al,'0'add al,blnext40: MOV [DI],ALINC SIINC DIjmp next18main endp]crlf procpush axpush dxmov ah,2mov dl,13int 21hmov dl,10int 21hpop dxpop ax。

retcrlf endpccc endsend start==========================================8.编写一个发声的小程序,通过程序使PC喇叭发出声音==========================================PROG SEGMENTMAIN PROC FARASSUME CS:PROG,DS:PROG…START: MOV DX,0000 ;计产生"1","0"次数IN AL,61H ;取得设备控制字AND AL,0FCH ;使AL最低两位为"0"CHANG: XOR AL,3 ;改变输出值OUT 61H,AL;输出到61H端口,扬声器发声MOV CX,00H ;延时计数器WAIT1: LOOP WAIT1 ;延时DEC DXJNE CHANGMOV AH,4CH-INT 21H ;返回系统PROG ENDSEND START==========================================9.编写一个唱歌的小程序,通过程序使PC喇叭发出声音演奏歌曲==========================================;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽有只小羔羊”;;按大写字母“B”,唱乐曲“太湖船”;按大写字母“C”,唱乐曲“祝福歌”;按"Q"鍵,退出—DATA SEGMENT PARA 'DATA'INFO1 DB 0DH,0AH,'WELCOME TO COME HERE!$'INFO2 DB 0DH,0AH,'this is a music program!$' INFO3 DB 0DH,0AH,'please select!$'INFO4 DB 0DH,0AH,'INPUT ERROR!$'INFO5 DB 0DH,0AH,'PLEASE INPUT AGAIN!$'MUSLIST DB 0DH,0AH,'A MUSIC1'DB 0DH,0AH,'B MUSIC2'DB 0DH,0AH,'C MUSIC3'?DB 0DH,0AH,'Q EXIT'DB 0DH,0AH,'$'MUS_FREG1 DW 330,294,262,294,3 DUP (330)DW 3 DUP (294),330,392,392DW 330,294,262,294,4 DUP (330) DW 294,294,330,294,262,-1 MUS_TIME1 DW 6 DUP (25*8),50*8DW 2 DUP (25*8,25*8,50*8)DW 12 DUP (25*8),100*8—MUS_FREG2 DW 330,392,330,294,330,392,330,294,330DW 330,392,330,294,262,294,330,392,294DW 262,262,220,196,196,220,262,294,332,262,-1MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100DW 2 DUP(50,50,25,25),100DW 3 DUP(50,25,25),100:MUS_FREG3 DW 262,262,294,262,349DW 330,262,262,294,262DW 392,349,262,262,523DW 440,349,262,262,466DW 466,440,262,392,349,-1MUS_TIME3 DW 50,50,100,100,100DW 100,100,50,50,100,100DW 100,100,100,50,50,100DW 100,100,100,100,100,50DW 50,100,100,100,100,100{DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 200 DUP ('STACK')STACK ENDS;*****定义一个宏*****SHOW MACRO bLEA DX,bMOV AH,9、INT 21HENDM;**********************CODE SEGMENTASSUME DS:DATA, SS:STACK, CS:CODEMAIN PROC FARMOV AX,DATAMOV DS,AXMOV AH, 0 ;0号功能MOV AL,4 ;显示方式号4放在-;AL中320*200四色图形INT 10H ;显示器输出控制中断调用MOV AH,0BH ;置彩色调色板MOV BH,0MOV BL,1 ;BH=0,BL=4,背景色为红色INT 10H ;显示器输出控制中断调用MOV AH,0BHMOV BH,01HMOV BL,00INT 10H ;显示器输出控制中断调用show INFO1;show INFO2show INFO3show MUSLISTINPUT: MOV AH,01HINT 21HCMP AL,'Q'JZ retuCMP AL,'A'JNZ B0LEA SI,MUS_FREG1LEA BP,DS:MUS_TIME1~CALL MUSICJMP EXIT1B0: CMP AL,'B'JNZ C0LEA SI,MUS_FREG2LEA BP,DS:MUS_TIME2 CALL MUSICJMP EXIT1C0: CMP AL,'C'JNZ exitLEA SI,MUS_FREG2…LEA BP,DS:MUS_TIME2 CALL MUSICEXIT1: show INFO5JMP INPUTEXIT: call clearshow INFO4show INFO5show INFO1show INFO2show INFO3show MUSLIST%jmp inputRETU: MOV AH,4CHINT 21HMAIN ENDPMUSIC PROC NEARFREG1: MOV DI,[SI]CMP DI,-1JE END_MUS1MOV DX,DS:[BP]MOV BX,1400*CALL GENSOUNDADD SI,2ADD BP,2JMP FREG1END_MUS1: RETMUSIC ENDPGENSOUND PROC NEARPUSH AXPUSH BXPUSH CX|PUSH DXPUSH DIMOV AL,0B6HOUT 43H,ALMOV DX,12HMOV AX,533H*896DIV DIOUT 42H,ALMOV AL,AHOUT 42H,ALIN AL,61H}MOV AH,ALOR AL,3OUT 61H,ALWAIT1: MOV CX,8FF0HDELAY1: LOOP DELAY1DEC BXJNZ WAIT1MOV AL,AHOUT 61H,ALPOP DIPOP DX:POP CXPOP BXPOP AXRETGENSOUND ENDPclear proc nearpush axpush bxpush cxpush dx$mov ah,6mov al,0mov ch,0mov cl,0mov dh,24mov dl,79mov bh,7int 10hpop dxpop cxpop bx{pop axretclear endpCODE ENDSEND MAIN==========================================10.编写一个通过键盘输入你的名字,然后在屏幕上显示,“hello, 你的名字!”的程序。

相关主题