汇编语言重写除零中断

最近因为有个大作业要写计算器,故考虑重写除零中断给予提示

DATA SEGMENT
BUFFER1 DB 20 DUP(?)
B1N     DB 0
BUFFER2 DB 20 DUP(?)
B2N     DB 0
FORMULA DB 30
        DB ?
CHAR    DB 30 DUP('$')
        DB '$'

WELCOME DB 'START TO ENTER THE FORMULA:',0AH,0DH,'$'
WARN DB 'You are tring to divide 0!',0AH,0DH,'$'
DATA ENDS

STACK SEGMENT STACK
S DB 256 DUP(?)
STACK ENDS
;换行回车宏
HHHC MACRO
        MOV AH,2
        MOV DL,0DH
        INT 21H
        MOV AH,2
        MOV DL,0AH
        INT 21H
ENDM

CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

;重写除0中断************************************************************************
INT0 PROC FAR
PUSH DX
PUSH AX

MOV DX,OFFSET WARN
MOV AH,09H
INT 21H

POP AX
POP DX
MOV AH,4CH
INT 21H	
IRET
INT0 ENDP
;***********************************************************************************
START:
MOV AX,0
MOV ES,AX
MOV DI,0
MOV AX,OFFSET INT0
CLD 
STOSW
MOV AX,SEG INT0
STOSW
;将程序地址写入中断向量表
;************************************************************************************
MOV AX,DATA
MOV DS,AX
MOV ES,AX

MOV DX,OFFSET WELCOME
MOV AH,09H
INT 21H

MOV DX,OFFSET FORMULA  ;将输入的式子放入FORMULA中,以CHAR的offset为首地址
MOV AH,0AH
INT 21H
;各个运算符的ascii码 '('-28h,')'-29h,'*'-2ah,'+'-2bh,'-'-2d,'/'2fh

MOV DX,OFFSET CHAR;输出刚才输入的计算式
MOV AH,09H
INT 21H
HHHC

;除零之后出现bug
;CALL INT0
;除零测试:先放着最后再测试
MOV BL,0
DIV BL

MOV AH,4CH
INT 21H


CODE ENDS
END START

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值