어셈블리 (pep8)에서 내 클래스 중 하나에 대한 프로그램을 작성하고 있습니다. 이 프로그램은 -32,768에서 32,767 사이의 정수를 취하여 이진 값을 출력합니다. 아래의 코드는 이진수를 거꾸로 출력하는 것을 제외하고는 작업을 수행합니다.어셈블리에서 이진을 이진으로 변환 (pep8) - 우아한 접근
이진수를 올바른 순서로 인쇄 할 수있는 우아한 방법이 있습니까? 즉, 모든 이진수를 로컬 변수에 저장하고 역순으로 인쇄하려고하지 마십시오.
BR main
int: .EQUATE 0 ;local variable int
out: .EQUATE 2 ;local variable out
index: .EQUATE 4 ;local variable index
stack: .EQUATE 6 ;local variable for dynamic memory allocation
main: SUBSP stack,i ;allocate memmory
LDA 0,i
STA index,s ;initialize index
DECI int,s ;get user input and store it in num
while: LDA index,s ;while (num <= 16)
CPA 16,i ;
BRGE endWhile ;
ADDA 1,i ;index++
STA index,s ;
LDA int,s ;
ANDA 0x0001,i ;modulus 2 "%2"
STA out,s ;
DECO out,s ;output results
LDA int,s ;
ASRA ;devide num by 2
STA int,s ;
BR while ;
endWhile: ADDSP stack,i ;deallocate memmory
STOP
.END
답변 해 주셔서 감사합니다. 내가 취한 접근법 (2로 나누어 나머지를 저장)으로 동일한 결과물을 달성 할 수있는 방법이 있습니까? (나는 당신이 제안한 해결책이 온라인에 게시 된 것을 보았지만 원래의 접근 방식이 완전히 달랐기 때문에 부정 행위가 느껴지는 것을 보았습니다.) 귀하의 도움에 감사드립니다. – Zzz
@Azzi이 방법을 사용하는 것이 어떤 종류의 속임수라고 생각하지 않습니다. "온라인"이전에 잘 돌아 왔습니다. 예를 들어, 저는 25 년 전 6502 년에 고등학교에서 그것을 배웠지 만, 그 전에는 널리 사용되어 왔습니다. 최소한의 수정으로 메소드를 사용하고 싶다면 'ANDA 0x8000, i'를 사용하여 가장 높은 비트를 추출한 다음 두 번 왼쪽으로 회전하여 최상위 비트를 최하위 위치로 가져옵니다. – dasblinkenlight
도움을 주셔서 감사합니다 :) – Zzz