Assembly 使用TASM组装我的程序会产生:意外的文件结束冲突

Assembly 使用TASM组装我的程序会产生:意外的文件结束冲突,assembly,x86,dos,x86-16,tasm,Assembly,X86,Dos,X86 16,Tasm,DOS中的错误是“致命的program.asm(56)意外的文件结束冲突”。 程序应该改变单词中的字母。有什么建议吗?我不知道要编辑什么才能使它在DOS中甚至可以在调试器中一步一步地检查它。在不知道您要修复的原始代码是什么以及该程序应该做什么的情况下,我可以告诉您如何修复问题,使您至少可以将其编译并链接为DOS COM程序。我知道这个作业有一个标题(注释),你已经删除了,所以我不知道程序应该做什么。如果您在更新您的问题时提供了原始作业(包括标题),我可能会进一步帮助您 目前,使用DOS COM程

DOS中的错误是“致命的program.asm(56)意外的文件结束冲突”。
程序应该改变单词中的字母。有什么建议吗?我不知道要编辑什么才能使它在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不支持的行