0

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

AX - 23 45
BX - 00 01

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

所以我想做的是,例如,取 bh (我没有使用,因为数字不能超过 6 digs...)如果数字是负数,我就放 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)

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

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

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

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

4

1 回答 1

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;
}
于 2015-03-10T16:03:44.767 回答