示例1:打印Hello World
; 提醒开发者每个段的含义
assume cs:code, ds:data
; ----- 数据段 begin -----
data segment
age db 20h ;db:代表一个字节
no dw 30h ;dw:代表两个字节
db 10 dup(6) ; 生成10个连续的6
hello 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 hello
; offset hello:代表hello的偏移地址
mov ah, 9h
int 21h
; 退出
mov ax, 4c00h
int 21h
code ends
; ----- 代码段 end -----
; 编译结束,start是程序入口
; start所在的段就是代码段
; 所以cs的值就是code段的段地址
; 相当于cs的值已经自动设置完毕
end start
示例2:ax,bx数据交换
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 sp, 10
push ax
push bx
pop ax
pop bx
; 退出
mov ax, 4c00h
int 21h
code ends
end start