Assembly program to decrement loop counter

Here is an example program in assembly language that decrements a loop counter:

```
section .data

section .bss

section .text
global _start

_start:
mov cx, 10 ; Initialize the loop counter to 10
loop_start:
dec cx ; Decrement the loop counter
cmp cx, 0 ; Check if the counter is zero
je loop_exit ; If the counter is zero, exit the loop
jmp loop_start ; Otherwise, continue looping

loop_exit:
; Your code to exit the loop goes here
; For example, you could print a message or
; perform some other action before exiting
; the program
mov eax, 1 ; Exit system call
xor ebx, ebx ; Exit status code
int 0x80 ; Call kernel

```

In this example, the program initializes the loop counter to 10 using the `mov` instruction, then enters a loop using the `jmp` instruction. At the beginning of each iteration of the loop, the program decrements the loop counter using the `dec` instruction, then checks whether the counter is zero using the `cmp` instruction. If the counter is zero, the program branches to the `loop_exit` label using the `je` instruction. Otherwise, the program jumps back to the beginning of the loop using the `jmp` instruction.

Note that the loop is implemented using conditional branching instructions (`je` and `jmp`). Other looping constructs, such as `for` or `while` loops, can be implemented using different instructions and constructs. The specific instructions used will depend on the requirements of the program and the architecture of the CPU being used.

To write an assembly program to decrement a loop counter, here is an example using the x86 assembly language:

```assembly
section .data
loop_counter dd 10 ; initialize loop counter with a value of 10

section .text
global _start

_start:
mov ecx, loop_counter ; move the value of loop_counter into the ecx register

loop_start:
; ... your code goes here ...

; decrement the loop counter
dec ecx

cmp ecx, 0 ; compare the value of ecx with 0 to check if the loop should continue
jne loop_start ; jump to loop_start if ecx is not equal to 0

exit:
; your code to exit or end the program goes here
```

In the code above, we initialize the `loop_counter` variable with a value of 10 in the `.data` section. Then, in the `.text` section, we move the value of `loop_counter` into the `ecx` register using the `mov` instruction.

Next, we have a `loop_start` label where you can place your code that needs to be executed in each iteration of the loop. After executing the code, we use the `dec` instruction to decrement the value in the `ecx` register.

Following the decrement, we use the `cmp` instruction to compare the value of `ecx` with 0. If they are not equal (`jne` instruction), the program jumps back to the `loop_start` label, continuing the loop. If the values are equal, the program continues to the `exit` label or any further code you may have to exit or end the program.

Please note that the example above assumes that you are using x86 architecture and an assembler that supports it, such as NASM (Netwide Assembler).