Assembly 使用TASM组装我的程序会产生:意外的文件结束冲突
DOS中的错误是“致命的program.asm(56)意外的文件结束冲突”。Assembly 使用TASM组装我的程序会产生:意外的文件结束冲突,assembly,x86,dos,x86-16,tasm,Assembly,X86,Dos,X86 16,Tasm,DOS中的错误是“致命的program.asm(56)意外的文件结束冲突”。 程序应该改变单词中的字母。有什么建议吗?我不知道要编辑什么才能使它在DOS中甚至可以在调试器中一步一步地检查它。在不知道您要修复的原始代码是什么以及该程序应该做什么的情况下,我可以告诉您如何修复问题,使您至少可以将其编译并链接为DOS COM程序。我知道这个作业有一个标题(注释),你已经删除了,所以我不知道程序应该做什么。如果您在更新您的问题时提供了原始作业(包括标题),我可能会进一步帮助您 目前,使用DOS COM程
程序应该改变单词中的字母。有什么建议吗?我不知道要编辑什么才能使它在DOS中甚至可以在调试器中一步一步地检查它。在不知道您要修复的原始代码是什么以及该程序应该做什么的情况下,我可以告诉您如何修复问题,使您至少可以将其编译并链接为DOS COM程序。我知道这个作业有一个标题(注释),你已经删除了,所以我不知道程序应该做什么。如果您在更新您的问题时提供了原始作业(包括标题),我可能会进一步帮助您 目前,使用DOS COM程序,您不会像DOS EXE那样创建
段。因此,您必须删除kod段
,假设CS:kod,DS:Tekst,SS:Stosik
,kod结束
。您必须在.model TINY
之后放置.code
指令,并使用org 100h
设置原点。COM程序需要一个入口点。入口点是Start
。您需要使用带有入口点名称的end
语句结束COM程序。因此,文件的结尾需要end Start
行Tekst-DD-napis,“$”
需要是Tekst-DB“napis”,“$”
。字符串是用DB
(byte)指令创建的,字符串需要用引号括起来。行mov bl,napis
需要将Tekst
的偏移量(地址)移动到BX,而不是napis
,因此它应该是mov BX,offset Tekst
让您开始的代码至少可以组装和链接如下所示:
.MODEL TINY
Kod SEGMENT
ORG 100h/256
ASSUME CS:Kod, DS:Tekst, SS:Stosik
Start:
jmp Petla
Tekst DD napis, '$'
Poczatek:
mov bl, napis
Petla:
cmp ah, '$'
mov al, [bx]
jne Wyswietlenie
inc bh
mov [bx], ax
cmp al, '$'
mov [bx - 1], ax
je Wyswietlenie
mov [bx], bl
dec bl
jmp Petla
Wyswietlenie:
mov ah, 09h
mov dx, OFFSET Tekst
int 21h
mov ax, 4C70h
int 21h
ENDPRG Poczatek
KOD ENDS
您应该能够使用turbo调试器来运行和测试程序,并修复逻辑错误,鉴于提供的信息,我无法帮助您解决这些错误
我从代码中怀疑其目的是交换每对字符,直到找到字符串的结尾。如果是这种情况,那么代码的主要部分可能是:
.MODEL TINY
.code
ORG 100h
Start:
jmp Poczatek
Tekst DB "napis", '$'
Poczatek:
mov bx, offset Tekst
Petla:
cmp ah, '$'
mov al, [bx]
jne Wyswietlenie
inc bh
mov [bx], ax
cmp al, '$'
mov [bx - 1], ax
je Wyswietlenie
mov [bx], bl
dec bl
jmp Petla
Wyswietlenie:
mov ah, 09h
mov dx, OFFSET Tekst
int 21h
mov ax, 4C70h
int 21h
END Start
在不知道您要修复的原始代码是什么以及该程序应该做什么的情况下,我可以告诉您如何修复这些问题,这些问题至少可以让您将其编译并链接为DOS COM程序。我知道这个作业有一个标题(注释),你已经删除了,所以我不知道程序应该做什么。如果您在更新您的问题时提供了原始作业(包括标题),我可能会进一步帮助您
目前,使用DOS COM程序,您不会像DOS EXE那样创建段。因此,您必须删除kod段
,假设CS:kod,DS:Tekst,SS:Stosik
,kod结束
。您必须在.model TINY
之后放置.code
指令,并使用org 100h
设置原点。COM程序需要一个入口点。入口点是Start
。您需要使用带有入口点名称的end
语句结束COM程序。因此,文件的结尾需要end Start
行Tekst-DD-napis,“$”
需要是Tekst-DB“napis”,“$”
。字符串是用DB
(byte)指令创建的,字符串需要用引号括起来。行mov bl,napis
需要将Tekst
的偏移量(地址)移动到BX,而不是napis
,因此它应该是mov BX,offset Tekst
让您开始的代码至少可以组装和链接如下所示:
.MODEL TINY
Kod SEGMENT
ORG 100h/256
ASSUME CS:Kod, DS:Tekst, SS:Stosik
Start:
jmp Petla
Tekst DD napis, '$'
Poczatek:
mov bl, napis
Petla:
cmp ah, '$'
mov al, [bx]
jne Wyswietlenie
inc bh
mov [bx], ax
cmp al, '$'
mov [bx - 1], ax
je Wyswietlenie
mov [bx], bl
dec bl
jmp Petla
Wyswietlenie:
mov ah, 09h
mov dx, OFFSET Tekst
int 21h
mov ax, 4C70h
int 21h
ENDPRG Poczatek
KOD ENDS
您应该能够使用turbo调试器来运行和测试程序,并修复逻辑错误,鉴于提供的信息,我无法帮助您解决这些错误
我从代码中怀疑其目的是交换每对字符,直到找到字符串的结尾。如果是这种情况,那么代码的主要部分可能是:
.MODEL TINY
.code
ORG 100h
Start:
jmp Poczatek
Tekst DB "napis", '$'
Poczatek:
mov bx, offset Tekst
Petla:
cmp ah, '$'
mov al, [bx]
jne Wyswietlenie
inc bh
mov [bx], ax
cmp al, '$'
mov [bx - 1], ax
je Wyswietlenie
mov [bx], bl
dec bl
jmp Petla
Wyswietlenie:
mov ah, 09h
mov dx, OFFSET Tekst
int 21h
mov ax, 4C70h
int 21h
END Start
首先也是最重要的是,如果您使用
开始:
);那么你也必须结束它,要结束它,请写信
结束-开始
);在代码末尾
此外,汇编程序需要END指令作为文件结束命令。
因此,正如我们看到的,“END START”将包含在代码中。但是在哪里呢
答案是汇编程序总是为文件结束命令寻找END指令。
因此,包括结束-开始作为最后一行代码
注意:致命错误,意外的文件结尾
这个错误将被解决,但我还没有调试其他可能的错误,如果您使用
开始:
);那么你也必须结束它,要结束它,请写信
结束-开始
);在代码末尾
此外,汇编程序需要END指令作为文件结束命令。
因此,正如我们看到的,“END START”将包含在代码中。但是在哪里呢
答案是汇编程序总是为文件结束命令寻找END指令。
因此,包括结束-开始作为最后一行代码
注意:致命错误,意外的文件结尾
错误将由此解决,但我尚未调试其他可能的错误,如果存在将源代码组装到可执行程序中所使用的命令是什么?tasm program.asm/zi。错误出现在此时您不需要某种类型的BEGIN
来匹配ENDPRG Poczatek
?Poczatek:
只是在那里设置了一个标签,可能不算数。但错误是它到达文件末尾时没有找到它要查找的内容,而不是不匹配的结尾或其他内容,所以可能不是这样。如果在文件组装之前删除行(在文件副本中),也许可以找出TASM不支持的行