Dav*_*ngo 0 assembly compiler-errors dos tasm x86-16
我一直试图修复我的代码一段时间,但我似乎无法让它工作。它总是告诉我错误:无法生成 COM 文件,存在堆栈段。有什么想法可以解决这个问题吗?
这是我的代码:
.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
Run Code Online (Sandbox Code Playgroud)
附加信息:我的代码反转字符串输入,然后延迟显示在行中。希望找出错误的原因以及如何修复它。
我从错误中假设您使用 TASM 和 TLINK 将其构建为 .COM 程序而不是 EXE。您需要注意的事项:
tiny模型,而不是small..code段后以 100 小时的 ORG 开始。考虑到这些因素,您可以将代码的顶部修改为如下所示:
.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
...
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令构建它:
tasm myprg.asm
tlink /t myprg.obj
Run Code Online (Sandbox Code Playgroud)