Do not understand output of assembly programme

125 views Asked by At

This is a sample assembly language code for 8086 to print a string in reverse order

.model small
.STACK 100H
.DATA
MSG DB 'HELLO!$'

.CODE
MOV CL,0

 AGAIN:
 MOV DL,DS:[SI]
; MOV AH,2
; INT 21H
 INC CL
 INC SI
 CMP DL,'$'
 JNE AGAIN
 DEC SI
 DEC CL

 REV:
   DEC SI
   MOV DL,DS:[SI]
   MOV AH,2
   INT 21H
   DEC CL
   CMP CL,0
   JNE REV

 .EXIT
  END

It's output is !OLLEH . But if I write

  MOV AH,2
  INT 21H

in AGAIN level below MOV DL,DS:[SI] . I think answer should be HELLO!!OLLEH but it shows '=' character and previous output. Why does it happen?

1

There are 1 answers

0
Fifoernik On

I think answer should be HELLO!!OLLEH

Correction. Since you check for the "$" character only after outputting with the DOS function 02h, the screen should show:

HELLO!$!OLLEH

It's just with DOS function 09h that it is impossible to write a "$" character.


It's possible to get semi-correct results because emu8086 initialized the registers in some default manner, but it's best to setup the registers manually before using them:

.CODE
 mov ax, DATA
 mov ds, ax
 mov si, offset MSG
 MOV CL, 0
AGAIN:
 MOV DL, [SI]
 MOV AH, 2
 INT 21H