你好我在汇编程序中制作了一个基数为10的计算器,可以取最大长度为5挖的数字...所以在输入之后有两个数字,其中五个数字存储在ax和bl中示例
AX - 23 45
BX - 00 01
所以输入的值是12345
而另一个是23243
,它存储在CX
和DX
上,与第一个数字相同(存储在AX
和BX
...)现在,我已经制作了附加代码,但我无法弄清楚如何使用所有的负面问题制作减法代码...
所以我想做的是,例如,拿bh(我不使用因为数字不能超过6次挖掘...)如果数字是负的,则输入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)
有人可以帮助我/给我一个示例代码,我知道该怎么做吗?
对不起,如果我有点困惑......
THX。 编辑: 这是您要求的附加代码:
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这样的正值
答案 0 :(得分: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;
}