2-1DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVSI,3500H;设置待转换数据区的地址指针MOVDI,3510H;设置结果数据区的地址指针MOVBX,000AH;乘数10MOVCX,0004H;循环4次MOVAH,00HMOVAL,[SI];取第一位ASCⅡ码SUBAL,30H;转换成二进制数A1:IMULBX;乘10ADDAL,[SI01];加次位SUBAL,30HINCSI;修改地址指针LOOPA1;循环MOV[DI],AX;保存结果INT3H;此处输入代码段代码MOVAH,4CHINT21HCODESENDSENDSTART2-2DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVCX,0005H;循环计数器赋初值MOVDI,3500H;ASCⅡ码首址A1:MOVBL,0FFH;将错误标志送入BLMOVAL,[DI];送ASCⅡ码至ALCMPAL,3AH;比较AL与3AJNBA2;不低于3A则转A2SUBAL,30H;低于3A则取ASCⅡ码低4位JBA2;低于30则转A2MOVBL,AL;否则AL
送入BL,取代FFA2:MOVAL,BL;结果或错误标志送入ALMOV[DI0AH],ALINCDILOOPA1INT3HCODESENDSENDSTART2-5DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,0B07HMOVDS,AXMOVDI,3000HMOVDX,9111HMOVCX,2222HTESTDH,80HJZ LPXORDX,7FFFHNOTCXADCCX,1ADCDX,0LP: MOV[DI],CLMOV[DI1],CHMOV[DI2],DLMOV[DI3],DHINT3INT3HCODESENDSENDSTART3DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVCX,10HMOVSI,3000HMOVDI,3010HCMPSI,DIJAA2ADDSI,CXADDDI,CXDECSIDECDIA1:MOVAL,[SI]MOV[DI],ALDECSIDECDIDECCXJNEA1JEA3 A2:MOVAL,[SI]MOV[DI],ALINCSIINCDIDECCXJNEA2A3: INT3HCODESENDSENDSTART4-1DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVDX,01HMOVBL,02HA1:MOVAL,BLINCBLMULBLADDDX,AXCMPAX,0C8HJBEA1INT3HCODESENDSENDSTART4-2DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVDI,3000HMOVCX,[DI]MOVCH,00HMOVBL,00HINCDIA1:MOVAX,[DI]CMPAX,0000HJGEA2INCBLA2:INCDILOOPA1MOV[DI],BLINT3HCODESENDSENDSTART5-1DATASSEGMENTAADB0D9H,07H,8BH,0C5H,0EBH,04H,9DH,0F9H;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESEGMENTASSUMECS:CODE,DS:DATAS,SS:STACKSSUB1PROCNEARCMPCX,0JEA4DECCXMOVBH,[SI]MOVBL,BHA1:INCSIMOVAL,[SI]CMPAL,BHJAEA2CMPAL,BLJBEA3JMPA4A2:MOVBH,ALJMPA4A3:MOVBL,ALA4:LOOPA1RETSUB1ENDPSTART:MOVAX,DATASMOVDS,AXMOVSI,OFFSETAAMOVCX,0008HCALLNEARPTRSUB1MOVAH,BHMOVAL,BLINT3CODEENDSENDSTART实验6DATASSEGMENTORG3000HVARDB11H,0d3H,77H,6bH,0BH,33H,0aaH,21H,0ffH,67H;此处输入数据段代码DATASENDSSTACKSSEGMENTDW100DUP(?);此处输入堆栈段代码STACKSENDSCODESSEGMENTASSUMECS:CODES,DS:DATAS,SS:STACKSSTART:MOVAX,DATASMOVDS,AXMOVCX,000AHMOVSI,300AHMOVBL,0FFHA1:CMPBL,0FFHJNEA4MOVBL,00HDECCXCMPCX,0JEA4PUSHSIPUSHCXA2:DECSIMOVAL,[SI]MOVDL,[SI-1]CMPAL,DLJAA3MOV[SI-1],ALMOV[SI],DLMOVBL,0FFHA3: LOOPA2POPCXPOPSIJMPA1A4: INT3 ;此处输入代码段代码MOVAH,4CHINT21HCODESENDSENDSTART实验七DATASSEGMENT;此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODESSEGMENTSTART:MOVAL,0MOVBH,0AH ;表示前景、背景颜色MOVAH,6HMOVCX,0MOVDH,24MOVDL,79INT10H ;清屏幕MOVAH,2MOVBH,0MOVDH,10HMOVDL,10HINT10H ;光标设置在第10行第10列MOVCX,001AH ;共26个字母,所以循环次数为26MOVDL,'Z'LP:MOVAL,DLMOVBH,0MOVBL,2FH ;设置显示的A到Z的底色和字色MOVAH,9INT10HDECDLLOOPLPINT3CODESENDSENDSTART实验八.486pd8255 macro port,data1movdx,portmoveax,data1out dx,eaxnopnopendmdatasegmentat0use16org1*4v1dw2dup(?)org2*4v2dw2dup(?)org3*4v3dw2dup(?)org1000htttdb?stackpequ2000hP255CWequ20CHP255Aequ200HP255Bequ204HP255Cequ208Hdataendscodesegmentuse16assumecs:code,ds:data,ss:dataorg1100hstart: nopmovax,0movds,axmovss,axmovsp,stackpiniti:moveax,60000000hmovcr0,eaxmovax,datamovds,axmovss,axmovsp,stackpmovcx,1000i0:deccxjnz i0d8255 P255CW,80808080hi1: d8255 P255A,0c099c099hd8255 P255B,0c0c0c0c0h ;40004000d8255 P255C,0fafafafah ;绿call del1d8255 P255C,0f5f5f5f5h ;红call del1d8255 P255C,0f0f0f0f0h ;黄call del1d8255 P255C,0ffffffffh ;灭call del1d8255 P255A,8ef8c0c0hd8255 P255B,8E8ec0c0h ;00007FFFd8255 P255C,0fafafafahcall del1d8255 P255C,0f5f5f5f5hcall del1d8255 P255C,0f0f0f0f0hcall del1d8255 P255C,0ffffffffhcall del1movax,4000hmoves,axmoveax,0chk:movbx,0000h ;从4000:0000单元开始写moves:[bx],eaxmovdx,P255Aout dx,eaxnopnopmovdx,P255Bout dx,eaxnopnopcall del1pusheax;写入的数据入栈moveax,0fafafafahmovdx,P255C ;绿色out dx,eaxcall del1popeax;出栈chk1:addbx,4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmpbx,8000hjz chk2 ;写满8000H个内存单元moves:[bx],eaxjmp chk1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;chk2:movbx,0fffchchk3:addbx,4cmpbx,8000hjz chk0cmpeax,es:[bx] ;把每个单元的数据读出与写入的jz chk3movecx,eax ;数据比较,是否正确moveax,0f5f5f5f5hmovdx,P255C ;不正确,颜色变成红色out dx,eaxmoveax,ecxcall del1 ;延时chk0:addeax,01010101h ;;;;;;;;;;;;;;;;;;;;;;;;;;;cmpeax,0ffffffffh ;下一个写入的数据jz chk4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;jmp chkchk4: jmp i1del1 proc ;延时movecx,8ffffhi2:dececxjnz i2retendpcodeendsendstart实验10.1:(以key为原本改进).486DATA SEGMENTAT0USE16ORG 1000HDATA ENDSCODE SEGMENTUSE16ASSUME CS:CODEORG 3000HBEG: JMP STARTTAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FHDPORT1 EQU 360HDPORT2 EQU 380HNUM DB 0001HCOUNTDD 00000FFFFHSTART: MOV AX,DATAMOV DS,AXMOV CL,5KK: MOV AL,CLMOV BX,OFFSETTABXLAT TABMOV DX,DPORT2OUT DX,ALNOPMOV DX,DPORT1MOV AL,NUMOUT DX,ALNOPNOPROL NUM,1MOV COUNT,00000FFFFHDELAY:NOPDEC COUNTJNZ DELAYJMP KKCODE ENDSEND BEG实验10.2使显示20115158.486DATA SEGMENTAT0USE16ORG 2000HBUF DD ?COUNT DB ?DB ?DATA ENDSCODE SEGMENTUSE16ASSUME CS:CODE,DS:DATAORG 01000HBEG: JMP STARTTAB1 DB 0A4H,0F9H,92H,92HTAB2 DB 0C0H,0F9H,0F9H,80HRG DD 050A050AHGR DD 0A050A05HRY DD 05000500HYR DD 00050005HRRRR DD 05050505HRGYR DD 050A0005HSTART: MOV AX,DATAMOV DS,AXMOV DX,20CHMOV EAX,80808080HOUT DX,EAXNOPNOPL1: MOV DX,200HMOV EAX,DWORDPTRTAB1OUT DX,EAXMOV BP,200L2: DEC BPJNZ L2MOV DX,204HMOV EAX,DWORDPTRTAB2OUT DX,EAXMOV BP,200L3: DEC BPJNZ L3MOV DX,208HMOV EAX,RGYROUT DX,EAXMOV BP,200L4: DEC BPJNZ L4HLTJMP L1CODE ENDS END BEG三连实验9;i8259.asm.486DATA SEGMENTUSE16AT0ORG40H*4V40H DW?,? ;保存中断向量的变量OPORT EQU 3A0H ;8259的偶地址JPORT EQU 3A8H ;8259的奇地址TR8255 EQU 20CH ;8255控制口地址A8255 EQU 200H ;8255A口地址B8255 EQU 204H ;8255B口地址C8255 EQU 208H ;8255C口地址ORG 1000HMM DD ?DATA ENDSCODE SEGMENTUSE16ASSUME CS:CODE,DS:DATAORG 2000HBEG: CLIJMP STARTSTART: MOV AX,DATAMOV DS,AXMOV AX,0MOV SS,AXMOV SP,1000HMOV MM,0F5F5F5F5HMOV AL,80H ;初始化8255MOV DX,TR8255OUT DX,ALMOV AL,99HMOV DX,A8255OUT DX,ALMOV AL,5MOV DX,C8255OUT DX,ALCALL WRITEVERLLL: MOV AL,00010011B ;写ICW1MOV DX,OPORTOUT DX,ALNOPNOPMOV AL,01000000B ;写ICW2MOV DX,JPORTOUT DX,ALNOPNOPMOV AL,00000001B ;写ICW4MOV DX,JPORTOUT DX,ALNOPNOP MOV AL,11111100B ;写IMRMOV DX,JPORTOUT DX,ALSTI;---------------------------------------LL: MOV SI,1 ;等待中断LL1: MOV CX,10000LL2: NOPLOOP LL2DEC SIJNZ LL1NOPNOPNOPNOPNOPNOPNOPNOPNOPJMP LL;--------------------------------------WRITEVER PROC ;写中断向量 PUSHAMOV BX,OFFSETSERVERMOV V40H,BXMOV AX,CSMOV V40H2,AXPOPARETWRITEVER ENDP;-------------------------------------SERVER PROC ;中断服务程序,显示-SUCCESSMOV EAX,92C6C1BFHMOV DX,A8255OUT DX,EAXMOV EAX,9286C692HMOV DX,B8255OUT DX,EAXMOV EAX,MMMOV DX,C8255OUT DX,EAXNOT EAXMOV MM,EAXMOV AL,20HMOV DX,OPORTOUT DX,ALIRETSERVER ENDP;-------------------------------------CODE ENDSEND BEG实验11.486CODE SEGMENT USE16ASSUME CS:CODEORG 1000HBEG: JMP STARTCCONPORT EQU 30CHCCONBIT1 EQU 00010110BCCONBIT2 EQU 01010100BCCONBIT3 EQU 10010110BCDPORT1 EQU 300HCDPORT2 EQU 304HCDPORT3 EQU 308HCHDBIT1 EQU 08HCHDBIT2 EQU 04HSTART: NOP ;启动延时NOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT1OUT DX,ALNOPNOPMOV DX,CDPORT1 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2 ;写入初值MOV AL,CHDBIT1OUT DX,ALNOPNOPWT1: MOV DX,CCONPORT ;写入控制字MOV AL,CCONBIT3OUT DX,ALNOPNOPMOV DX,CDPORT3 ;写入初值MOV AL,CHDBIT2OUT DX,ALWT: NOPJMP WTCODE ENDSEND BEG实验13.486DATA SEGMENT AT 0 USE16ORG 1000HMM DB ?DATA ENDSCODE SEGMENT USE16ASSUME CS:CODE,DS:DATAORG 2000HBEG: JMP STARTTAB DB 0C0H,0F9HLENS EQU $-TABC8251 EQU 330HD8251 EQU 320HCCONPORT EQU 30CHCCONBIT1 EQU 00010110BCCONBIT2 EQU 01010110BCCONBIT3 EQU 10010110BCDPORT1 EQU 300HCDPORT2 EQU 304HCDPORT3 EQU 308HCHDBIT1 EQU 9CHCHDBIT2 EQU 9CHC8255 EQU 20CHA8255 EQU 200HB8255 EQU 204HSTART: MOV AX,DATAMOV DS,AXCALL I8254CALL I8251MOV DX,C8251IN AL,DXCALL I8255AGAIN: MOV MM,05HMOV CL,LENSMOV BX,OFFSETTABTSCAN: MOV DX,A8255MOV EAX,0FFFFFFFFHOUT DX,EAXMOVDX,B8255OUTDX,EAXMOV DX,C8251IN AL,DXTEST AL,01HJZ TSCANSEND: MOVAL,[BX] MOV DX,D8251OUT DX,ALMOV SI,0RSCAN: MOV DX,C8251IN AL,DXTEST AL,02HJNZ RECIEVEDEC SIJNZ RSCANJMP NEXTRECIEVE: MOV DX,D8251IN AL,DXMOV DX,A8255OUT DX,ALMOV DX,B8255OUT DX,ALMOV AL,MMNOT ALMOV DX,208HOUT DX,ALMOV MM,ALMOV BP,1000HDELAY: NOPDEC BPJNZ DELAYINC BXDEC CLJNZ TSCANJMP AGAINNEXT: MOV EAX,88F9A4BFHMOV DX,A8255OUT DX,EAXMOV EAX,0A1839280HMOV DX,B8255OUT DX,EAXJMP AGAINI8254 PROCNOPNOPNOPNOPNOPNOPNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT1OUT DX,ALNOPNOPMOV DX,CDPORT1MOV AL,CHDBIT1OUT DX,ALNOPNOPMOV DX,CCONPORTMOV AL,CCONBIT3OUT DX,ALNOPNOPMOV DX,CDPORT3MOV AL,CHDBIT2OUT DX,ALNOPNOPWT1: MOV DX,CCONPORTMOV AL,CCONBIT2OUT DX,ALNOPNOPMOV DX,CDPORT2MOV AL,CHDBIT2OUT DX,ALRETI8254 ENDPI8251 PROCMOV CX,3AGA: MOV AL,0MOV DX,C8251OUT DX,ALLOOP AGAMOV BP,5HD1: DEC BPJNZ D1MOV AL,40HOUT DX,ALMOV BP,5HD2: DEC BPJNZ D2MOV AL,4EHOUT DX,ALMOV BP,5HD3: DEC BPJNZ D3MOV AL,15HOUT DX,ALRETI8251 ENDPI8255 PROCMOV DX,C8255MOV EAX,80808080HOUT DX,EAXRETI8255 ENDPCODE ENDSEND BEG