Question: AVR language code. Let A and B be 16-bit unsigned integers. The product AB requires at most 32 bits. The quotient A/B and remainder A%B

AVR language code. Let A and B be 16-bit unsigned integers. The product AB requires at most 32 bits. The quotient A/B and remainder A%B each require at most 16 bits.

Modify the program to compute the quotient A/B and remainder A%B and store each value in memory as a 16-bit little-endian unsigned integer.

For the 16-bit input operands A and B are pre-loaded into two pairs of registers (R17:R16 for A and R19:R18 for B). Do not modify the ldi commands as they are already pre loaded.

AVR language code. Let A and B be 16-bit unsigned integers. Thehere is the code

;divmod16.asm

.cseg

.org 0

; Initialization code

; Do not move or change these instructions or the registers they refer to.

; You may change the data values being loaded.

; The default values set A = 0x3412 and B = 0x2010

ldi r16, 0x12 ; Low byte of operand A

ldi r17, 0x34 ; High byte of operand A

ldi r18, 0x10 ; Low byte of operand B

ldi r19, 0x20 ; High byte of operand B

; Your task: compute the 32-bit product A*B (using the bytes from registers r16 - r19 above as the values of

; A and B) and store the result in the locations OUT3:OUT0 in data memory (see below).

; You are encouraged to use a simple loop with repeated addition, not the MUL instructions, although you are

; welcome to use MUL instructions if you want a challenge.

; ... Your code here ...

; End of program (do not change the next two lines)

stop:

rjmp stop

; Do not move or modify any code below this line. You may add extra variables if needed.

; The .dseg directive indicates that the following directives should apply to data memory

.dseg

.org 0x200 ; Start assembling at address 0x200 of data memory (addresses less than 0x200 refer to registers and ports)

OUT0: .byte 1 ; Bits 7...0 of the output value

OUT1: .byte 1 ; Bits 15...8 of the output value

OUT2: .byte 1 ; Bits 23...16 of the output value

OUT3: .byte 1 ; Bits 31...24 of the output value

divmod16.asm cseg org o : Initialization code : Do not move or change these instructions or the registers they refer to. : You may change the data values being loaded ; The default values set A = 0x3412 and B = 0x2010 ldi rl6, 0x12Low byte of operand A ldi r17, 0x34 High byte of operand A ldi r18, 0x1OLow byte of operand B ldi r19, 0x20 High byte of operand B : Your task: compute the 32-bit product A*B (using the bytes from registers rl6 ri9 above as the values of : A and B) and store the result in the locations OUT3:OUTO in data memory (see below) : You are encouraged to use a simple loop with repeated addition, not the MUL instructions, although you are : welcome to use MUL instructions if you want a challenge : Your code here 2 The divmod16.asn code gives the correct quotient value (in memory locations DIV1 DIVO when the denominator (B) is less than 256. The divmod16.asm c MOD1 MODO) when the denominator (B) is less than 256. The divmod16.as code gives the correct quotient and remainder values for all valid operand pairs. gives the correct remain ue (in memory o1is :End of program (do not change the next two lines) stop: rjmp stop : Do not move or modify any code below this line. You may add extra variables if needed : The .dseg directive indicates that the following directives should apply to data memory dseg org 0x200 Start assembling at address 0x200 of data memory (addresses less than 0x200 refer to registers and ports) OUTO: OUT1: OUT2: OUT3: byte Bits 7...0 of che output value byte 1Bits 15.. .8 of the output value byte 1 Bits 23...16 of the output value byte 1 Bits 31.. .24 of the output value

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!