首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“基10”EMU8086减法组件

“基10”EMU8086减法组件
EN

Stack Overflow用户
提问于 2015-03-09 18:20:38
回答 1查看 1.7K关注 0票数 0

你好,我正在做一个基础10计算器在汇编程序,可以采取的数字与最大长度为5挖掘.因此,在输入后有两个数字,例如,五个dig号中的一个存储在ax和bl中。

代码语言:javascript
复制
AX - 23 45
BX - 00 01

因此输入的值是12345,另一个是23243,它存储在CXDX上,具有相同的第一个数字的概念(存储在AXBX中.)现在,我已经做了加法代码,但我不知道如何用所有的neg问题来制作减法代码.

所以,我想要做的是,例如,拿bh (我不使用,因为这个数字不能超过6个挖掘.)如果数字是负的,我会放1,如果它是正的,那么这个问题就解决了,现在的问题是,我不知道如何使代码与所有的sub部件、进位和所有东西一样工作.(另外,我使用了诸如adc、daa等命令)。

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

代码语言:javascript
复制
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,所以看起来是这样的:

代码语言:javascript
复制
CX - 08 98
DX - 01 01

答:(-10898)

有谁能帮我/给我一个示例代码,让我知道怎么做?

抱歉如果我有点困惑..。

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

代码语言:javascript
复制
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这样的正数上工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-10 16:03:44

回答您的评论,这是一种方法,您可以转换从十进制和返回使用C作为一个例子。我让你在asm中编码!

代码语言:javascript
复制
#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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28949107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档