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

📄 judge.asm

📁 用汇编语言实现判断二元一次方程是否有根
💻 ASM
字号:
;判断一个二次方程 ax2 + 6x + c = 0 是否有实根,其中a和c均为字节数,从键盘输入
DATA SEGMENT
	BIN_A DW ?	;系数A
	BIN_B DW 6	;系数B
	BIN_C DW ?	;系数C
	BUF_A DB 6
    	  DB ?
      	  DB 6 DUP(0)
	COUNT_A EQU $ - BUF_A - 2
	BUF_C DB 6
    	  DB ?
      	  DB 6 DUP(0)
	COUNT_C EQU $ - BUF_C - 2
	LR_COUNT DB 2 
	BIN DW ?		;TEMP
	SA DB 'X=','$'
	SC DB 10,'Z=','$'
	RESULT1 DB 10,13,'SOLVE EXIST','$'
	RESULT2 DB 10,13,'SOLVE NOT EXIST','$'
DATA ENDS


CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
BEGIN:
	;寄存器赋初值
  	MOV AX,DATA   	
  	MOV DS,AX
	;键盘中断输入A
	MOV DX,OFFSET SA
	MOV AH,09
	INT 21H
	MOV DX,OFFSET BUF_A
	MOV AH,10
	INT 21H
	;键盘中断输入C
	MOV DX,OFFSET SC
	MOV AH,09
	INT 21H
	MOV DX,OFFSET BUF_C
	MOV AH,10
	INT 21H

	;将A转换成二进制存入BIN_A
	MOV AX,COUNT_A
	PUSH AX		;参数1
	MOV AX,2+OFFSET BUF_A
	PUSH AX		;参数2
	CALL ATOB
	MOV DX,BIN
	MOV BIN_A,DX
	;将C转换成二进制存入BIN_C
	MOV AX,COUNT_C
	PUSH AX		;参数1
	MOV AX,2+OFFSET BUF_C
	PUSH AX		;参数2
	CALL ATOB
	MOV DX,BIN
	MOV BIN_C,DX

	;乘法
	MOV AX,BIN_B
	MOV CX,BIN_B
	IMUL CX
	MOV BX,AX	;DX值为BIN_B*BIN_B
	MOV AX,BIN_A
	MOV CX,BIN_C
	IMUL CX		;AX值为X*Z
	MOV CX,4
	IMUL CX		;AX值为4*X*Z

	CMP BX,AX
	JGE ROOT
NOROOT:	MOV DX,OFFSET RESULT2
	MOV AH,09H
	INT 21H		;输出结果:无根
	JMP EXIT
ROOT:	MOV DX,OFFSET RESULT1
	MOV AH,09H
	INT 21H		;输出结果:有根

	;结束
EXIT:	MOV AH,4CH	
	INT 21H		;退出
CODE ENDS

;子程序,将输入的ASCII码转换成二进制存入BIN
PROCE SEGMENT
	ASSUME CS:PROCE,DS:DATA
ATOB	PROC FAR
	PUSH AX		;保存现场
	PUSH BX
	PUSH CX
	PUSH BP
	MOV BP,SP
	PUSHF		
	
	MOV AX,DATA
	MOV DS,AX
	MOV SI,[BP+12]	;OFFSET BUF_A,OFFSET BUF_B
	MOV CX,[BP+14]
	XOR AX,AX
AGAIN:
	ADD AX,AX
	MOV BX,AX
	ADD AX,AX
	ADD AX,AX
	ADD AX,BX
	MOV BH,0
	MOV BL,[SI]
	SUB BL,30H
	ADD AX,BX
	INC SI
	CMP [SI],0DH	;回车结束
	JLE RETURN
	LOOP AGAIN
RETURN:	MOV BIN,AX	;存数
	POPF		;恢复现场
	POP BP
	POP CX
	POP BX
	POP AX
	RET 4
ATOB	ENDP
PROCE 	ENDS

	
END BEGIN

⌨️ 快捷键说明

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