• 汇编语言DAA指令:加法后的十进制调整

    32 位模式下,ADD 或 ADC 指令在 AL 中生成二进制和数,DAA(加法后的十进制调整)指令将和数转换为压缩十进制格式。比如,下述指令执行压缩十进制数 35 加 48。二进制和数(7Dh)被调整为 83h,即 35 和 48 的压缩十进制和数。

    mov al, 35h
    add al, 48h        ; AL = 7Dh
    daa                    ; AL = 83h (调整后的结果)

    【示例】下面的程序执行两个 16 位压缩十进制整数加法,并将和数保存在一个压缩双字中。加法要求和数变量的存储大小比操作数多一个数字:

    ; 压缩十进制示例    (AddPacked.asm)
    ; 演示压缩十进制加法。
    
    INCLUDE Irvine32.inc
    
    .data
    packed_1 WORD 4536h
    packed_2 WORD 7207h
    sum DWORD ?
    
    .code
    main PROC
    ; 初始化和数与索引
        mov    sum,0
        mov    esi,0
       
    ; 低字节相加
        mov    al,BYTE PTR packed_1[esi]
        add    al,BYTE PTR packed_2[esi]
        daa
        mov    BYTE PTR sum[esi],al
       
    ; 高字节相加,包括进位标志位
        inc    esi
        mov    al,BYTE PTR packed_1[esi]
        adc    al,BYTE PTR packed_2[esi]
        daa
        mov    BYTE PTR sum[esi],al
    
    ; 若还有进位,则加上该进位值
        inc    esi
        mov    al,0
        adc    al,0
        mov    BYTE PTR sum[esi],al
       
    ; 用十六进制显示和数
        mov    eax,sum
        call    WriteHex
        call    Crlf
        exit
    main ENDP
    END main

更多...

加载中...