你好,世界!标准细分指令

时间:2016-12-20 17:45:37

标签: assembly x86-16 tasm

我写过“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

1 个答案:

答案 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"还不够。