⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mycode4.txt

📁 用汇编语言编译的一个内容简单
💻 TXT
字号:

 CURS MACRO A,B ;此子程序用于设置鼠标的位置
 MOV AH,2 ;置光标位置 
 MOV BH,0 ;页号为0 
 MOV DH,A ;设置光标的坐标为(A.B) 
 MOV DL,B 
 INT 10H ;BIOS调用:显示器I/O
  
 ENDM 
;------------------------------- 
 DISPMSG MACRO MESSAGE     ;用于显示主界面
 LEA DX,MESSAGE ;传递MESSAGE的偏移地址 
 MOV AH,9 ;显示字符串 
 INT 21H ;DOS调用 

 ENDM 
;---------------------------------- 

 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 ;卷入行属性
 MOV BL,10H 
 INT 10H ;BIOS调用 
 ENDM  
DATA SEGMENT;数据段定义 
 MSG0 DB '=',0DH,0AH
 MSG1 DB 'choose +,-,*,/','$' 
 MSG2 DB 'you choose operater wrong','$',0AH,0DH 
 MSG3 DB 'Press ESC to Exit!',0DH,0AH,'$' 
 MSG4 DB 'Press any key to continue!',0DH,0AH,'$' 
 MSG5 DB '-','$' 
 MSG6 DB '.','$' 
 MSG7 DB 'error input!','$' 
 MSG8 DB 'data2 is wrong!','$' 
 DATA1 DW ? 
 DATA2 DW ? 
 OPER DW ?
 DATA ENDS 
.CODE ;代码段从这里开始 
;-------------------------------------------- 
 DEC_DIV PROC NEAR 
 CWD ;将字转换为双字,AX内容符号扩展到DX 
 DIV CX 
 PUSH DX     ;余数入栈
 MOV DL,AL 
 ADD DL,30H ;将不是数字的字符转换为数字 
 MOV AH,2 ;显示输出 
 INT 21H ;DOS调用 
 POP DX 
 MOV AX,DX 
 RET 
  
 DEC_DIV ENDP 
;------------------------------------------ 
 CHANGE PROC NEAR ;该子程序的功能:将AX中存储的十六进制数转换为十进制数 
 CMP AX,1000 
 JAE C1 ;AX≥1000则转移 
 CMP AX,100 
 JAE C2 ;AX≥100则转移 
 CMP AX,10 
 JAE C3 ;AX≥10则转移 
 JMP C4 ;AX<10 

 C1: MOV CX,1000D 
 CALL DEC_DIV 

 C2: MOV CX,100D 
 CALL DEC_DIV 

 C3: MOV CX,10D 
 CALL DEC_DIV 

 C4: MOV CX,1D 
 CALL DEC_DIV 
 RET 
 CHANGE ENDP 
;------------------------------- 
 BEGIN PROC NEAR  
  
 BACK: CLEAR 17H 
 CURS 1,1 ;设置光标为(1.1) 
 MOV BX,0 
 MOV CX,1  
 
 MOV AH,1  
 INT 21H 
 CMP AL,30H 
 JAE J1 
 JMP D2 

 J1: CMP AL,39H 
 JBE J2 
 JMP D2 
 J2: SUB AL,30H 
 CBW 
 XCHG AX,BX  
 MOV DI,10 
 MUL DI 
 XCHG AX,BX 
 ADD BX,AX 

 MOV DATA1,BX 

 CURS 1,4 ;设置光标位为(1,4)
 MOV BX,0
 MOV CX,1
 MOV AH,1
 INT 21H
 CBW
 MOV OPER,AX

 CURS 1,7  
 MOV BX,0 
 MOV CX,1 

 MOV AH,1 
 INT 21H  
 CMP AL,30H 
 JAE J3 
 JMP D2 
 J3: CMP AL,39H  
 JBE J4 
 JMP D2  
 J4: SUB AL,30H 
 CBW 
 XCHG AX,BX 
 MOV DI,10 
 MUL DI 
 XCHG AX,BX 
 ADD BX,AX 

 MOV DATA2,BX
 CURS 1,10 ;设置光标的位置为(1.10)  
 DISPMSG MSG0
  
 MOV AX,DATA1 
 MOV BX,DATA2 
 PUSH AX 
 PUSH BX 
 
 MOV AX,OPER
  
 CMP AL,'+' 
 JE ADDI ;如果运算符为+,则计算两数之和 
 CMP AL,'-' 
 JE SUBT ;如果运算符为-,则计算两数之差 
 CMP AL,'*' 
 JE MULT ;如果运算符为*,则计算两数之积 
 CMP AL,'/' 
 JE DIVI ;如果运算符为/,则计算两数之商 
 CURS 2,44 ;设置光标为(2,44)出错信息显示的位置
 DISPMSG MSG2 ;在屏幕上输出提示信息 
 JMP D1 

