;数据段定义
data segment
string db "hello world !",0dh,0ah,'$'
;想要显示的字符个数,不显示$
count dw $-string-1
data ends
;堆栈段定义
stack segment stack
top label word
dw 30h dup (?)
stack ends
;代码段定义
code segment
;assum 伪指令,不执行
assume ds:data,ss:stack,cs:code
;main 为主过程名字,类似主函数名,程序从这里开始执行
main proc far
;初始化数据段
mov ax,data
mov ds,ax
;初始化堆栈段
mov ax,stack
mov ss,ax
lea sp,top
;9号功能显示字符串
;串地址=ds:dx
;'$'结束字符串
;lea dx,string
mov dx,offset string
mov ah,9
int 21h
;基址变址
;只能是一个基址寄存器bx,bp+一个变址寄存器si,di
mov cx,count
lea bx,string
mov si,0
next1:
mov dl,[bx+si]
mov ah,2h
int 21h
inc si
loop next1
;寄存器相对寻址
;(基址寄存器bx,bp/变址寄存器si,di)+8位或16位偏移量
mov cx,count
mov si,0
next2:
;mov dl,[string+si]
mov dl,string[si]
mov ah,2h
int 21h
inc si
loop next2
;寄存器间接寻址
;只能是基址寄存器bx,bp/变址寄存器si,di
mov cx,count
lea bx,string
next3:
mov dl,[bx]
mov ah,2h
int 21h
inc bx
loop next3
;利用中断来结束程序,返回OS
mov ah,4ch
int 21h
;主过程main结束
main endp
code ends
;函数入口关闭
end main
标签:string,mov,si,寻址,寄存器,world,bx,hello,21h
From: https://blog.csdn.net/m0_62122789/article/details/136992125