簡體   English   中英

帶“ base 10” EMU8086的減法組件

[英]Subtraction assembly with “base 10” EMU8086

您好,我正在用匯編器制作一個以10為基數的計算器,該計算器可以接受最大5位數長度的數字...因此,在獲取輸入后有兩個數字,例如,五個位數中的一個存儲在ax和bl中

AX - 23 45
BX - 00 01

所以輸入的值是12345 ,另一個是例如23243 ,它以與第一個數字相同的方式(存儲在AXBX )存儲在CXDX 。現在,我做了加法代碼,但我不知道如何制作帶有所有小問題的減法代碼...

所以我想做的是,例如,取bh(我不使用,因為該數字不能超過6個數字...),如果該數字為負,則輸入1,如果其為正, '將0置為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 AND 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  

第二編輯:我想出如何使其為負數,所以我只需要sub 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM