📄 fbnq.asm
字号:
STACK SEGMENT STACK 'STACK'
DW 100H DUP(?)
TOP LABEL WORD
STACK ENDS
;N=20
DATA SEGMENT
KEYBUF DB 100
DB ?
DB 100 DUP(?)
STRING1 DB 'Please input decimal data: $' ;输入提示字符串
BUF DW 100 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AX,STACK
MOV SS,AX
LEA SP,TOP
LEA DX,STRING1 ;显示出"输入提示字符串"
MOV AH,09H
INT 21H
MOV AH,0AH
LEA DX,KEYBUF
INT 21H
LEA SI,KEYBUF+1
CALL TRANS
CALL DISPCR ;屏幕光标回车换行
MOV CX,AX
SUB CX,2
LEA SI,BUF
CALL CALF
MOV AH,4CH
MOV AL,0
INT 21H
CALF PROC NEAR ;计算斐波那契数列子程序
PUSH AX
PUSH BX
PUSH CX
PUSH SI
MOV AX,1
MOV BX,1
MOV [SI],AX
MOV [SI+2],BX
ADD SI,4
CALF1:
ADD AX,BX
MOV [SI],AX
ADD SI,2
XCHG AX,BX
LOOP CALF1
POP SI
POP CX
POP BX
POP AX
RET
CALF ENDP
TRANS PROC NEAR ;将输入的字符串转换为16进制数子程序
PUSH CX
PUSH DX
PUSH SI
XOR AX,AX
XOR CX,CX
MOV CL,[SI]
INC SI
MOV AL,[SI]
INC SI
SUB AL,30H
DEC CX
JCXZ TRANSF2
MOV BX,10
TRANSF1:
MUL BX
JC TRANSF_ERR
MOV DL,[SI]
INC SI
SUB DL,30H
ADD AL,DL
ADC AH,0
JC TRANSF_ERR
LOOP TRANSF1
MOV BX,0
TRANSF2:
JMP TRANSF_OK
TRANSF_ERR:
MOV BX,-1
TRANSF_OK:
POP SI
POP DX
POP CX
RET
TRANS ENDP
DISPCR PROC NEAR ;屏幕光标回车换行子程序
PUSH AX
PUSH DX
MOV AH,2
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
POP DX
POP AX
RET
DISPCR ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -