;实验一汇编程序、链接程序、编辑程序及调试程序得基本使用方法;一、实验目得;1.熟悉在PC机上建立、汇编、连接、调试与运行汇编语言程序得过程。
;2.掌握字符串得复制,并会用各种方法实现。
;3.掌握字符串显示得DOS功能调用。
;二、实验内容及要求;1.将以符号地址为ARRAY1开始得字符串“请自己定义”复制到ARRAY2开始得存储单元中并显示在屏幕上。
;2、使用三种方法传送:;(1) 用MOV指令传送;(2) 用基本串传送指令;(3) 重复串传送指令MY_DATA SEGMENT PARA 'DATA';数据段DISP1 DB 'How are you?',0aH,0DH,'$';ARRAY1 DB 'DI',41H,'NZI09','$';ARRAY2 DB 20 dup(0)MY_DATA ENDsMY_CODE SEGMENT PARA 'CODE' ;代码段MY_PROC PROC FARASSUME CS:MY_CODE, DS:MY_DATASTART: MOV AX,MY_DA TAMOV DS,AXMOV ES,AXLEA DX,DISP1;显示提示字符串MOV AH,09HINT 21H;;开始(1) 用MOV指令传送;LEA SI,ARRAY1;;LEA DI,ARRAY2;;MOV CX,09HLOOP1: ;MOV BH, [SI];MOV [DI], BH;INC SI;INC DI;LOOP LOOP1;;开始(2) 用基本串传送指令LEA SI,ARRAY1;LEA DI,ARRAY2;MOV CX,09HCLDLOOP2: MOVSBLOOP LOOP2;;开始(3) 重复串传送指令;LEA SI,ARRAY1;;LEA DI,ARRAY2;;MOV CX,09H;CLD;REP MOVSB;将ARRY2中得字符串显示出来,便于判断就是否传送正确。
LEA DX,ARRAY2;显示信息MOV AH,09HINT 21HEXIT: MOV AX,4C00HINT 21HMY_PROC ENDpMY_CODE ENDSEND START实验二分支程序设计;一、实验目得;1.掌握分支程序得设计方法。
;2、掌握提示信息得使用方法及键盘输入得用法。
;3、学会使用字符串比较。
;二、实验内容及要求;在屏幕上显示“Please input your telephone number:”,根据提示输入8位电话号码,;屏幕上下一行显示“Please input your ;telephone number again:”,再次输入8位相同电话号码, ;比较两次输入得数据,如果相同则显示“Success!”,;不相同则显示“Your ;telephone number isn’t match, please try again、”,直到输入正确为止。
MY_DATA SEGMENT PARA 'DATA';数据段;开辟输入缓冲区1,存放第一次输入得8位电话号码。
NUMBER1 DB 9 ;最多可以键入9个字符(包括回车符ODH)ACTLEN1 DB ? ;实际键入得字符数CHARS1 DB 9 DUP('A'),0aH,0DH,'$';实际键入得字符从此开始存放,为了显示输入得号码,特别加了字符串结束标志'$'。
;开辟输入缓冲区2,存放第二次输入得8位电话号码。
NUMBER2 DB 9 ;最多可以键入9个字符(包括回车符ODH)ACTLEN2 DB ? ;实际键入得字符数CHARS2 DB 9 DUP('A'),0aH,0DH,'$' ;实际键入得字符从此开始存放,为了显示输入得号码,特别加了字符串结束标志'$'。
;定义字符串,作为程序运行中得提示。
DISP1 DB 'Please input your telephone number:',0aH,0DH,'$'DISP2 DB 'Please input your telephone number again:',0aH,0DH,'$'RIGHT DB 'Success!',0aH,0DH,'$'WRONG DB 'Your telephone number isn',27H,'t match, please try again、',0aH,0DH,'$' YourInput DB 'Your input is:','$';注意字符串中得“'”要用其ASCII码表示。
MY_DATA ENDsMY_CODE SEGMENT PARA 'CODE' ;代码段MY_PROC PROC FARASSUME CS:MY_CODE, DS:MY_DATASTART: MOV AX,MY_DA TAMOV DS,AXMOV ES,AXMOV BL,3 ;允许错误输入得最大次数LEA DX,DISP1;显示提示字符串MOV AH,09HINT 21HLEA DX,NUMBER1;输入8位电话号码,并放入缓冲区NUMBER1MOV AH,0AHINT 21HLEA DX,YourInput;MOV AH,09HINT 21HLEA DX,CHARS1;显示输入得8位电话号码。
MOV AH,09HINT 21HAGAIN: LEA DX,DISP2;显示提示字符串MOV AH,09HINT 21HLEA DX,NUMBER2;再次输入8位电话号码,并放入缓冲区NUMBER2MOV AH,0AHINT 21HLEA DX,YourInput;显示输入得8位电话号码。
MOV AH,09HINT 21HLEA DX,CHARS2;显示输入得8位电话号码。
MOV AH,09HINT 21HLEA SI,CHARS1;比较两个字符串LEA DI,CHARS2;MOV CX,8CLDREPE CMPSBJNZ EXIT1;不相等得话,跳转到EXIT1LEA DX,RIGHT;显示信息MOV AH,09HINT 21HJMP EXITEXIT1: LEA DX,WRONG;显示信息MOV AH,09HINT 21H;JMP AGAINDEC BLJNZ AGAINEXIT: MOV AH,4CHINT 21HMY_PROC ENDpMY_CODE ENDSEND START实验三循环程序设计;一、实验目得;1.掌握循环程序得设计方法。
;2.掌握正数、负数及零得判断方法。
;3.学习DEBUG得使用。
;二、实验内容及要求;1.以符号地址NUM开始得连续存储单元中,顺序存放着16个数(请在实验中随机输入),试统计其中正数、负数及零得个数,并把它们存放;在SI、DI及BX中。
;2.程序编写完成后,使用DEBUG查瞧结果,检验正误。
MY_DATA SEGMENT PARA 'DATA';数据段NUM DB 0,0,2,3,4,5,6,1,-2,-3,-4,-5,-6,-7,-8,-9RES DB 3 DUP(0);定义字符串,作为程序运行中得提示。
Zero DB 'Zero:','$'Negative DB 'Negative number:','$'Positive DB 'Positive number:','$'Return DB 0aH,0DH,'$';输出回车换行符。
MY_DATA ENDsMY_CODE SEGMENT PARA 'CODE' ;代码段MY_PROC PROC FARASSUME CS:MY_CODE, DS:MY_DATASTART:MOV AX,MY_DA TAMOV DS,AXMOV CX,16LEA SI,NUMLEA DI,RESAGAIN: MOV AL,[SI]CMP AL,00H;与0比较JNE NEXT1;不等于0,转移到NEXT1INC BYTE PTR[DI];“0”得个数加1。
JMP STONEXT1: TEST AL,80H;判断最高位就是否为"1",转移到NEXT1JNZ NEXT2;最高位为"1",转移到NEXT2INC BYTE PTR[DI+1];正数得个数加1。
JMP STONEXT2: INC BYTE PTR[DI+2];负数得个数加1。
STO: INC SI;指向下一个数字LOOP AGAIN;循环,直到16个数字统计完。
;以上程序已经完成了实验要求,以下就是显示结果。
;显示“0”得个数LEA DX,Zero;显示提示字符串MOV AH,09HINT 21HMOV DL,BYTE PTR[DI]MOV AL,DLCALL BIN2ASCMOV DL,ALNEXT4: MOV AH,2INT 21HLEA DX,Return;显示提示字符串MOV AH,09HINT 21H;显示正数得个数LEA DX,Positive;显示提示字符串MOV AH,09HINT 21HMOV DL,BYTE PTR[DI+1]CMP DL,9JA NEXT5ADD DL,30HJMP NEXT6NEXT5: ADD DL,37HNEXT6: MOV AH,2INT 21HLEA DX,Return;显示提示字符串MOV AH,09HINT 21H;显示负数得个数LEA DX,Negative;显示提示字符串MOV AH,09HINT 21HMOV DL,BYTE PTR[DI+2]CMP DL,9JA NEXT7ADD DL,30HJMP NEXT8NEXT7: ADD DL,37HNEXT8: MOV AH,2INT 21HLEA DX,Return;显示提示字符串MOV AH,09HINT 21HEXIT: MOV AH,4CHINT 21HMY_PROC ENDp;二进制数(0-F)转换成ASCII(‘0’-‘F’)得子程序。
BIN2ASC PROC;要转换得数在AL得低四位,转换结果仍在AL中CMP AL, 9JA ABCDEFADD AL, 30HJMP DONEABCDEF: ADD AL, 37HDONE: RETBIN2ASC ENDPMY_CODE ENDSEND START。