str db 'Hello,ASM~$'
str是标号
当 mov dx,str 时,其含义为 mov dx,[标号],则 mov dx,'H'
所以肯定报错
str: db 'Hello,ASM~$'
str:是标号的地址
当 mov dx,str 时,其含义为 mov dx,标号的地址,则正确
assume cs:code,ds:data,ss:stack
stack segment
db 20 dup(0)
ends
data segment
db 3 dup(0)
str: db 'Hello,ASM~$'
ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov dx,str
mov ah,9h
int 21h
mov ah,4ch
int 21h
ends
end start
另外可以使用offset来解决此问题
assume cs:code,ds:data,ss:stack
stack segment
db 20 dup(0)
ends
data segment
db 3 dup(0)
str db 'Hello,ASM~Hello,ASM~$'
ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov dx,offset str
mov ah,9h
int 21h
mov ah,4ch
int 21h
ends
end start
也就是说
str db 'Hello,ASM~$' 与
mov dx,offset str 成组使用
str: db 'Hello,ASM~$' 与
mov dx,str 成组使用
打印代码:
打印操作为向ah寄存器传入9h,此时CPU会根据dx寄存器的信息来打印数据,遇到‘$’时结束
mov ah,9h
int 21h
退出代码:
退出代码为调用dos系统的退出功能
mov ah,4ch
int 21h