аду з ascii рядка
mov di, 10; основа системи
mov ax, [word ptr Operand +6]; помножимо старшу частину
mul di
jnc nocar; переповнення
ret
nocar: [word ptr Buf +6], ax ax, [word ptr Operand +4]; помножимо частини, що залишилися
mul di
add [word ptr Buf +6], dx ; c урахуванням перенесень
mov [word ptr Buf +4], axax, [word ptr Operand +2] di [word ptr buf +4], dx [word ptr buf +2], axax, [word ptr Operand ] di [word ptr buf +2], dx [word ptr buf], axmul6410
; ---------------------- ADD64; cложеніе з числом [word ptr operand], dx [word ptr operand +2] , 0 [word ptr operand +4], 0 [word ptr operand +6], 0 add64
; ------------------- xchg64; обмін cx
mov cx, [word ptr si]; обмінюємо по частинах з використанням регістра сх
xchg cx, [word ptr di] [word ptr si], cxcx, [word ptr si +2] cx, [word ptr di +2] [word ptr si +2], cxcx, [word ptr si +4] cx, [word ptr di +4] [word ptr si +4], cxcx, [word ptr si +6] cx, [word ptr di +6] [word ptr si +6], cxcxxchg64
; --------------------------- mov64; переміщення cx
mov cx, [word ptr si]; переміщаємо по частинах
mov [word ptr di], cxcx, [word ptr si +2] [word ptr di +2], cxcx, [word ptr si +4] [word ptr di +4], cxcx , [word ptr si +6] [word ptr di +6], cxcxmov64clear64; обнуленіеcx [word ptr di], 0 [word ptr di +2], 0 [word ptr di +4], 0 [word ptr di +6 ], 0cx
endp clear64
; -------------------
proc decbin; процедура перекладу десяткового числа представленого ascii рядком у двійкове знаходиться в регістрі ax
cmp [byte bx], '-' ; Від'ємне число?
jne positive
inc bx ; просунемося покажчик і
dec cx; зменшимо лічильник циклу
call conv; Перетворимо модуль від'ємного десяткового числа.
; На виході: ax - двійковий код, сf = 1, якщо преобразуемое число перевищує значення 65535
jc badend; Кількість> 65535 або допустимий символ?
cmp ax, 32768
ja overflow; Кількість> 32768
neg ax; Сформуємо додатковий код
js good; Закінчимо перетворення
positive:
call conv; Перетворимо модуль позитивного десяткового числа.
jc badend; Кількість> 65535?