Controlling buzzer with assembly
I translated you program to GNU as syntax, and it works as expected: I
get a 440&nbsp;Hz square wave on digital pin&nbsp;5. Here is the
translated program:

#include &lt;avr/io.h&gt;

; I'm too lazy to always type the full name of these macros
#define io(reg) _SFR_IO_ADDR(reg)
#define mem(reg) _SFR_MEM_ADDR(reg)

_a = 141 ;(16000000 / 256) / 440(frequency of A) - 1

  ;wgm02..0 = 7 (fast pwm, top = ocr0a)
  ;cs02..0 = 4 (N=256)
  ;com0b1..0 = 2 (clear on compare match, set at bottom)
  ldi r16, 0b00100011
  sts mem(TCCR0A), r16
  ldi r16, 0b00001100
  sts mem(TCCR0B), r16
  ;ocr0a = _a to obtain 440Hz
  ldi r16, 141
  out io(OCR0A), r16
  ;ocr0b = ocr0a/2 to obtain a duty cycle of 50%
  ldi r16, 71
  out io(OCR0B), r16
  ;enable output at D5 aka oc0b aka Arduino pin 5
  sbi io(DDRD), 5
  loop:
  rjmp loop


As shown in my comment to your question, I suspect the problem is a
misunderstanding of the meaning of things like tccr0a and ocr0a.
In the translated version above, I admit I do not know what TCCR0A
and co. mean. And I need not to: I can treat these as opaque
identifiers, as the avr-libc recommends to always use them with the
macros _SFR_IO_ADDR() and _SFR_MEM_ADDR(), which provide the I/O
address and the data address of the register respectively.

I do not know how to use avra, so I cannot tell you how the get the I/O
or data address of a register. But there certainly must be a way. You
should always use the data address with sts and the I/O address with
out and sti.