汇编 简单的两个一位数相加

    本来两个数相加,用c语言写的话。

#include<stdio.h>
int main(){
    int i =8,j = 9;
    printf("%d",i+j);
}

  到了汇编,第一次写的时候,连个最简单的都想了半天。

DATAS  SEGMENT   定义数据段标识为“DATAS” 
    OP1 DB 09H				定义op1 为 byte类型  值为09H
    OP2 DB 08H           定义op2 为 byte类型  值为08H
    DEFULT DB ?    定义DEFULT 为 byte类型  值为待定
    CARRY DB ?    定义CARRY 为 byte类型  值为待定
DATAS  ENDS			数据段结束

STACKS  SEGMENT   堆栈段开始
STACKS  ENDS       堆栈段结束

CODES  SEGMENT				定义代码段标识为“CODES”
     ASSUME    CS:CODES,DS:DATAS,SS:STACKS 设置数据段和代码段的默认寄存器
START:       起始标志
    MOV AX,DATAS
    MOV DS,AX			将DATAS赋值给DS
    
    MOV AL,OP1		将OP1赋值给AL
    ADD AL,OP2		
    AAA 		非压缩BCD码加法调整
		
    
    JC  SS2		如果进位 跳转到SS2
    JMP SS3		跳转SS3
    JNC SS1		不进位 跳转SS2				
    JMP SS3             跳转SS3

SS1: MOV CARRY,30H      	条件要求,给CARRY加上30H
    
    SS2: MOV CARRY,31H		条件要求,给CARRY加上31H

    
    SS3:MOV DEFULT,AL
        ADD DEFULT,30H;
    
    MOV DL,CARRY   将CARRY赋值给DL
    MOV AH,2
    INT 21H  		在控制台上输出字符串
    
    MOV DL,DEFULT	将DEFAULT赋值给DL
    MOV AH,2
    INT 21H		在控制台上输出字符串

     
    MOV AH,4CH		正常结束程序
    INT 21H
CODES  ENDS						
END  START						START结束






     注释是在中文前面加分号。没想到,一个进位,也要判断,一个的输出也是那么的麻烦,不过,原理性的东西就在这里,语言原来让编程美好了许多。不然你写个加法都这样,让你做个计算器出来还了得。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iaiti

赏顿早餐钱~

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

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

打赏作者

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

抵扣说明:

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

余额充值