当我尝试编译此代码时出现 TASM 错误

问题描述 投票:0回答:1

我目前正在第一次尝试在 Kali Linux 中将汇编语言转换为二进制,但是在根据我的书正确编写汇编语言代码时,我遇到了奇怪的错误。

按照书上的说法,我用tasm翻译了下面的代码后,应该使用tlink软件,但是tasm汇编器给出了错误。

STACKSG SEGMENT STACK `STACK`
    DW 32H DUP(0)
STACKSG ENDS

DATASG SEGMENT `DATA`
DATA1 DB 120
DATASG ENDS

CODESG SEGMENT `CODE`
    ASSUME SS:STACKSG, DS:DATASG, CS:CODESG
MAIN    PROC FAR
        MOV AX, DATASG
        MOV DS, AX
        MOV AX, 4C00H
        INT 21H

MAIN    ENDP
CODESG  ENDS
        END MAIN

和汇编错误:

*Warning* hello.asm(1) ignoring unrecognized character ``'
**Error** hello.asm(1) junk at end of line, first unrecognized character is `S'
*Warning* hello.asm(1) ignoring unrecognized character ``'
*Warning* hello.asm(5) ignoring unrecognized character ``'
*Warning* hello.asm(5) ignoring unrecognized character ``'
*Warning* hello.asm(9) ignoring unrecognized character ``'
*Warning* hello.asm(9) ignoring unrecognized character ``'
**Error** hello.asm(12) undefined symbol `datasg' (first use)
**Error** hello.asm(12)  (Each undefined symbol is reported only once.)

根据我所拥有的书,一切都应该是正确的,我不应该认为这本书是错误的。

本书教授个人电脑的 M-Assembly 直至 Penium 系列。这个味道和x86-64系列有什么不同吗? 我的电脑是 intel x86-64 Victus HP 笔记本电脑。

我的书示例代码的完整图像:

chatgpt AI是这样改正的,但是没用,不起作用,又报了新的错误。

STACKSG SEGMENT STACK
    DW 32 DUP(0)
STACKSG ENDS

DATASG SEGMENT
DATA1 DB 120
DATASG ENDS

CODESG SEGMENT
    ASSUME SS:STACKSG, DS:DATASG, CS:CODESG

MAIN PROC FAR
    MOV AX, DATASG
    MOV DS, AX
    MOV AX, 4C00H
    INT 21H
MAIN ENDP

CODESG ENDS
END MAIN

新错误:

**Error** hello.asm(13) undefined symbol `datasg' (first use)
**Error** hello.asm(13)  (Each undefined symbol is reported only once.)
assembly x86-64 intel
1个回答
0
投票

试试这个。这是你的代码。我只添加了打印服务。

tasm 文件名.asm

t链接文件名.obj

文件名

STACKSG SEGMENT STACK 'STACK'
    DW 32H DUP(0)
STACKSG ENDS

DATASG SEGMENT 'DATA'
DATA1 DB 120
MSG DB "It's a wonderful day to write some code.",13,10,'$'
DATASG ENDS

CODESG SEGMENT 'CODE'
    ASSUME SS:STACKSG, DS:DATASG, CS:CODESG
MAIN    PROC FAR
        MOV AX, DATASG
        MOV DS, AX
        
        mov ah,9h           ; dos print service
        lea dx, MSG         ; dx = msg offset
        int 21h
        
        MOV AX, 4C00H
        INT 21H

MAIN    ENDP
CODESG  ENDS
        END MAIN
© www.soinside.com 2019 - 2024. All rights reserved.