임 2 개의 8 비트 숫자를 곱해서 255보다 큰 결과를 얻기 위해 16 비트 위치에 저장하려고합니다.이 작업을 수행하는 가장 빠른 방법은 이동을 통한 것입니다.이 작업은 rrcf 함수를 통해 구현하려고했습니다 bcf를 사용하여 원하지 않는 반송을 제거합니다.빠른 8x8bit 곱하기 어셈블리 pic18
이것은 ive가 생각해 낸 것입니다. Ive는 모든 코드에 대해 의견을 말하려고 했으므로 내 사고 프로세스를 볼 수 있습니다. 임 : PIC18 및 ASM 프로그래밍 전반에 상당히 새로운 내용. (잘하면) 도움을 줄 때 염두에 두시기 바랍니다. 내가 MPLAB SIM을 실행할 때, 내가 가지고있는 것보다 더 좋은 자리에 들어갈 필요가 있습니다. 카운터를 모두 내리면됩니다.
이것은 반복적으로 테스트되는 곱셈기의 마지막 비트로 인해 발생한다고 생각합니다. 따라서 0이 될 것이므로 매번 더하기 명령을 건너 뜁니다. 비트 0-7에서 점진적으로 BTFSC를 이동하는 루프를 만들 수 있습니까? 나는 이것이 문제라고 생각한다. 그러나 나는 코드를 이해할 수 없다. 나는 essentailly 주 8 시간을 쓸 수 있지만, 메신저는 코드 공간을 저장하려고
LIST P=18F4550
#include <P18F4550.INC>
;equates
counter equ 0x00 ;set counter
multiplicand equ 0x01 ;set multiplicand
multiplier equ 0x02 ;set multiplier
resultHigh equ 0x03 ;set resultHigh
resultLow equ 0x04 ;set resultLow
;test program
movlw d'100' ;move literal d'100' to wreg
movwf multiplicand ;set multiplicand
movlw d'400' ;move literal d'400'
movlw multiplier ;set multiplier
movlw d'8' ;counter
movwf counter ;set counter
main:
btfsc multiplier, 0 ;test LSB if 0,skip next if 0
addwf multiplier, resultLow ;add if 1 to resultLow
bcf STATUS,C ;clear carry flag
rlcf multiplier ;rotate multiplier left
bcf STATUS,C ;clear carry
rlcf resultLow ;rotate resultLow w/ carry
rlcf resultHigh ;rotate resultHigh
;w/carry from resultLow
decf counter ;dec counter
goto main ;repeat for 8 bits
end
승수와 피승수를 절대 추가하지 않으면 결과를 추가하기 만하면됩니다. 특히 바이너리로. 1001X1101 – matt
이 있다면 1101 + 00000 + 110100 + 110100을 함께 쓰십시오. – matt
몇 가지 바실리카 실수를 저질 렀지 만, 나는 무엇을 바꿀지 알아낼 수 없습니다 !!!! – matt