你好世界!使用标准段指令
Hello World! with standard segment directives
我用简化的段指令编写了 "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
我的 TASM 告诉 "No entry point",垃圾字符可能表示缺少数据段初始化,所以让我们修复这两个问题:
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 ◄─────────┘
代码底部的"END"指令也指明了程序开始执行的点。 TASM、EMU8086、GUI Turbo Assembler 等需要初始化数据段,"ASSUME" 不够。
我用简化的段指令编写了 "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
我的 TASM 告诉 "No entry point",垃圾字符可能表示缺少数据段初始化,所以让我们修复这两个问题:
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 ◄─────────┘
代码底部的"END"指令也指明了程序开始执行的点。 TASM、EMU8086、GUI Turbo Assembler 等需要初始化数据段,"ASSUME" 不够。