你好,我正在做一个基础10计算器在汇编程序,可以采取的数字与最大长度为5挖掘.因此,在输入后有两个数字,例如,五个dig号中的一个存储在ax和bl中。
AX - 23 45
BX - 00 01因此输入的值是12345,另一个是23243,它存储在CX和DX上,具有相同的第一个数字的概念(存储在AX和BX中.)现在,我已经做了加法代码,但我不知道如何用所有的neg问题来制作减法代码.
所以,我想要做的是,例如,拿bh (我不使用,因为这个数字不能超过6个挖掘.)如果数字是负的,我会放1,如果它是正的,那么这个问题就解决了,现在的问题是,我不知道如何使代码与所有的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这样的正数上工作。
发布于 2015-03-10 16:03:44
回答您的评论,这是一种方法,您可以转换从十进制和返回使用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;
}https://stackoverflow.com/questions/28949107
复制相似问题