汇编实验.docx
《汇编实验.docx》由会员分享,可在线阅读,更多相关《汇编实验.docx(17页珍藏版)》请在冰点文库上搜索。
汇编实验
实验二循环程序实验
1、从键盘输入字符,如果字符是数字(0-9)则响铃n次,如果不是数字,则重新输入,ctrl+C键强行终止
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,01H
INT21H
CMPAL,03H
JZEXIT
CMPAL,30H
JBSTART
CMPAL,39H
JASTART
ANDAL,0FH
CBW
MOVCX,AX
beep:
MOVAH,02H
MOVDL,07H
INT21H
MOVSI,8000H
delay:
MOVDI,0F000H
loopdi:
DECDI
JNZloopdi
DECSI
JNZdelay
LOOPbeep
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、编写一个程序,从键盘接收一个小写字母然后找出它的前导字符和后继字符,在按顺序实现这是三个字符。
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAH,01H
a1:
INT21H
CMPAL,'a'
JBa1
CMPAL,'z'
JAa1
DECAL
MOVDL,AL
MOVCX,3
DISPLAY:
MOVAH,02H
INT21H
INCDL
LOOPDISPLAY
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3、编写程序,将一个包含20个数据的数组m分成两个组:
正数组和负数组,并分别把这两个数组的数据个数存在ZSGS和FSGS单元中。
DATASEGMENT
DAT1DB25H,82H,22H,0F4H,0E5H,0E2H,11H,15H,21H,16H
ZSQDB10DUP(?
)
FSQDB10DUP(?
)
ZSGSDB0
FSGSDB0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,0
MOVSI,0
MOVDI,0
MOVCX,10
A1:
MOVAL,DAT1[BX]
ANDAL,AL
JSFSCL
MOVZSQ[SI],AL
INCSI
INC[ZSGS]
JMPNEXT
FSCL:
MO
VFSQ[DI],AL
INCDI
INC[FSGS]
NEXT:
INCBX
LOOPA1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验三
1、学生成绩名次排序
DATASEGMENT
GRADEDB88,75,95,63,98,78,87,73,90,60
RANKDB10DUP(?
)
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,10
MOVBX,0
LOOP1:
MOVAL,GRADE[BX]
MOVDL,0
MOVCX,10
LEASI,GRADE
NEXT:
CMPAL,[SI]
JGENOCOUNT
INCDL
NOCOUNT:
ADDSI,1
LOOPNEXT
INCDX
MOVRANK[BX],DL
INCBX
DECDI
JNZLOOP1
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2、在BUFF起始的单元中,有一组数据,数组的个数放在cnt单元中,试把数组中的数据按从小到大排序。
DATASEGMENT
BUFFDB18,5,20,1,35,4,6,14,7,52
CNTDW10
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDI,0
WAI:
MOVBX,1
DECCNT
JEEXIT
MOVCX,CNT
MOVAL,BUFF[DI]
NEI:
CMPBUFF[DI+1],AL
JNSCONT
XCHGAL,BUFF[DI+1]
MOVBUFF[DI],AL
MOVBX,0
CONT:
INCDI
CMPBX,0
JEWAI
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验四宏的调用
DATASEGMENT
JUPDW0,A1,A2,A3,A4
MENUDB0DH,0AH
DB'**','**','**','**','**','**','**','**',0DH,0AH
DB'1.PROGRAMA',0DH,0AH
DB'2.PROGRAMB',0DH,0AH
DB'3.PROGRAMC',0DH,0AH
DB'4.PROGRAMD',0DH,0AH
DB'0.EXIT',0DH,0AH
DB'PLEASESELECT0-4:
','$'
DATAENDS
CRLFMACRO
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
ENDM
INPUTMACROORG
MOVDL,ORG
MOVAH,02H
INT21H
JMPA0
ENDM
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
A0:
LEADX,MENU
MOVAH,09H
INT21H
MOVAH,01H
INT21H
CMPAL,'0'
JBA0
CMPAL,'5'
JAA0
CMPAL,'0'
JEEXIT
ANDAL,0FH
SHLAL,1
CBW
MOVSI,AX
CRLF
CALLJUP[SI]
A1PROCNEAR
INPUT'A'
RET
A1ENDP
A2PROCNEAR
INPUT'B'
RET
A2ENDP
A3PROCNEAR
INPUT'C'
RET
A3ENDP
A4PROCNEAR
INPUT'D'
RET
A4ENDP
EXITPROCNEAR
MOVAH,4CH
INT21H
RET
EXITENDP
CODEENDS
ENDSTART
实验五子程序设计
编程实现,把上节编好的程序作为子程序,用菜单程序进行统一管理,按0退出。
DATASEGMENT
JUPDW0,A1,A2,A3,A4
MENUDB0DH,0AH
DB'1.PROGRAMA',0DH,0AH
DB'2.PROGRAMB',0DH,0AH
DB'3.PROGRAMC',0DH,0AH
DB'4.PROGRAMD',0DH,0AH
DB'0.EXIT',0DH,0AH
DB'PLEASESELECT0-4:
','$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
A0:
LEADX,MENU
MOVAH,09H
INT21H
MOVAH,01H
INT21H
CMPAL,'0'
JBA0
CMPAL,'4'
JAA0
CMPAL,'0'
JEEXIT
ANDAL,0FH
SHLAL,1
CBW
MOVSI,AX
CALLJUP[SI]
A1PROCNEAR
MOVDL,'A'
MOVAH,02H
INT21H
JMPA0
RET
A1ENDP
A2PROCNEAR
MOVDL,'B'
MOVAH,02H
INT21H
JMPA0
RET
A2ENDP
A3PROCNEAR
MOVDL,'C'
MOVAH,02H
INT21H
JMPA0
RET
A3ENDP
A4PROCNEAR
MOVDL,'D'
MOVAH,02H
INT21H
JMPA0
RET
A4ENDP
EXIT:
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
实验六窗口
在屏幕上开出一个窗口,
要求:
1、输入字符在窗口最底行,满行换行,上滚一行。
2、回车换行,上滚一行。
3、按esc退出,(ctrf+c,03h)
LOCATEMACROWIN_LRR,WIN_ULC
MOVAH,02H
MOVBH,0
MOVDH,WIN_LRR
MOVDL,WIN_ULC
INT10H
ENDM
CLEARMACROAL1,CH1,CL1,DH1,DL1,BH1
MOVAH,6
MOVAL,AL1
MOVCH,CH1
MOVCL,CL1
MOVDH,DH1
MOVDL,DL1
MOVBH,BH1
INT10H
ENDM
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE
START:
CLEAR0,0,0,80,80,70H
CLEAR0,3,5,23,75,40H
CLEAR0,4,22,22,53,1EH
A1:
LOCATE22,22
MOVCX,32
GETCHAR:
MOVAH,1
INT21H
CMPAL,1BH
JZEXIT
CMPAL,13
JNZA2
CALLCRLF
A2:
LOOPGETCHAR
CLEAR1,4,22,22,53,1EH
JMPA1
EXIT:
MOVAH,4CH
INT21H
RET
MAINENDP
CRLFPROC
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
CLEAR1,4,22,22,53,1EH
LOCATE22,22
RET
CRLFENDP
CODEENDS
ENDSTART
实验七发声
编制音乐程序,通过在数据区存储的频率洗漱和节拍数,通过调用发音子程序发出音乐。
要求:
自己找一首歌,八个普音符转变为频率系数和节拍系数。
至少三十个音符。
PUBLICGENSOUND
CODESEGMENT
ASSUMECS:
CODE
GENSOUNDPROCFAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVAL,0B6H
OUT43H,AL,
MOVDX,12H
MOVAX,348CH
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,03H
OUT61H,AL
;PUSHSI
;MOVSI,5
WAIT1:
MOVCX,2800
DELAY:
LOOPDELAY
;DECSI
;JNZWAIT1
;POPSI
DECBX
JNZWAIT1
MOVAL,AH
OUT61H,AL
POPDI
POPDX
POPCX
POPBX
POPAX
RET
GENSOUNDENDP
CODEENDS
END
MUSIC.ASM
EXTRNGENSOUND:
FAR
STACKSEGMENTPARASTACK'STACK'
DB64DUP('STACK...')
STACKENDS
DATASEGMENTPARA'DATA'
FREQDW330,392,330,294,330,392,330,294,330
DW330,392,330,294,262,294,330,392,294
DW262,262,220,196,196,220,262,294,330,262
DW-1
TIMEDW3DUP(50),25,25,50,25,25,100
DW2DUP(50,50,25,25),100
DW3DUP(50,25,25,),100
DATAENDS
CODESEGMENTPARA'CODE'
ASSUMECS:
CODE,SS:
STACK,DS:
DATA
MUSICPROCFAR
MOVAX,DATA
MOVDS,AX
LEASI,FREQ
LEABP,DS:
TIME
FREQ:
MOVDI,[SI]
CMPDI,-1
JEENDSM
MOVDX,DS:
[BP]
CALLGENSOUND
ADDSI,2
ADDBP,2
JMPFREQ
ENDSM:
MOVAX,4C00H
INT21H
MUSICENDP
CODEENDS
ENDMUSIC
两个文件连接时:
LINK文件1+文件2