Reputation: 21
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.
Upvotes: 0
Views: 4552
Reputation: 47573
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
Upvotes: 5