下面的16位TASM程序计算表达式(ab+cd)/(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段寄存器进行处理。在我看来,我错过了块的定义,但我不知道如何进一步进行。这个代码有什么问题吗?
2条答案
按热度按时间qni6mghb1#
我不会为您修复逻辑错误,但这段代码顶部的语法不正确:
在假设中不使用
SEGMENT
指令,它们必须被删除。删除后,段必须有一个应用于它们的名称。SS:
上缺少一个。它应该看起来像:在DOS COM程序中,数据、代码和堆栈的所有段都在同一段中。您也可以通过将其替换为:
TINY模型是为DOS COM程序创建而设计的。
ORG 100h
指令前面必须是.code
指令。修改后,您必须删除这行:3pmvbmvn2#
L1:.型号小号L2:.栈L3:.data L4:printStr db“潘加西南州立大学”L5:.code L6:开始:L7:mov dx,OFFSET printString
L8:移动轴,SEG打印应力
L9:移动ds,ax
L10:mov啊,9H
L11:int 21H
L12:mov ah,4ch
L13:int 21D
L14:结束开始