I've been trying to fix my code for a while, but I can't seem to get it to work.It always tells me error:cannot generate COM file, stack segment present. Any ideas how I can fix this?
Here's my code:
.model small
.386
.stack 100h
.data
inpM db "Input string: $"
input db 19 ; max allowed 20
db ? ; # char entered
db 19 dup(0) ; chars entered
output db 19 dup("$")
.code
start: mov ax, @data
mov ds, ax
mov ah, 9 ; print inpM
lea dx, inpM
int 21h
mov ah, 0Ah ; get input
lea si, input
mov dx, si
int 21h
mov cl, [si+1] ; reverse
mov ch, 0
add si, cx
inc si
lea di, output
rev: mov al, [si]
mov [di], al
dec si
inc di
loop rev
again: mov ah, 6 ; clrscr
mov al, 0
mov cl, 0
mov ch, 0
mov dl, 4Fh
mov dh, 18h
mov bh, 0Fh
int 10h
mov ah, 0
mov bh, 0
mov dl, 27h ; column
mov dh, 0 ; row
mov ah, 9 ; print output
lea dx, output
int 21h
mov bx, 20000 ; delay
l1: mov cx, 0Fh
l2: dec bx
loop l2
jnz l1
add dh, 1 ; adds 1 to row
loop again
mov ah, 4Ch
int 21h
end start
Additional info: My code reverses a string input then displays it in rows with a delay. Hoping to find out what's the cause of the error and how I'll be able to fix it.
I'm assuming from the error you are using TASM and TLINK to build this as a .COM program and not an EXE. Things you need to be aware of:
tiny
model, not small
. .code
segment. With those things in mind, you can modify the top of your code to appear like this:
.model tiny
.386
.data
inpM db "Input string: $"
input db 19 ; max allowed 20
db ? ; # char entered
db 19 dup(0) ; chars entered
output db 19 dup("$")
.code
org 100h
start:
mov ah, 9 ; print inpM
lea dx, inpM
int 21h
...
You can then build it with:
tasm myprg.asm
tlink /t myprg.obj