汇编程序编译错误

Assembly program compilation error

我在使用以下计算表达式 (ab+cd)/(a-d):

的 16 位 TASM 程序时遇到问题
MyCode          SEGMENT     

            ORG      100h
            ASSUME  CS:SEGMENT MyCode, DS:SEGMENT MyCode, SS:SEGMENT

Start:
            jmp      Beginning

a               DB      20
b               EQU     10
c               DW      5
d               =       3
Result          DB      ?

Beginning:
            mov     al, a    
            mov     bl, b    
            mov     dx,ax    
            mov     al, BYTE PTR c    
            mov     bl, d    
            mul     bl        
            add     dx,ax   
            mov     al, a     
            sub     al,bl    
            mov     bl,al    
            mov     ax,dx    
            div     bl        

            mov     Result, al 

            mov     ax, 4C00h
            int     21h

MyCode          ENDS

            END Start

我在 DOSBox 控制台中遇到的编译错误表明存在未定义的符号 (SEGMENT),并且编译器无法使用当前的 ASSUMEd 段寄存器进行寻址。在我看来,我缺少块的定义,但我不知道如何进一步进行。这段代码有什么问题?

我不会为您修复逻辑错误,但这段代码顶部的语法不正确:

MyCode          SEGMENT     

            ORG      100h
            ASSUME  CS:SEGMENT MyCode, DS:SEGMENT MyCode, SS:SEGMENT

Start:

您没有在 assume 中使用指令 SEGMENT,它们必须被删除。删除后,段必须有一个名称应用于它们。 SS: 上缺少一个。它应该看起来像:

MyCode          SEGMENT

            ASSUME  CS:MyCode, DS:MyCode, SS:MyCode
            ORG      100h

Start:

在DOS COM 程序中,DATA、CODE 和STACK 的所有段都在同一个段中。您也可以通过将其替换为:

来实现相同的目的
.model tiny
.code
ORG 100h
Start:

TINY 模型设计用于创建 DOS COM 程序。 ORG 100h 指令必须位于 .code 指令之前。通过此修改,您必须 删除 这一行:

MyCode          ENDS