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

时间:2021-08-21 03:34:29

    本来两个数相加,用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             跳转SS3SS1: 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 21HCODES  ENDSEND  STARTSTART结束

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