我目前正在第一次尝试在 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.)
试试这个。这是你的代码。我只添加了打印服务。
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