2015-10-07 3 views
0

Итак, у меня есть этот код (язык ассемблера x86) для решения основных арифметических уравнений, но проблема в том, что я могу вводить только 1-значные числа. Кроме того, ответы могут быть только в пределах 1-9. Мне нужен код, который сможет принимать две или более цифр. Вот пример кода для добавления.x86 arithmetic (add/sub/mul/div) более одной цифры

jmp start 
msg1 db 0ah,0dh, "Enter first number: $" 
msg2 db 0ah,0dh, "Enter second number: $" 
msg3 db 0ah,0dh, "Sum: $" 
ans db ?, " $" 
num1 db ? 
num2 db ? 

start: 
mov ah, 0 
mov al, 3 
int 10h 
mov ah, 06 
mov al,0 
int 10h 

mov ah, 09h 
lea dx, msg1 
int 21h 

mov ah, 01h 
int 21h 
sub al, 30h 
mov num1, al 

mov ah, 09h 
lea dx, msg2 
int 21h 

mov ah, 01h 
int 21h 
sub al, 30h 
mov num2, al 

mov al, num1 
add al,num2 
add al, 30h 
mov ans, al 

mov ah, 09h 
lea dx, msg3 
int 21h 

mov ah, 09h 
lea dx, ans 
int 21h 

int 20h 
+1

Сколько вы платите? –

+0

ohh я не знаю, что должен заплатить за ответы :(im все еще новый здесь, мне нечего платить .. для этого ..: < – meme

+0

Нет. Он шутит или охотится за деньгами :-) – rkhb

ответ

1

Преобразование строк в целые числа, делать арифметические операции, а затем преобразовать целые числа обратно в строки (либо на лету печать одну цифру в то время, или в буфер, который вы затем распечатать.)

Все это не относится к x86 asm или API, который вы используете для ввода/вывода строки/символа (в данном случае, системных вызовов DOS int 21h). Это именно то, как вы это сделаете в C. Я бы рекомендовал использовать стандартную библиотеку C для конверсий, если вы не хотите писать strtol и sprintf самостоятельно.


Или вы можете хранить свои данные в строковой форме от начала до конца и выполнять добавление и подзаголовок BCD. Каждая десятичная цифра хранится в отдельном байте. Это проще в ASM, чем в C, потому что C не выставляет флаг переноса. Это не хороший метод программирования и приведет к медленному коду.

Если вы хотите выполнить арифметику с произвольной точностью, работайте в кусках бинарных целых чисел 32b или 64b вместо однократных десятичных цифр. Или просто используйте gmp, если вы не хотите изобретать колесо в качестве упражнения.