带有"基座10"的减法组件EMU8086

时间:2015-03-09 18:20:38

标签: math assembly calculator x86-16 bcd

你好我在汇编程序中制作了一个基数为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)

有人可以帮助我/给我一个示例代码,我知道该怎么做吗?

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

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

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这样的正值

1 个答案:

答案 0 :(得分:1)

回答您的评论,这是您可以使用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;
}