16 진수를 분수로 인쇄 할 수 있기를 원합니다. 하자 .Dintel8086의 16 진수 분수 인쇄
;This macro registers AH,AL
READ MACRO
MOV AH,8
INT 21H
ENDM
;This macro registers AH,DL
PRINT MACRO CHAR
PUSH AX
PUSH DX
MOV DL,CHAR
MOV AH,2
INT 21H
POP DX
POP AX
ENDM
.main:
READ ;This is Actually .D
xor ah,ah ; clear it
; some code to translate ascii to hex
; Needed code goes here
나는 16 진수 문자를 읽고 분수로 인쇄하고 싶습니다. 예를 들면 .D는 .8125로 인쇄됩니다.
변환 방법 및 인쇄 방법을 모르겠습니다. 나는 인텔 8086 어셈블리에서만 작업하고있다. 이 사실은 부동 소수점 숫자는 C에서 무엇을하는지 이해하지만 구현 방법을 모르겠습니다.
그래서'x/16'을 소수점으로 인쇄하기를 원합니다. 여기서'x '는 4 비트 정수입니다 (즉, 16 진수 1/16 자리의 한 16 진수). 즉 '0xd/0x10 = 0x0.D = 0.8125'이다. 'hexadecimal fraction'을 위해 google을 사용한다면, 히트 수를 얻을 것이고, 소수점 이하의 값으로 변환하는 것에 대해서는 많은 것을 얻을 것입니다. 히트의 대부분은 부동 소수점을 사용하고 부동 소수점을 십진수로 나눌 수 있지만 (x87 사용) 느리기 때문에 "정수"와 같은 다른 검색어를 포함 할 수 있습니다. –
부동 소수점을 사용할 필요가 없습니다. 당신이하는 일은 사실 고정 소수점 표현입니다 (고정 된 수의 비트는 분수 부분이고 나머지는 정수 부분입니다). 귀하의 경우 4 소수 비트와 정수 비트가 없습니다. 고정 소수점 숫자는 일반적으로 십진수가 아닌 2 진수로 저장되므로 ** 필요한 것은 고정 된 오래된 고정 소수점에서 문자열로 변환 **입니다. 간단한 정수 연산을 사용하는 C 구현에 대해서는 https://codereview.stackexchange.com/a/109219/50567을 참조하십시오 (정수 부분이 다음 십진수가되도록 10을 곱하는 등) –
오직 하나의 16 진수 소수점 인 경우, 그러면 각 16 진수에 대해 올바른 부분을 표시하는 16 개의 문자열 테이블을 가질 수도 있습니다. – Ped7g