Здравствуйте, я делаю калькулятор с основанием 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 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
2-е редактирование: я выясняю, как сделать его отрицательным, поэтому мне просто нужны алгоритмы, которые под номером 2 не должны работать с числами, такими как 1000-2000, пожалуйста, заставьте его работать только с положительными значениями, такими как 2000-1000
dx:ax
для одного значения иcx:bx
для другого). Если входные данные являются строками, используйтеatoi
из библиотеки C, чтобы преобразовать каждую строку в целое число или реализовать свою собственную. Затем выполните вычитание с помощьюsub
иsbb
. Затем выполните печать с помощьюprintf
или реализуйте свой собственный. - person nrz   schedule 09.03.2015sbb
иdas
. Но операции BCD ничего не знают об отрицательных числах. Если из меньшего вычесть большее число, то получится число с дополнением до 10. Например, если у вас есть 6 операций с двоично-десятичным числом, и вы вычисляете2000-2123
, вы получите999877
, но вам действительно нужно-123
, которое является 10-м дополнением999877
с-
впереди (10-е дополнение определяется путем взятия дополнения каждая цифра относительно9
, затем добавление1
, так что000122 + 1
или123
). - person lurker   schedule 12.03.2015