Вычитающая сборка с "основанием 10" EMU8086

Здравствуйте, я делаю базовый 10 калькулятор на ассемблере, который может принимать числа с максимальной длиной 5 копий... так что после ввода будет два числа, одно из пяти чисел сохраняется в ax и bl, например

AX - 23 45
BX - 00 01

Таким образом, значение ввода 12345 А другой, например, 23243 и он хранится на CX а также DX с той же идеей первого числа (которое хранится в AX а также BX...) Теперь, я сделал код добавления, но я не могу понять, как сделать код вычитания со всей проблемой нег...

Так что я подумал сделать, например, взять bh (что я не использую, потому что число не может быть длиннее 6 цифр...), и если число отрицательное, я положу 1, и если оно положительное, я Я поставлю 0, так что эта проблема решена, теперь проблема в том, что я не знаю, как заставить код работать как со всеми sub part and carry и все... (кроме того, я использовал такие команды, как 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-е редактирование: я выясняю, как сделать его Отрицательным, поэтому мне просто нужны алгоритмы, для которых число 2 не нужно для работы с числами, такими как 1000-2000, пожалуйста, сделайте так, чтобы оно работало только на положительных значениях, таких как 2000-1000

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;
}
Другие вопросы по тегам