tify"> cmp ax, 32767
jbe good; Кількість <32767:22,0 _str errorover, overlen, 34h; повідомлення про переповнення
badend:
stc; cf = 1
jmp n_good ; Вийдемо з перетворення
good: clc; cf = 0_good: ret decbin conv ; конвертаціяdx di ax, ax; Очистимо регістр двійкового числа
mov di, 10; 10 - основа системи числення
cycl: mul di; dx: ax = ax * 10
jc over_flow; Перехід, якщо CF = 1
mov dl, [bx] ; Виберемо чергову ASCII-цифру
sub dl, 30h ; Утворюємо двійковечисло
cmp dl, 0hBddl, 9h Bd
add ax, dx; Проміжна сума
jc over_flow; Перехід, якщо CF = 1
inc bx
loop cycl; Продовжимо, якщо cx> 0
clc; Ні, скинемо прапор CF = 1
jmp last
bd:
locate 22,0
out_str errorbad, badlen, 34h; повідомлення про нецифровому символі
stc last_flow: 22,0 _str errorover, overlen, 34h; повідомлення про переповнення: di dx conv
proc dec_bin64; процедура перекладу десяткового числа представленого ascii рядком у двійкове знаходиться в регістрі ax
cmp [byte bx], '-' ; Від'ємне число?
jne positiveq
inc bx ; просунемося покажчик і
dec cx; зменшимо лічильник циклу
call conv64 ; Перетворимо модуль від'ємного десяткового числа.
; На виході: ax - двійковий код, сf = 1, якщо преобразуемое число перевищує значення 65535
jc badend2; Кількість> 65535 або допустимий символ?
cmp [word ptr Operand +6], 8000hoverflow2; Кількість> 32768 [word ptr Operand +4], 0000hoverflow2; Кількість> 32768 [word ptr Operand +2], 0000hoverflow2; Кількість> 32768 [word ptr Operand], 0000hoverflow2; Кількість> 32768bx, offset OperandNeg64; Сформуємо додатковий код good2; Закінчимо перетворення
positiveq:
call conv64 ; Перетворимо модуль позитивного десяткового числа.
jc badend2; Кількість> 65535? [word ptr Operand +6], 7fffhgood2; Кількість <32767...