📄 ack.asm
字号:
DSEG SEGMENT
MSG1 DB 'Input the M:$'
MSG2 DB 'Input the N:$'
MSG3 DB 'The Result Is:$'
INBUF1 DB 32,?,32 DUP('$')
INBUF2 DB 32,?,32 DUP('$')
RESULT DB 5 DUP('?'),0DH,0AH,'$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV DX,OFFSET MSG1
CALL DSPMESS
MOV DX,OFFSET INBUF1
MOV AH,0AH
INT 21H
CALL CRLF
MOV DX,OFFSET MSG2
CALL DSPMESS
MOV DX,OFFSET INBUF2
MOV AH,0AH
INT 21H
CALL CRLF
MOV BX,OFFSET INBUF1+1
CALL DTOBIN
MOV DX,AX
MOV BX,OFFSET INBUF2+1
CALL DTOBIN
CALL ACK
MOV AX,BX
MOV BX,OFFSET RESULT
CALL BINTOD
MOV DX,OFFSET MSG3
CALL DSPMESS
MOV DX,OFFSET RESULT
MOV AH,09H
INT 21H
CALL CRLF
MOV AH,4CH
INT 21H
DTOBIN PROC
PUSH BX
PUSH CX
PUSH DX
XOR AX,AX
MOV CL,[BX]
INC BX
XOR CH,CH
JCXZ DTOBIN2
DTOBIN1: MOV DX,10
MUL DX
MOV DL,[BX]
INC BX
AND DL,0FH
XOR DH,DH
ADD AX,DX
LOOP DTOBIN1
DTOBIN2: POP DX
POP CX
POP BX
RET
DTOBIN ENDP
ACK PROC
PUSH DX
CMP DX,0
JZ OVER
CMP AX,0
JZ UNOVER
DEC AX
CALL ACK
MOV AX,BX
DEC DX
CALL ACK
POP DX
RET
UNOVER: DEC DX
MOV AX,1
CALL ACK
POP DX
RET
OVER: MOV BX,AX
INC BX
POP DX
RET
ACK ENDP
BINTOD PROC;把二进制数转换为十进制数
PUSH AX
PUSH CX
PUSH DX
PUSH SI
MOV SI,5
MOV CX,10
BINTOD1:XOR DX,DX
DIV CX
ADD DL,30H
DEC SI
MOV [BX][SI],DL
OR SI,SI
JNZ BINTOD1
POP SI
POP DX
POP CX
POP AX
RET
BINTOD ENDP
;显示字符串子程序,入口为字符串首址=DS:DX,字符串以'$'为结束符
DSPMESS PROC
PUSH AX
MOV AH,9
INT 21H
POP AX
RET
DSPMESS ENDP
;输出回车换行子程序
CRLF PROC
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
CRLF ENDP
CSEG ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -