1、 MOV AH,9 ;显示字符串 INT 21H ;DOS调用 - CLEAR MACRO COLOR ;清屏 MOV AH,6 ;屏幕初始化 MOV AL,0 ;页号 MOV CH,0 ;设置左上角的坐标为(0,0) MOV CL,0 MOV DL,100 ;设置右上角的坐标为(100,100) MOV DH,100 MOV BH,COLOR ;卷入行属性 .MODEL SMALL .STACK .DATA ;数据段定义 MSG0 DB * * * * * * * * * * * * * * * * * * * *,0DH,0AH ;,0dh,0ah,0dh,0ah DB * *,0DH,0
2、AH db * *,0dh,0ah * -COUNTER- * * DATA1:_ *,0dh,0ah,0dh,0ah,0dh ,0DH * DATA2: * RESULT:,0DH,0AH,0DH ;,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh,0ah,0dh * * * * * * * * * * * * * * * * * * * *,$ MSG1 DB choose +,- MSG2 DB you choose wrong,0AH,0DH MSG3 DB Press ESC to Exit!,0DH,0AH, MSG4 DB Press any key to con
3、tinue! MSG5 DB - MSG6 DB . MSG7 DB error input! MSG8 DB data2 is wrong! DATA1 DW ? DATA2 DW ?.CODE ;代码段从这里开始 - DEC_DIV PROC NEAR CWD ;将字转换为双字,AX内容符号扩展到DX DIV CX PUSH DX MOV DL,AL ADD DL,30H ;将不是数字的字符转换为数字 显示输出 POP DX MOV AX,DX RET DEC_DIV ENDP - CHANGE PROC NEAR ;该子程序的功能:将AX中存储的十六进制数转换为十进制数 CMP AX,1
4、000 JAE C1 ;AX1000则转移 CMP AX,100 JAE C2 ;AX100则转移 CMP AX,10 JAE C3 ;AX10则转移 JMP C4 ;AX10 C1: MOV CX,1000D CALL DEC_DIV C2: MOV CX,100D C3: MOV CX,10D C4: MOV CX,1D CHANGE ENDP BEGIN PROC NEAR BACK: CLEAR 1EH CURS 2,20 ;设置光标为(2.20) DISPMSG MSG0 ;显示用户界面 CURS 8,41 ;设置光标为(8,41) ,第一行 MOV BX,0 MOV CX,2 NE
5、WCHAR1: MOV AH,1 ;键盘输入并回显 CMP AL,30H ;检查输入的字符是不是数字 JAE J1 ;如果不是,则转移至J1 JMP D2 ;是,转移到D2执行 J1: CMP AL,39H ; 与9的ASCII侣氡 JBE J2 ;如果输入的字符是0-9,则转移至J2 JMP D2 ;如果不是数字,则转移至D2 J2: SUB AL,30H CBW ;AL的内容符号扩展到AH XCHG AX,BX MOV DI,10 MUL DI ADD BX,AX LOOP NEWCHAR1 MOV DATA1,BX CURS 11,41 ;设置光标位为(11,40),第二行 NEWCHA
6、R2:与0的ASCII码比较 JAE J3 ;如果输入数字大于等于0则跳转至J3 JMP D2 J3:与9比较 JBE J4 ;如果小于或等于9则跳转 如果输入不是数字则跳转 J4: SUB AL,30H ;如果输入不是0-9,则转化成相应的字符 将AL符号扩展到AH LOOP NEWCHAR2 MOV DATA2,BX MOV AX,DATA1 MOV BX,DATA2 PUSH AX PUSH BX CURS 15,33 ;设置光标的位置为(15.33),第三行 DISPMSG MSG1 ;显示提示信息 接受键盘输入并回显 CMP AL,+ JE ADDI ;如果运算符为+,则计算两数之和
7、 JE SUBT ;如果运算符为-,则计算两数之差 CURS 16,25 ;设置光标为(16,25) DISPMSG MSG2 ;在屏幕上输出提示信息 JMP D1 - ADD THE TWO DATAS ADDI: POP BX POP AX ADD AX,BX ;计算两数字之和 CURS 14,41 ;设置光标位置为(14,41) CALL CHANGE ;将结果转换为十进制数 - SUBTRACT THE TWO DATAS SUBT: CMP AX,BX ;比较两数大小 JAE D0 ;如果AX=BX则跳转 CURS 14,40 ;设置光标位置为(14,40) DISPMSG MSG5
8、 ;在屏幕上显示负号 D0: SUB AX,BX ;计算两数之差 - D1: D2:设置光标位置为(15,33) DISPMSG MSG7 ;提示输入出错 BEGIN ENDP MAIN PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX PUSH DS XOR AX,AX MOV DATA2,0 ;将缓冲区清空 MOV DATA1,0 AGAIN: CALL BEGIN CURS 16,23 ;设置光标位置为(16.23) DISPMSG MSG3 ;在屏幕上输出提示信息,提示退出的方法 CURS 17,23 ;设置光标位置为(17.23) DISPMSG MSG4 ;在屏幕上输出提示信息,提示继续的方法 MOV AH,7 ;键盘输入,无回显 CMP AL,27 ;判断输入的是否为ESC JNE AGAIN ;如果不是就继续执行以上运算 EXIT: MOV AX,4C00H ;如果是就退出系统 MAIN ENDP END MAIN4.2 对源程序汇编生成目标文件4.3 链接目标文件生成可执行文件“12.EXE”,并用D
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1