1、.题目:用汇编语言编程实现ASCII码表的输出显示要求:(1)对于无法显示的控制字符(02H,07H,08H,09H,0AH,0DH)用空格代替,(2)输出显示为16x16的矩阵,列优先,即同一行相邻字符的ASCII值相差10H,同一列相邻字符的ASCII值相差01H(3)同一行相邻字符用空格隔开源程序如下:方法一:DATA SEGMENTDATA ENDSSTACK SEGMENT STACK DB 10 DUP(?)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AX;初始化DSMO
2、V DH,0;要显示的ASCII码表的初始值MOV CX,10H;列计数器LL:MOV BL,10H;行计数器PUSH DX;把这一行第一个值压入堆栈,保护现场CMP DH,2JZ TCMP DH,7JZ TCMP DH,8JZ TCMP DH,9JZ TCMP DH,0AHJZ TCMP DH,0DHJZ T G:MOV DL,DH;显示ASCII码表中值为DH的字符MOV AH,2INT 21HADD DH,10H;DH + 10 -DH,为下一个要显示的值DEC BL;计数JZ BB;一行显示16个字符,显示完,跳转 AA:MOV DL, ;每显示一个字符(行末字符除外),后跟着显示一个
3、空格MOV AH,2INT 21HJMP G;显示完空格,显示下一个字符 T:MOV DL, ;要显示的值为2或7,8,9,0AH,0DH时,用空格代替MOV AH,2INT 21HADD DH,10H;DH + 10 -DH,为下一个要显示的值DEC BLJMP AA;跳转到AA,显示空格 BB:CALL PPPP;一行显示完16个字符时,调用子程序,实现回车、换行POP DX;将堆栈中的值(上一行首值)弹出至DH,恢复现场INC DH;DH + 1-DH,这行要显示的首值LOOP LL;从LL开始循环,实现剩余各行的显示 M:MOV AH,4CH;程序结束,返回操作系统INT 21HPPP
4、P PROC;子程序MOV DL,0DH;回车MOV AH,2INT 21HMOV DL,0AH;换行MOV AH,2INT 21HRET;返回主程序PPPP ENDPCODE ENDS END START方法二:DATA SEGMENT QQ DB 2,7,8,9,0AH,0DHDATA ENDSSTACK SEGMENT STACK DB 10 DUP(?)STACK ENDSCODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATAMOV DS,AX;初始化DSMOV DH,0;要显示的ASCII码表的初始值MOV CX,1
5、0H;列计数器 LL:MOV BL,0FH;行计数器PUSH DX;把这一行第一个值压入堆栈,保护现场CALL MMMM AA:MOV DL, ;输出空格MOV AH,2INT 21HADD DH,10H;DH + 10 -DH,为下一个要显示的值 G:MOV DL,DH;显示ASCII码表中值为DH的字符MOV AH,2INT 21HDEC BLJNZ AA;跳转到AA,显示空格 BB:CALL PPPP;一行显示完16个字符时,调用子程序,实现回车、换行POP DX;将堆栈中的值(上一行首值)弹出至DH,恢复现场INC DH;DH + 1-DH,这行要显示的首值LOOP LL;从LL开始循
6、环,实现剩余各行的显示MOV AH,4CH;程序结束,返回操作系统INT 21HMMMM PROC;子程序1PUSHCXMOV CX,6MOV SI,OFFSET QQ NN:CMP DH,SI;判断是否等于2,7,8,9,0AH,0DHJZ TRINC SILOOP NNMOV DL,DH;显示ASCII码表中值为DH的字符MOV AH,2INT 21HJMP TH TR:MOV DL, ;要显示的值为2或7,8,9,0AH,0DH时,用空格代替MOV AH,2INT 21H TH:POP CXRETMMMM ENDPPPPP PROC;子程序2MOV DL,0DH;回车MOV AH,2INT 21HMOV DL,0AH;换行MOV AH,2INT 21HRET;返回主程序PPPP ENDPCODE ENDS END START.