offset

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容