此程序实现原码的加法运算

;此程序实现原码的加法运算
DATAS SEGMENT
    ;此处输入数据段代码
    STRING1 DB 'THE OPERATE:$'
    STRING2 DB 'OVERFLOW$'
    STRING3 DB 'ERROR! INPUT AGAIN:$'
    STRING4 DB 'THE RESULT:$'
    SDATA1_H DB 10H
    SDATA1_L DB 01H
    SDATA2_H DB 32H
    SDATA2_L DB 09H
    RDATA_H DB ?
    RDATA_L DB ?
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
MAIN PROC FAR
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    PUSH DS
    XOR AX,AX
    PUSH AX
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    LEA DX,STRING1
    MOV AH,09H
    INT 21H
INPUT:
    MOV AH,01H
    INT 21H
    CMP AL,'+'
    JZ  OADD
    CMP AL,'-'
    JZ  OSUB
    LEA DX,STRING3
    MOV AH,09H
    INT 21H
    JMP INPUT
OSUB:
 MOV AH,SDATA2_H
 XOR AH,80H
 MOV SDATA2_H,AH
OADD:   
 MOV AH,SDATA1_H
 AND AH,80H  
 MOV BH,AH;保存被加数符号位
 MOV AL,SDATA2_H
 AND AL,80H
    XOR AH,AL
  CMP AH,0
    JZ  DADD
DSUB:
    CALL INIT
    CALL NSUB
    JMP EXIT1
DADD:
    CALL INIT
    CALL NADD
EXIT1:   
    RET
MAIN ENDP

INIT PROC NEAR
    MOV AH,SDATA1_H
 AND AH,7FH;清0被加数符号位
 MOV AL,SDATA2_H
 AND AL,7FH;清0加数符号位
    RET
INIT ENDP

NADD PROC NEAR
 PUSH AX
 PUSH BX
 PUSH CX
 PUSH DX
 MOV CH,SDATA1_L
 MOV CL,SDATA2_L
 ADD CH,CL
 MOV RDATA_L,CH
 ADC AH,AL
 MOV RDATA_H,AH
 AND AH,80H
    CMP AH,0
    JNZ  EXIT2
    AND AH,7FH
    OR  AH,BH
    CALL PRINT
    JMP EXIT3
EXIT2:

    MOV DL,13
    MOV AH,02H
    INT 21H
    MOV DL,10
    MOV AH,02H
    INT 21H
    LEA DX,STRING2
    MOV AH,09H
    INT 21H
 POP DX
 POP CX
 POP BX
 POP AX
 RET
EXIT3:
    POP DX
 POP CX
 POP BX
 POP AX
 RET
NADD ENDP


NSUB PROC NEAR
    PUSH AX
    PUSH CX
 MOV CH,SDATA1_L
 MOV CL,SDATA2_L
 SBB CH,CL
 MOV RDATA_L,CH
 SBB AH,AL
 MOV RDATA_H,AH
 AND AH,80H
 CMP AH,0
 JZ  OPERATE
 CALL CMPT
OPERATE:
 CALL PRINT
 POP CX
 POP AX
 RET
NSUB ENDP
  
CMPT PROC NEAR
    PUSH AX
    PUSH BX
 MOV AH,RDATA_L
 XOR AH,0FFH
 ADD AH,1
 MOV RDATA_L,AH
 MOV AH,RDATA_H
 XOR AH,0FFH
 XOR BH,80H
 AND AH,7FH
 OR  AH,BH
 MOV RDATA_H,AH
 POP BX
 POP AX
 RET
CMPT ENDP

PRINT PROC NEAR
    PUSH AX
    PUSH BX
    PUSH CX
    PUSH DX
    MOV DL,13
    MOV AH,02H
    INT 21H
    MOV DL,10
    MOV AH,02H
    INT 21H
    LEA  DX,STRING4
    MOV  AH,09H
    INT 21H
 MOV BL,RDATA_L
 MOV BH,RDATA_H
 MOV CX,16
PEAT:
    ROL BX,1
 MOV DL,BL
 AND DL,01H
 ADD DL,30H
 MOV AH,02H
 INT 21H
 DEC CX
 JNZ PEAT
 POP DX
 POP CX
 POP BX
 POP AX
 RET
PRINT ENDP

CODES ENDS
    END START

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值