1.顺序程序设计将两个多位十进制数相加,要求被加数、加数均以ASCⅡ码形式各自顺序存放在以DATA1和DATA2为首的五个内存单元中(低位在前),结果送回DATA1处。
DATA SEGMENTDATA1 DB 34H,35H,39H,38H,36H,' ' ;被加数DATA2 DB 37H,34H,33H,36H,32H,' ' ;加数DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,DATA1 ;有效地址送SI,为调用显示子程序做准备CALL DISPLAY ;调用显示子程序CALL CRLF ;调用回车换行子程序LEA SI,DATA2 ;有效地址送SI,为调用显示子程序做准备,同时为加法运算做准备CALL DISPLAY ;调用显示子程序CALL CRLF ;调用回车换行子程序LEA DI,DATA1 ;有效抵制送DI,为加法运算做准备MOV AX,0MOV BX,0MOV CL,05H ;记录循环次数ADDS: MOV AL,[SI] ;将加数送往ALSUB AL,30HADD AL,BL ;加上进位MOV BL,[DI] ;将被加数送往BLSUB BL,30HADD AL,BL ;加法运算ADD AL,30HCMP AL,3AHJA SUBA ;结果>=10,跳到SUBAJB NSUBASUBA: SUB AL,0AH ;减去10的值,并置BL为1MOV BL,01HJMP CONTINUENSUBA: MOV BL,00H ;置BL为0CONTINUE:MOV [DI],AL ;将相加的结果从AL送往DI的地址,即DATA1的地址INC DI ;地址加1INC SI ;地址加1LOOP ADDS ;循环JC SHUCHUJNC SHUCHU2SHUCHU2: MOV AL,31H ;CF为1设置结果最高位为1JMP CONTINUE2SHUCHU:MOV AL,30H ;CF为0设置结果最高位为0CONTINUE2:MOV [DI],ALLEA SI,DATA1 ;将DATA1的有效地址送往SI,为调用DISPLAY子程序做准备CALL DISPLAY ;调用DISPLAY子程序MOV AX,4C00H ;返回DOSINT 21HMAIN ENDPCRLF PROC NEAR ;回车、换行于功能MOV DL,0DHMOV AH,02HINT 21HMOV DL,0AHMOV AH,02HINT 21HRETCRLF ENDPDISPLAY PROC NEAR ;显示于功能MOV BX,0006H ;记录循环次数DSL: MOV DL,[SI+BX-1] ;将有效地址内的内容送往DLMOV AH,02 ;2号功能输出INT 21HDEC BX ;BX自动减1JNZ DSLRETDISPLAY ENDPCODE ENDSEND START2 分支程序设计实验接收键盘输入字符,将其中的小写字母转换为大写字母并显示。
CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART: MOV AH,00HINT 16HCMP AL,0DHJZ OVERCALL JUDGEMOV DL,ALMOV AH,02HINT 21HJMP STARTOVER: MOV AH,4CHINT 21HMAIN ENDPJUDGE PROC NEARCMP AL,'a'JB STOPCMP AL,'z'JA STOPSUB AL,20HSTOP: RETJUDGE ENDPCODE ENDSEND START3 循环程序设计实验统计一个有10人的班中,男、女生的人数各为多少。
将男生人数存入变量MAN、女生人数存入变量WOMAN中。
DATA SEGMENTMAN DB 0,0WOMAN DB 0,0STRING DB ' iuput people number! (man is 0, woman is 1 ) $'SM DB 'man is :$'SW DB 'woman is :$'DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AH,09H ;将STRING的内容输出MOV DX,OFFSET STRINGINT 21HCALL CRLFMOV CX,10 ;男女生总人数AA: MOV AH,01H ;从键盘输入,0为男,1为女INT 21HCMP AL,30H ;与'0'比较JNZ ADDW ;不为'0',女生人数加1INC MAN ;否则男生人数加1BB: LOOP AAJMP DISPLY ;打印ADDW: INC WOMANJMP BBDISPLY: CALL CRLFMOV AH,09H ;字符串输出MOV DX,OFFSET SMINT 21HMOV AH,02H ;男生人数统计结果输出MOV DL,MANADD DL,30HCALL JUDGECALL CRLFMOV AH,09H ;字符串输出MOV DX,OFFSET SWINT 21HMOV AH,02H ;女生人数统计结果输出MOV DL,WOMANADD DL,30HCALL JUDGEMOV AH,4CH ;返回DOSINT 21HMAIN ENDPJUDGE PROC NEAR ;判断结果是否为39HCMP DL,3AHJZ SHICC: INT 21HRETSHI: MOV DL,31HINT 21HMOV DL,30HJMP CCJUDGE ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START4 子程序设计实验1.键盘输入字符,依次显示在行的最左端(即每接受一个字符,显示在屏幕上并回车换行。
)2.对频繁使用的回车换行编写为子程序,在主程序中调用完成分行显示。
CODE SEGMENTMAIN PROC FARASSUME CS:CODESTART: MOV CX,10 ;设置循环次数NEXT: MOV AH,01H ;从键盘输入一个字符INT 21HCALL CRLF ;调用回车换行子程序LOOP NEXTMOV AH,4CH ;返回DOSINT 21HMAIN ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START5 码制转换程序实验将ASCⅡ码数据转换成二进制数据。
要求从键盘上输入十进制整数(假定范围0~32767),然后转换成二进制格式存储。
DATA SEGMENTSTRING1 DB 'PLEASE INPUT A NUMBER(0~32767):$'STRING2 DB 'THE ASCII IS:$'STRING3 DB 'THE BINARY IS:$'DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAMAIN PROC FARSTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1MOV AH,09HINT 21HCALL CRLFINPUT: MOV AH,01H ;输入数据INT 21HCMP AL,0DHJZ NEXTSUB AL,30HJL INPUTCMP AL,39HJG INPUTCBWXCHG AX,BX ;AX为输入值,BX保存结果,两个对调为MUL做准备MOV DX,10D ;将上一次结果乘10MUL DXXCHG AX,BX ;AX为本次输入的值,BX为之前的结果ADD BX,AXJMP INPUTNEXT: CALL CRLFMOV CL,4DMOV CH,4DMOV DX,OFFSET STRING2MOV AH,09HINT 21HCALL CRLFLOOP0: ROL BX,CL ;循环左移,将最高为存到BL的低四位MOV AL,BLAND AL,0FH ;ADD AL,30HCMP AL,3AHJL OUTPUTADD AL,07HOUTPUT:MOV AH,02HMOV DL,ALINT 21HDEC CHJNZ LOOP0CALL CRLFMOV DX,OFFSET STRING3MOV AH,09HINT 21HCALL CRLFMOV CH,16DMOV CL,1DLOOP1: ROL BX,CLMOV AL,BLAND AL,01HADD AL,30HMOV AH,02HMOV DL,ALINT 21HDEC CHJNZ LOOP1MOV AH,4CHINT 21HMAIN ENDPOUTS PROC NEAR ;字符串输出子程序MOV AH,09HINT 21HRETOUTS ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车INT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START6 两个数相乘的实验实现十进制数的乘法,被乘数和乘数均以ASCⅡ码形式放在内存中,乘积在屏幕上显示出来。
DATA SEGMENTMBCS DW 0MCS DW 0RESULT DW 0STRING1 DB 'THE BEICHENGSHU IS:$'STRING2 DB 'THE CHENGSHU IS:$'STRING3 DB 'THE RESULT IS:$'STRING DB 'THE ASCII IS:$'DATA ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET STRING1CALL OUTSCALL INPUT ;输入被乘数MOV DX,OFFSET STRINGCALL OUTSCALL CRLFCALL ASCII ;被乘数转化为ASCII码输出CALL CRLFMOV MBCS,BX ;被乘数保存到MBCS中MOV DX,OFFSET STRING2CALL OUTSCALL INPUT ;输入乘数MOV DX,OFFSET STRINGCALL OUTSCALL CRLFCALL ASCII ;乘数转化为ASCII码输出CALL CRLFMOV MCS,BX ;乘数保存到MCS中MOV DX,OFFSET STRING3CALL OUTSCALL CRLFMOV AX,MBCS ;被乘数MUL BX ;乘数与被乘数相乘,结果高位DX,低位AXMOV RESULT,AX ;将AX中的内容保存到RESULT中MOV BX,DX ;将高位DX的值送给BX输出CALL ASCIIMOV BX,RESULT ;将低位AX的值送给BX输出CALL ASCIIMOV AH,4CHINT 21HMAIN ENDPINPUT PROC NEAR ;输入十进制数,将其转化为ASCII码存到BX中CALL CRLFMOV BX,0AA: MOV AH,01HINT 21HCMP AL,0DHJZ STOPSUB AL,30HJL AACMP AL,39HJG AACBWXCHG AX,BX ;AX为输入值,BX保存结果,两个对调为MUL做准备MOV DX,10D ;将上一次结果乘10MUL DXXCHG AX,BX ;AX为本次输入的值,BX为之前的结果ADD BX,AXJMP AASTOP: CALL CRLFRETINPUT ENDPASCII PROC NEARMOV CL,4DMOV CH,4DCC: ROL BX,CL ;循环左移,将最高为存到BL的低四位MOV AL,BLAND AL,0FH ;ADD AL,30HCMP AL,3AHJL BBADD AL,07HBB: MOV AH,02HMOV DL,ALINT 21HDEC CHJNZ CCRETASCII ENDPOUTS PROC NEARMOV AH,09HINT 21HRETOUTS ENDPCRLF PROC NEAR ;回车换行子程序MOV AH,02H ;回车MOV DL,0DHINT 21HMOV DL,0AH ;换行INT 21HRETCRLF ENDPCODE ENDSEND START7 从键盘输入数据并显示的程序编写程序将键盘接收到的四位十六进制数据转换为等值的二进制数,再显示在终端上。