, 당신은 숫자가 작거나 같은 9 (이 숫자입니다)하는 것입니다 때를 감지하기 위해 PROC mostrarchar
필요 수는 9 (그것의보다 큰 경우 편지, 10..15 = 'A'.. 'F'), 예 :
mov dl, 8
call mostrarchar ;DISPLAY '8'.
mov dl, 15
call mostrarchar ;DISPLAY 'F'.
mostrarchar proc
cmp dl, 9
jbe digit ;IF (DL <= 9)
;IT'S A LETTER (10..15 = 'A'..'F').
add dl, 37h ;DL+55.
jmp display ;SKIP "DIGIT:".
digit:
add dl, 30h ;DL+48.
display:
mov ah, 02h
int 21h
ret
mostrarchar endp
이전 코드는 한 자릿수 만 작동합니다. 더 큰 숫자의 경우 숫자가 0이 될 때까지 숫자를 기본 (경우에 따라 16 진수)으로 여러 번 나누어야합니다. 각 나머지는 한 자릿수입니다. 을 호출하면 각 16 진수가 표시됩니다 (예 :
).
mov ax, 15729
call mostrarnum ;DISPLAY '3D71'.
mostrarnum proc
;CONVERT NUMBER TO HEX.
mov bp, 16 ;BASE.
mov cx, 0 ;REMAINDERS COUNTER.
divisions:
mov dx, 0
div bp ;DX:AX ÷ 16.
push dx ;PUSH REMAINDER.
inc cx ;COUNT REMAINDER.
cmp ax, 0
jne divisions ;IF (AX != 0)
;DISPLAY HEX DIGITS EXTRACTED FROM NUM.
remainders:
pop dx
call mostrarchar ;DISPLAY HEX CHAR.
loop remainders ;CX-1. IF (CX > 0) REPEAT.
ret
mostrarnum endp
Proc mostrarnum
은 연속적인 숫자로 숫자를 추출하여 숫자를 16 진수로 변환합니다. 이 자릿수는 push
과 함께 스택에 저장됩니다. 마지막으로 숫자가 스택에서 검색되어 표시됩니다. 이는 부서가 역순으로 자릿수를 생성하기 때문에 필요합니다. 다시 역순으로 스택의 자릿수를 밀어서 나올 때 정상 순서로 나타납니다.
숫자의 추가는 기본 (2 진수, 10 진수, 16 진수 등)에 상관하지 않으며, 숫자는 dwelch가 말했듯이 단지 비트 일뿐입니다. 인간이면서 그 비트가 16 진수인지 여부를 결정하는 것은 당신입니다. 또는 소수 등 예 :
mov al, 9 ;DECIMAL.
mov ch, 0Ah ;10
add ch, al ;0Ah + 9 = 13h (19)
mov dl, 01110011b ;BINARY (115, 73h)
add ch, dl ;13h + 115 = 134 (86h)
당신은 소수 ("134"), 헥스 ("86") 또는 다른하여 최종 결과를 표시 할 수있다.
덧붙여서, 당신은 8로 나누는 것은 8 진수를 줄 것이고, 14로 나누는 것은 기본을 제공 할 것입니다. 예를 들어, 어떤 기초로 변환하기 위해 동일한 기술 (주어진베이스에 의한 연속적인 분할)을 사용할 수 있습니다. 14.
레지스터 비트를 유지합니다. 기본 2. 16 진수는 직접 기본 10을 변환하는 기본 16이며, 전혀 변환하지 않습니다. 어셈블러는이를 바이너리로 변환해야합니다. 16 진수를 사용하는 것과 마찬가지로 귀하를 위해 변환합니다. 당신은 당신이 어떻게 다른 사람을하는지를 안다. –
실제로 코드를 작성 했습니까? –
BCD 또는 Binary에 숫자가있는 경우 어떻게 16 진수로 표시합니까? –