Home > Enterprise >  I have an indexing problems
I have an indexing problems

Time:01-18

I need to write names from keyboard and then display them, one on each line. They should be displayed with an index before of them. For example if I write the names elena and maria the should be displayed as 1.elena 2.maria

I tried adding a counter variable but I have some errors when I try to run the program in DosBox. Can someone help me? Here is my clean label that is outputting the names:

 lista:
  mov  dx, offset nume
print_names:
push dx
  mov  dl, 13          ; carriage return
  mov  ah, 02h
  int  21h
  mov  dl, 10          ; linefeed
  mov  ah, 02h
  int  21h
  pop  dx
  mov dx, offset index
  mov ah, 9
  int 21h
  inc byte ptr index
  mov  dx, offset nume
  mov  ah, 09h
  int  21h
  ; (*)
  add  dx, 5   1
  cmp  dx, numePointer ; check if the current name is the last one
  jb   print_names
  jmp  bucla           ; return to main loop

CodePudding user response:

The addition is destroying the DX pointer for the name to be displayed!
Why did you put the additional code between proc endp?
punct db '.' ,10, '$' does not need the 10. Should be punct db '.$' or even better, combine it with index like in index db '?.$'.
And still better, combine the newline with it too:

lista:
  mov  dx, offset nume
print_names:
  push dx                        ; (1)
  mov  dx, offset numeIndex
  mov  ah, 09h
  int  21h
  inc  byte ptr [numeIndex   2]  ; "1" -> "2" -> "3" ...
  pop  dx                        ; (1)

  mov  ah, 09h
  int  21h
  add  dx, 5   1
  cmp  dx, numePointer ; check if the current name is the last one
  jb   print_names
  jmp  bucla           ; return to main loop

  ...

numeIndex db 13, 10, 49, 46, 36

  • Related