"base 10" EMU8086 减法程序集

Subtraction assembly with "base 10" EMU8086

你好,我正在用汇编程序制作一个以 10 为基数的计算器,它可以接受最大长度为 5 位的数字...所以在输入后有两个数字,五个数字中的一个存储在 ax 中,并且例如bl

AX - 23 45
BX - 00 01

所以输入的值是 12345 而另一个是例如 23243 并且它存储在 CXDX 上具有相同的想法第一个数字(存储在 AXBX...)现在,我已经制作了加法代码,但我无法弄清楚如何制作带有所有否定问题的减法代码......

所以我想做的是,例如,取 bh(我没有使用,因为数字不能超过 6 位...),如果数字是负数,我会输入 1如果它是肯定的,我会把 0 这样这个问题就解决了,现在的问题是我不知道如何使代码像所有 sub 部分和进位以及所有东西一样工作......(在另外,我使用了 adc、daa 等命令...)

最后一个例子: 值为:12345 及其正值

AX - 23 45  
BX - 00 01 
(if Bh is 0 the number is positive if 1 its negative...)

现在的值为:23243 及其正值 CX-32 43 DX-00 02

计算 12345-23243(= -10898)

假设答案是 CX 和 DX 所以它看起来像这样:

CX - 08 98
DX - 01 01

答案:(-10898)

有人可以帮我 me/give 我知道如何做的示例代码吗?

对不起,如果我有点困惑...

谢谢。 编辑: 这是您要求的附加代码:

proc Add_two_numbers;2 values useing stack...
    pop [150]
    pop dx
    pop cx
    pop bx
    pop ax
    add al,cl
    daa 
    mov cl,al
    mov al,ah
    adc al,ch
    daa
    mov ch,al
    mov al,bl
    adc al,dl
    daa
    mov dl,al
    push cx
    push dx
    push [150]
    ret
endp Add_two_numbers  

第二次编辑: 我弄清楚如何使它为负,所以我只需要子 2 的算法,它不需要使用 1000-2000 这样的数字,请让它只对 2000-1000

这样的正值起作用

回答你的评论,这是一种你可以使用 C 作为示例从十进制转换回来的方法。我让你用 asm 编码!

#include <conio.h>

#define MAX  100000000

// input a signed decimal number
int inp_num(void) {
    int number=0, neg=0, key;
    while (number < MAX) {
        key = _getche();
        if (key == '-') {
            if (number==0)
                neg = 1;        // else ignore
        }
        else if (key >= '0' && key <= '9')
            number = number * 10 + key - '0';
        else
            break;
    }
    if (neg)
        number = -number;
    _putch('\n');
    return number;
}

// output a signed number as decimal
void out_num(int number) {
    int digit, suppress0, d;
    suppress0 = 1;              // zero-suppression on
    if (number < 0) {
        _putch('-');
        number =-number;
    }
    for (d=MAX; d>0; d/=10) {
        digit = number / d;
        if (digit)              // if non-0
            suppress0 = 0;      // cancel zero-suppression
        if (!suppress0)
            _putch('0' + digit);
        number -= digit * d;
    }    
}

int main(void) { 
    int number;
    number = inp_num();
    out_num(number);
    return 0;
}