BCD2BIN PROC
PUSH AX
PUSH CX
PUSH BX
PUSH DX
PUSH SI
MOV CL,08H
LB :
SAL DH,1
JC PRTONE
CMP CL,04H
JG SKP3
MOV DL,48
MOV AH,02H
INT 21H
JMP SKP3
PRTONE: CMP CL,04H
JG SKP3
MOV DL,49
MOV AH,02H
INT 21H
SKP3: DEC CL
CMP CL,00H
JE SKP4
JMP 040H
SKP4: MOV DL,' '
MOV AH,02H
INT 21H
POP SI
POP DX
POP BX
POP CX
POP AX
RET
BCD2BIN ENDP
Это часть программы для преобразования номера bcd в двоичное число. Может ли кто-нибудь объяснить логику этого? Инструкции, которые я могу понять, просматривая интернет, но логику/алгоритм для этого? Благодаря!BCD для двоичного преобразования в языке ассемблера
'MOV DL, '0' SAL DH, 1 ADC DL, 0' Как это используется для отображения результата? Поскольку, преобразовывая bcd в двоичный, число делится на 2, а затем записывается остаток. Но здесь он сдвинут с места. Почему это? – teesto
@teesto: Если вы разделите на 2 и используйте остаток (сдвиг вправо и используйте перенос), вы получите цифры в неправильном порядке. Если умножить на 2 и использовать переполнение (сдвиг влево и использовать перенос), вы получите цифры в правильном порядке. – Brendan
@teesto: 'adc dl, 0' подобен« DL = DL + 0 + carry ». Если перенос четкий, то он не изменяет DL, и если перенос установлен, DL увеличивается. – Brendan