汇编实现通过输入被加数与加数,实现加法

DATAS SEGMENT
    OP1 DW 0
    OP2 DW 0
    RESULT DB 20 DUP(?)
    CARRY DB ?
    BUFSIZE DB 25
    ACTCHAR DB ?
    CHARTEXT DB 26 DUP(20H);获取储存空间
             DB '$'   

DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV DX,OFFSET BUFSIZE
    MOV AH,0AH
    INT 21H
    MOV DX,OFFSET CHARTEXT ;键入字符串
    MOV AH,09H
    INT 21H
    MOV SI,OFFSET CHARTEXT ;获取字符串
    MOV CL,10D
    SBB1:   ;获取真值OP1
    MOV BL,[SI]
    
    CMP BL,30H;比较字符,进行跳转
    JB SBB2
    CMP BL,39H;比较字符,进行跳转
    JA SBB3
    SUB BL,30H;减去ASCII码,取得真值
    MOV AX,OP1;赋值AX
    MUL CL;AX=AL*CL
    MOV BH,0
    ADD AX,BX
    MOV OP1,AX;获取真值赋予OP1,取得被加数
    INC SI
    JMP SBB1;循环体SBB1
    SBB2:
    SBB3:
    INC SI  ;字符位增一,跳过算法符号
    SBB4:
    MOV BL,[SI]
    CMP BL,30H;比较字符,进行跳转
    JB SBB5
    CMP BL,39H;比较字符,进行跳转
    JA SBB6
    SUB BL,30H;减去ASCII码,取得真值
    MOV AX,OP2;赋值AX
    MUL CL;AX=AL*CL
    MOV BH,0;BX高位BH清零
    ADD AX,BX;真值相加,AX=AX+BX(BL)
    MOV OP2,AX;取得真值赋予OP2,取得加数
    INC SI
    JMP SBB4;循环体SBB4
    SBB5:
    SBB6:
                ;加法计数
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,OP1
    ADD AX,OP2
    MOV BX,0
    MOV CL,10D   ;取除数
         ;计算结果
    JSB1:
    DIV CL
    ADD AH,30H   ;转为ASCII码
    INC BX
    MOV SI,OFFSET RESULT
    MOV [SI+BX],AH    ;赋值数组
    MOV AH,0    ;AL取代AX的值,AH取零即可
    CMP AX,0H   ;判断商是否为零
    JNZ JSB1
    JZ NEXT
    NEXT:
        ;输出结果,从高位依次输出
    JSB2:
    MOV SI,OFFSET RESULT
    MOV DL,[SI+BX]    ;取出数组的数赋值给DL
    MOV AH,2
    INT 21H
    DEC BX
    CMP BX,0H
    JNZ JSB2
    ;此处输入代码段代码
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值