汇编 二则运算

     上次写到可输入的两位数相加,这次,为了让运算更加灵活,可以进行加减运算。思路就是读取数字,当数字中断时判断符号为加号还是减号。再继续读取,然后运算时与两位数相加通过原理。减时用SUB一下即可。

    

DATAS SEGMENT
	OP1 DW 0
	OP2 DW 0
	OPERATOR DB ?
	RESULT DB 10 DUP (?)
	BUFSIZE DB 25
	ACTCHAR DB ?
	CHARTEXT DB 26 DUP ('$')
      
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 SI,OFFSET CHARTEXT
    
SS1:MOV CL,[SI]
    CMP CL,30H
    JB  GETCODE	;跳转到ss6,此步为运算符号
    CMP CL,39H
    JA  GETCODE
    SUB CL,30H
    CBW
    MOV AX,OP1
    MOV BX,10
    MUL BX
    ADD AX,CX
    MOV OP1,AX
    INC SI
    JMP SS1
    
GETCODE:MOV BL,[SI]			;把运算符号赋给BL
	MOV OPERATOR,BL	
	JMP SS2
     
SS2:
	INC SI    
    MOV CL,[SI]
    CMP CL,30H
    JB  SS6
    CMP CL,39H
JA  SS6		;跳转到ss6,读取接下来的数字
    SUB CL,30H
    CBW
    MOV AX,OP2
    MOV BX,10
    MUL BX
    ADD AX,CX
    MOV OP2,AX
    JMP SS2
    
SS6: 
CMP OPERATOR,2DH
	 JZ OPENJIAN			;若为减号,跳转到jian
	 JNZ OPENJIA			;若为加号,跳转到jia
	 

OPENJIAN: CALL JIAN
		JMP SS11			;正常退出

OPENJIA: CALL JIA 
 		JMP SS11			;正常退出

JIA PROC	    
SS3:
	MOV DL,10
    MOV AH,2
    INT 21H
    
    MOV AX,OP1
    ADD AX,OP2 
    MOV BX,0 
    MOV CL,10
    
SS4:DIV CL    
    ADD AH,30H 
    MOV SI, OFFSET RESULT
    MOV [SI+BX],AH 
    INC BX 
    CBW 
    CMP AL,0
    JNZ SS4 
    
SS5:DEC BX 
    MOV DL,[SI+BX]
    MOV AH,2
    INT 21H 
    CMP BX,0
    JNZ SS5 
    
  RET
JIA ENDP


JIAN PROC 
	    
SS7:
	
	MOV DL,10
    MOV AH,2
    INT 21H
    
    MOV AX,OP1
    SUB AX,OP2 
    MOV BX,0 
    MOV CL,10
    
SS8:DIV CL    
    ADD AH,30H 
    MOV SI, OFFSET RESULT
    MOV [SI+BX],AH 
    INC BX 
    CBW 
    CMP AL,0
    JNZ SS8 
    
SS9:DEC BX 
    MOV DL,[SI+BX]
    MOV AH,2
    INT 21H
    CMP BX,0
    JNZ SS9 
    RET
JIAN ENDP

SS11:    MOV AH,4CH
    INT 21H
CODES ENDS
    END START




        其实入门就入到这里而已,接下来的是与硬件结合的东西,个人不是太有兴趣,还是专心学自己的东西,不过,这门东西还是有用,至少让你知道很原始的东西,所以刚开始感觉很难写。因为底层,所以黑客和大牛们都是用这个,这个可以有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iaiti

赏顿早餐钱~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值