1、数据段+代码段实现打印HelloWord
assume cs:code, ds:data
; 数据段-起始地址就是Hello World! $符代表结束
data segment
db 'Hello World!$'
data ends
; 代码段 start 可有可无
code segment
start:
; 设置ds的值
mov ax, data
mov ds, ax
; 打印字符串
mov dx, 0h
mov ah, 9h
int 21h
; 退出程序
mov ax, 4c00h
int 21h
code ends
end start
2、数据段+代码段实现(字符串不在起始地址)打印HelloWord
; 提醒开发者每个段的含义
assume cs:code, ds:data
; ----- 数据段 begin -----
data segment
age db 20h
no dw 30h
db 10 dup(6) ; 生成10个连续的6
string db 'Hello World!$'
data ends
; ----- 数据段 end -----
; ----- 代码段 begin -----
code segment
start:
; 手动设置ds的值
mov ax, data
mov ds, ax
mov ax, no
mov bl, age
; 打印
mov dx, offset string
; offset string代表string的偏移地址
mov ah, 9h
int 21h
; 退出
mov ax, 4c00h
int 21h
code ends
; ----- 代码段 end -----
; 编译结束,start是程序入口
; start所在的段就是代码段
; 所以cs的值就是code段的段地址
; 相当于cs的值已经自动设置完毕
end start
3、数据段+代码段+栈段
assume cs:code, ds:data, ss:stack
; 栈段
stack segment
db 10 dup(8)
stack ends
; 数据段
data segment
db 20 dup(9)
data ends
; 代码段
code segment
start:
; 手动设置ss和ds
mov ax, stack
mov ss, ax
mov ax, data
mov ds, ax
mov ax, 1122h
mov bx, 3344h
mov [0], ax
; 使用栈
mov sp, 10
push ax
push bx
pop ax
pop bx
; 退出
mov ax, 4c00h
int 21h
code ends
end start