[英]Subtraction assembly with “base 10” EMU8086
您好,我正在用匯編器制作一個以10為基數的計算器,該計算器可以接受最大5位數長度的數字...因此,在獲取輸入后有兩個數字,例如,五個位數中的一個存儲在ax和bl中
AX - 23 45
BX - 00 01
所以輸入的值是12345
,另一個是例如23243
,它以與第一個數字相同的方式(存儲在AX
和BX
)存儲在CX
和DX
。現在,我做了加法代碼,但我不知道如何制作帶有所有小問題的減法代碼...
所以我想做的是,例如,取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.