;---------------------------------------- 
;ADD THE TWO DATAS  
 ADDI: POP BX 
 POP AX 
 ADD AX,BX ;计算两数字之和 
 PUSH AX 
 CURS 1,12 ;设置光标位置为(1,12) 
 POP AX 
 CALL CHANGE ;将结果转换为十进制数 
 JMP D1 
;--------------------------------------- 
;SUBTRACT THE TWO DATAS 
 SUBT: POP BX 
 POP AX 
 CMP AX,BX ;比较两数大小 
 JAE D0 ;如果AX>=BX则跳转 
 XCHG AX,BX 
 PUSH AX 
 PUSH BX 
CURS 1,12 ;设置光标位置为(1,12)
 DISPMSG MSG5 ;在屏幕上显示负号 
 POP BX 
 POP AX 
 D0: SUB AX,BX ;计算两数之差 
 PUSH AX 
CURS 1,12 ;设置光标位置为(1,12) 
 POP AX 
 CALL CHANGE ;将结果转换为十进制数 
 JMP D1 
;--------------------------------------- 
;MULTIPLY THE TWO DATAS  
 MULT: POP BX 
 POP AX 
 MUL BX ;计算两数之积 
 PUSH AX 
CURS 1,12 ;设置光标位置为(1,12) 
 POP AX 
 CALL CHANGE ;将结果转换为十进制数 
 JMP D1 
;--------------------------------------- 
;DIVIDE THE TWO DATAS 
 DIVI: POP BX 
 POP AX 
 CMP BX,0 ;判断除数是否为0 
 JE ERROR ;如果是0则跳转 
 CWD 
 DIV BX ;计算两数之商 
 PUSH DX 
 PUSH AX 
CURS 1,12 ;设置光标位置为(1,12) 
 POP AX 

 CALL CHANGE ;将十六进制数转换为十进制数 
 POP DX 
 CMP DX,0 
 JNE LOP ;如果DX不等于0则跳转 
 JMP D1 

 LOP: MOV CX,4 ;设置精确度为小数点后4位 
 PUSH DX 
 DISPMSG MSG6 ;输出小数点 
 POP DX 

 CON: PUSH BX 
 MOV AX,DX 
 MOV BX,10 
 MUL BX 
 POP BX 
 CWD ;将AX的内容符号扩展到双字 
 DIV BX ;计算小数点后每一位的数字 
 PUSH DX 
 PUSH CX 
 CALL CHANGE ;将十六进制数转化为十进制数 
 POP CX 
 POP DX 
 CMP DX,0 ;判断是否已经计算到小数点后第六位 
 JE D1 ;如果是,则跳转 
 LOOP CON ;如果不是,就继续计算 
 ERROR: CURS 2,33 ;设置光标位置为(2,33) 
 DISPMSG MSG8 ;提示出错 

 D1: RET     ;返回
 D2: PUSH AX 
 PUSH BX 
 CURS 3,33 ;设置光标位置为(3,33) 
 DISPMSG MSG7 ;提示输入出错 
 POP BX 
 POP AX 
 RET       ;返回

 BEGIN ENDP 
;---------------------------------------- 
 MAIN PROC NEAR 
  
 MOV AX,@DATA 
 MOV DS,AX 
 MOV ES,AX 
 PUSH DS 
 XOR AX,AX 
 PUSH AX 
 MOV DATA2,0  
 MOV DATA1,0 
 MOV OPER,0
 AGAIN: 
 CALL BEGIN 
 CURS 4,23 ;设置光标位置为(4.23) 
 DISPMSG MSG3 ;在屏幕上输出提示信息,提示退出的方法 
 CURS 5,23 ;设置光标位置为(5.23) 
 DISPMSG MSG4 ;在屏幕上输出提示信息,提示继续的方法 
 MOV AH,7 ;键盘输入,无回显 
 INT 21H ;DOS调用 
 CMP AL,27 ;判断输入的是否为ESC 
 JNE AGAIN ;如果不是就继续执行以上运算 
 EXIT: MOV AX,4C00H ;如果是就退出系统 
 INT 21H ;DOS调用 
 MAIN ENDP 
 END MAIN




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -