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