📄 axbx.asm
字号:
; 此段代码是显示曲线y=ax^3+bx^2+cx+d
DATA SEGMENT
MESS1 DB 0FFH,'press 4 to show ax^3+bx^2+cx+d',0DH,0AH
DB 0FFH,0FFH,' ANYKEY TO PAUSE' ,0DH,0AH
DB 0FFH,0FFH,' 5 TO QUIT',0DH,0AH ;显示提示信息
DB ' parameter a = 0.'
NUMA DB 31H,0DH,0AH
DB ' parameter b = 0.'
NUMB DB 31H,0DH,0AH
DB ' parameter c = '
NUMC DB 31H,0DH,0AH
DB ' parameter d = ' ;显示四个参数a,b,c,d的当前数值
NUMD DB 31H,0DH,0AH ,'$'
SUM DB 121 DUP(?), 0DH,0AH
TEMPNUM DB 121 DUP(?),'$' ;零时累加器,用以暂时存储几项求和的值
WA DB ' enter the value ', 61H,':','$' ;显示a参数修改提示信息
WB DB ' enter the value ', 62H,':','$' ;显示b参数修改提示信息
WC DB ' enter the value ', 63H,':','$' ;显示c参数修改提示信息
WD DB ' enter the value ', 64H,':','$' ;显示d参数修改提示信息
NUM DW 50H
;************** x table (totally 121 sample values for each parameter)
;x^3数值表,共121个值
AXBUF3 DB 216D,205D,195D,185D,176D,166D,157D,149D,141D,133D
DB 125D,118D,111D,104D,97D, 91D, 85D, 80D, 74D, 69D
DB 64D,59D,55D,51D,47D,43D,39D,35D,33D,30D
DB 27D,24D,22D,20D,18D,16D,14D,12D,11D,9D
DB 8D,7D,6D,5D,4D,3D,3D,2D,2D,1D
DB 1D,1D,1D,0D,0D,0D,0D,0D,0D,0D
DB 0
DB 0D, 0D, 0D, 0D ,0D, 0D, 0D, 1D, 1D, 1D ;;;x=0.1
DB 1D, 2D, 2D, 3D, 3D, 4D, 5D, 6D, 7D, 8D
DB 9D, 11D, 12D, 14D, 16D, 18D, 20D, 22D, 24D, 27D
DB 30D, 33D, 36D, 39D, 43D, 47D, 51D, 55D, 59D, 64D
DB 69D, 74D, 80D, 85D, 91D, 97D, 104D, 111D, 118D, 125D
DB 133D, 141D, 149D, 157D, 166D, 176D, 185D, 195D, 205D, 216D
;x^2数值表,共121个值
BXBUF2 DB 36D,35D,34D,32D,31D,30D,29D,28D,27D,26D
DB 25D,24D,23D,22D,21D,20D,19D,18D,18D,17D
DB 16D,15D,14D,14D,13D,12D,12D,11D,10D,10D
DB 9D,8D,8D,7D,7D,6D,6D,5D,5D,4D
DB 4D,4D,3D,3D,3D,2D,2D,2D,1D,1D
DB 1D,1D,1D,0D,0D,0D,0D,0D,0D,0D
DB 0D
DB 0D,0D,0D,0D,0D,0D,0D,1D,1D,1D
DB 1D,1D,2D,2D,2D,3D,3D,3D,4D,4D
DB 4D,5D,5D,6D,6D,7D,7D,8D,8D,9D
DB 10D,10D,11D,12D,12D,13D,14D,14D,15D,16D
DB 17D,18D,18D,19D,20D,21D,22D,23D,24D,25D
DB 26D,27D,28D,29D,30D,31D,32D,34D,35D,36D
;x^1数值表,共121个值
CXBUF1 DB 120D,118D,116D,114D,112D,110D,108D,106D,104D,102D
DB 100D,98D,96D,94D,92D,90D,88D,86D,84D,82D
DB 80D,78D,76D,74D,72D,70D,68D,66D,64D,62D
DB 60D,58D,56D,54D,52D,50D,48D,46D,44D,42D
DB 40D,38D,36D,34D,32D,30D,28D,26D,24D,22D
DB 20D,18D,16D,14D,12D,10D,8D,6D,4D,2D
DB 0
DB 2D,4D,6D,8D,10D,12D,14D,16D,18D,20D
DB 22D,24D,26D,28D,30D,32D,34D,36D,38D,40D
DB 42D,44D,46D,48D,50D,52D,54D,56D,58D,60D
DB 62D,64D,66D,68D,70D,72D,74D,76D,78D,80D
DB 82D,84D,86D,88D,90D,92D,94D,96D,98D,100D
DB 102D,104D,106D,108D,110D,112D,114D,116D,118D,120D
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
CALL CRTSET ;显示模式设置
LEA DX,MESS1 ;显示提示信息
MOV AH,09H
INT 21H
LABAL: MOV DL,0FFH ;读键盘
MOV AH, 06H
INT 21H
MOV BL,AL
CMP BL,34H ;是4否?,是则显示曲线
JZ COUNT
CMP BL,35H ;是5则退出
JZ TEMP
JMP LABAL
COUNT: MOV SI,0
MOV CL,121
TCOU: MOV TEMPNUM[SI],100 ;累加器初始值为100是显示位置调整 ,坐标提高
INC SI
LOOP TCOU
MOV SI,0
MOV AH,0
MOV CL,121
NEXTC: MOV AL,AXBUF3[SI] ;取x^3表值到AL
MOV BL,NUMA ;取系数a 与之相乘
SUB BL,30H
MUL BL
MOV BL,10
DIV BL ;将乘积缩小10倍
MOV AH,0
CMP SI,60 ;前60个值作负数处理
JLE DJIAN ;跳至负数处理段
ADD TEMPNUM[SI],AL ;后61个值直接加到累加器
_DJIAN:
MOV AL,BXBUF2[SI] ;取x^2表值到AL
MOV BL,NUMB ;取系数b 与之相乘
SUB BL,30H
MUL BL
MOV BL,10
DIV BL ;将乘积缩小10倍
MOV AH,0
ADD TEMPNUM[SI],AL ; 将值加到累加器
MOV BL,NUMD ;取参数d的值
SUB BL,30H
ADD TEMPNUM[SI],BL
MOV AL,CXBUF1[SI] ;取x^1表值到AL
MOV BL,NUMC ;取系数c 与之相乘
SUB BL,30H
MUL BL
MOV BL,20
DIV BL ;将乘积缩小20倍
CMP SI, 60 ;前60个值作负数处理
JL DJIAN1
ADD TEMPNUM[SI],AL ;后61个值直接加到累加器
JMP PJIAN
TEMP: JMP TEMP1
DJIAN: SUB TEMPNUM[SI],AL ;x^3负数处理段
JMP _DJIAN ;跳至处理x^2
DJIAN1: SUB TEMPNUM[SI],AL ;x^1负数处理段
JMP PJIAN
PJIAN:
INC SI
LOOP NEXTC ;处理下一个值
JMP IS2 ;累加完之后至显示部分
TEMP1: JMP QUIT
_LABAL: JMP LABAL
IS2: MOV SI, 0
DD1: MOV AL,TEMPNUM[SI] ;取各项累加的值
JMP RESET ;画点
_D: CALL CRTSET ;清屏
LEA DX,MESS1
MOV AH,09H
INT 21H
JMP COUNT ;重新累加
RESET: CALL ADCDIS ;调用画点子程序
_C: MOV DL,0FFH ;读键盘
MOV AH,06H
INT 21H
JZ _A
CMP AL,35H
JZ _LABAL ;是5 则跳至上一菜单
CMP AL,61H
JZ SHOWA ;是a 则跳至参数a处理段
CMP AL,62H
JZ SHOWB ;是b 则跳至参数b处理段
CMP AL,63H
JZ SHOWC ;是c 则跳至参数c处理段
CMP AL,64H
JZ SHOWD ;是d 则跳至参数d处理段
JMP LABAL
_A: CMP SI,78H ;是否画完120个点
JZ _C ;若画完则只扫描键盘
INC SI
JMP DD1 ;取下一个值
SHOWA: LEA DX,WA ;显示提示信息
MOV AH,09H
INT 21H
_B: MOV DL,0FFH
MOV AH,06H
INT 21H
JZ _B ;读键盘值
CMP AL,31H
JL _B
CMP AL,39H ;取0至9之间的数
JG _B
MOV NUMA,AL ;修改系数a的值
MOV NUM ,50H ;重新设置横坐标的起始值为80
MOV SI,0
JMP _D
SHOWB: LEA DX,WB ;显示提示信息
MOV AH,09H
INT 21H
_B1: MOV DL,0FFH
MOV AH,06H
INT 21H ;读键盘值
JZ _B1
CMP AL,31H
JL _B1
CMP AL,39H
JG _B1 ;取0至9之间的数
MOV NUMB,AL ;修改系数b的值
MOV NUM ,50H ;重新设置横坐标的起始值为80
MOV SI,0
JMP _D
SHOWC: LEA DX,WC ;显示提示信息
MOV AH,09H
INT 21H
_C1: MOV DL,0FFH
MOV AH,06H
INT 21H
JZ _C1 ;读键盘值
CMP AL,31H
JL _C1
CMP AL,39H ;取0至9之间的数
JG _C1
MOV NUMC,AL ;修改系数c的值
MOV NUM ,50H ;重新设置横坐标的起始值为80
MOV SI,0
JMP _D
SHOWD: LEA DX,WB ;显示提示信息
MOV AH,09H
INT 21H
_B2: MOV DL,0FFH
MOV AH,06H
INT 21H ;读键盘值
JZ _B2
CMP AL,31H
JL _B2
CMP AL,39H
JG _B2 ;取0至9之间的数
MOV NUMD,AL ;修改系数d的值
MOV NUM ,50H ;重新设置横坐标的起始值为80
MOV SI,0
JMP _D
QUIT:
MOV AH,4CH
INT 21H
CRTSET PROC NEAR ;显示设置子程序
PUSH AX
MOV AH,0
MOV AL,06H
INT 10H
POP AX
RET
CRTSET ENDP
ADCDIS PROC NEAR ;画点子程序
S12: PUSH DX
PUSH CX
PUSH AX
PUSH BX
XOR AH,AH
MOV DL,160
MUL DL
MOV DL,255
DIV DL
XOR AH,AH
MOV DX,AX
MOV AX,160
SUB AX,DX
ADD AX,20
MOV DX,AX
MOV AX,NUM
MOV BX,AX
MOV CX,BX
MOV AH,0CH
MOV AL,1
INT 10H
INC BX
MOV NUM,BX
CMP BX,0C9H
JNZ DISEND
MOV BX,50H
MOV NUM,BX
DISEND: POP BX
POP AX
POP CX
POP DX
RET
ADCDIS ENDP
CRTRST PROC NEAR ;显示重设置子程序
PUSH AX
MOV AH,0
MOV AL,3
INT 10H
POP AX
RET
CRTRST ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -