From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../ARM202U/EXAMPLES/CANDASM/MUL64.S | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Bachelor/Mikroprozessorsysteme2/ARM202U/EXAMPLES/CANDASM/MUL64.S (limited to 'Bachelor/Mikroprozessorsysteme2/ARM202U/EXAMPLES/CANDASM/MUL64.S') diff --git a/Bachelor/Mikroprozessorsysteme2/ARM202U/EXAMPLES/CANDASM/MUL64.S b/Bachelor/Mikroprozessorsysteme2/ARM202U/EXAMPLES/CANDASM/MUL64.S new file mode 100644 index 0000000..1b4beb6 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/ARM202U/EXAMPLES/CANDASM/MUL64.S @@ -0,0 +1,26 @@ +; 32-bit by 32-bit multiplication routine for use with C + + AREA |mul64$$code|, CODE, READONLY + +|x$codeseg| + + EXPORT mul64 + +; On entry a1 and a2 contain the 32-bit integers to be multiplied (a, b) +; On exit a1 and a2 contain the result (a1 bits 0-31, a2 bits 32-63) +mul64 + MOV ip, a1, LSR #16 ; ip = a_hi + MOV a4, a2, LSR #16 ; a4 = b_hi + BIC a1, a1, ip, LSL #16 ; a1 = a_lo + BIC a2, a2, a4, LSL #16 ; a2 = b_lo + MUL a3, a1, a2 ; a3 = a_lo * b_lo (m_lo) + MUL a2, ip, a2 ; a2 = a_hi * b_lo (m_mid1) + MUL a1, a4, a1 ; a1 = a_lo * b_hi (m_mid2) + MUL a4, ip, a4 ; a4 = a_hi * b_hi (m_hi) + ADDS ip, a2, a1 ; ip = m_mid1 + m_mid2 (m_mid) + ADDCS a4, a4, #&10000 ; a4 = m_hi + carry (m_hi') + ADDS a1, a3, ip, LSL #16 ; a1 = m_lo + (m_mid<<16) + ADC a2, a4, ip, LSR #16 ; a2 = m_hi' + (m_mid>>16) + carry + MOV pc, lr + + END -- cgit v1.2.3