我写过“Hello World!”具有简化段指令的代码,
.MODEL small
.STACK
.DATA
msg DB 'Hello, World!', 0Dh, 0Ah, '$'
.CODE
.STARTUP
LEA DX, msg
MOV ah, 9
INT 21h
MOV ah, 4Ch
INT 21h
END
但是在使用标准指令编写相同内容时,我必须写错(或遗漏某些内容)。代码打印出一堆符号,最后只有句子“Hello World!”。我错过了什么?
myData SEGMENT
msg DB 'Hello, World!', 0Dh, 0Ah, '$'
myData ENDS
myCode SEGMENT
ASSUME DS:myData, CS:myCode, SS:myStack
LEA DX, msg
MOV ah, 9
INT 21h
MOV ah, 4Ch
INT 21h
myCode ENDS
myStack SEGMENT
myStack ENDS
END
答案 0 :(得分:3)
我的TASM告诉"没有入口点",垃圾字符可能表示缺少数据段的初始化,所以让我们解决这两个问题:
myData SEGMENT
msg DB 'Hello, World!', 0Dh, 0Ah, '$'
myData ENDS
myCode SEGMENT
ASSUME DS:myData, CS:myCode, SS:myStack
begin: ;◄■■ ENTRY POINT ◄────────┐
│
mov ax, myData ;◄■■ INITIALIZATION │
mov ds, ax ;◄■■ OF DATA SEGMENT. │
│
LEA DX, msg │
MOV ah, 9 │
INT 21h │
│
MOV ah, 4Ch │
INT 21h │
myCode ENDS │
│
myStack SEGMENT │
myStack ENDS │
│
END begin ;◄■■ ENTRY POINT ◄─────────┘
"结束"代码底部的指令也指示程序开始执行的点。在TASM,EMU8086,GUI Turbo汇编器和其他地方需要初始化数据段,其中" ASSUME"还不够。