汇编程序编译错误

时间:2018-03-17 13:17:55

标签: assembly x86-16

我在跟踪16位TASM程序时遇到问题,该程序评估表达式(a b + c d)/(a-d):

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段寄存器进行寻址。在我看来,我错过了一个块的定义,但我不知道如何继续前进。这段代码有什么问题?

1 个答案:

答案 0 :(得分:0)

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

MyCode          SEGMENT     

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

Start:

您不会在假设中使用指令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