assembly 汇编程序编译错误

tjjdgumg  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(160)

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

qni6mghb

qni6mghb1#

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

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程序中,数据、代码和堆栈的所有段都在同一段中。您也可以通过将其替换为:

.model tiny
.code
ORG 100h
Start:

TINY模型是为DOS COM程序创建而设计的。ORG 100h指令前面必须是.code指令。修改后,您必须删除这行:

MyCode          ENDS
3pmvbmvn

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:结束开始

相关问题