LC3 시뮬레이터 용 프로그램을 작성하려고합니다. 메모리의 다른 곳에 저장된 이진수의 1을 계산할 수 있습니다.LC3 시뮬레이터를 사용하여 이진수로 1의 수를 계산하십시오.
0011 0001 0000 0000 ; Start the data at memory location x3100
0110 1010 1111 0001 ; Hex number stored at x3000
0011 0000 0000 0000 ; Start the program at x3000
0101 001 001 1 00000 ; Clear R1 (Contain address of number)
0101 010 010 1 00000 ; Clear R2 (Counter for amount of 1's)
0001 011 011 1 00001 ; Load R3 with 1 (Number for 'and-ing' with number getting checked)
;^cant do this line since that is a decimal 1 not binary one therefore it wouldnt left shift
; and cant store and get a binary number in memory
0001 100 100 1 01111 ; Load R4 with 16 (Loop loops til 0)
1110 001 011111100 ; Load R1 with address of number
0110 101 001 000000 ; Load R5 with the number stored at x3100
0101 110 101 000 011 ; And R3 with R5 store result in R6
; If number is not zero, increment R2 by 1
0001 011 011 000 011 ; Add R3 with itself to make a left shift
0001 100 100 1 11111 ; Decrement R4 by 1
; Loop to x3006 (When R3 is 'And-ed' with R5) if R4 isnt 0
0011 010 011111101 ; Store value from R2 in x3101
1111 0000 00100101 ; Halt (Is this correct?) set breakpoint here
내가 만드는 방법과 같은 혼란 스러워요에 "문이"조건이 충족되지 않을 경우 어떻게 다시 특정 시점에 루프뿐만 아니라 특정 값을 확인하려면 여기에 지금까지 가지고있는 것입니다. 실제로 1의 수를 계산하는 방법에 대한 내 생각 과정은 결과 값이 0이 아니면 "1의 카운터"에 1을 더한 다음 1 값을 왼쪽으로 시프트 한 다음 원래의 이진수를 "0000000000000001"로 확인하는 것입니다. 원래 번호의 다음 값을 확인하십시오. 나는 내가 3 진수 1보다는 2 진수 1에 10 진수 1을 저장하고 그것을 왼쪽으로 옮길 수 없다고 믿었 기 때문에 나는 어떤 행을 할 수 없다고 언급했다. 내 제한 사항 중 하나는 x3100 및 x3101보다 메모리에서 다른 위치를 사용하여 원래의 번호를 저장하고 1의 양을 각각 저장한다는 것입니다.
비트 마스크가 매우 유용 할 것이라고 들었지만 높고 낮음을 검색하여이를 사용하는 방법을 찾을 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다!