042.非压缩AAA指令计算加法

本文介绍了一个使用ASCII码实现的固定小数点加法运算器的汇编语言代码。该运算器可以处理两个预定义的字符串,每个字符串代表一个带有小数点的数字,并返回它们的和。通过逐位加法和进位处理,实现了字符串形式的数字相加。
摘要由CSDN通过智能技术生成
 ;ASCII加法       ASCII.asm
 ;对隐含固定小数点的串执行ASCII运算

 include irvine32.inc
 
 DECIMAL_OFFSET=5                                   ;距离穿串侧的偏移量

 .data
    decimal_one BYTE "100123456789765"              ;1001234567.89765
    decimal_two BYTE "900402076502015"              ;9004020765.02015
    sum         BYTE (SIZEOF decimal_one+1)DUP(0),0

.code
main PROC
    ;从最后一个数位开始
    mov esi,SIZEOF decimal_one-1                    ;用作字符串的偏移量
    mov edi,SIZEOF decimal_one                      ;用作字符串指针
    mov ecx,SIZEOF decimal_one                      ;循环次数
    mov bh ,0                                       ;进位清0

    L1:
        mov ah,0                                    ;执行加法前清除AH
        mov al,decimal_one[esi]
        add al,bh                                   ;取第一个数字并与进位相加
        aaa                                         ;调整合数AH进位值
        mov bh,ah                                   ;将进位置保存
        or bh,30h                                   ;将其转化为ASCII码

        add al,decimal_two[esi]                     ;加上第二个数字
        aaa
        or bh,ah                                    ;进位值与carry1进行OR运算
        or bh,30h                                   ;将结果转化为ASCII码
        or al,30h                                   ;将其转化为ASCII码

        mov sum[edi],al                             ;将AL保存到sum
        dec esi
        dec edi
        loop L1

    mov sum[edi],bh
    ;显示合数字符串
    mov edx,OFFSET sum
    call WriteString
    call Crlf
    call WaitMsg

    exit
main ENDP
END main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值