欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

汇编语言程序解惑

程序员文章站 2024-01-31 14:24:40
...

初始汇编,困惑很多:

推荐几篇博文:

1. INT 21H 解惑:

https://blog.csdn.net/RichieVoe/article/details/8235873

2.代码段开头:

    push ds;

    sub ax,ax;

     push ax

https://blog.csdn.net/u013529907/article/details/37666607

 

 

 

 

 

assume cs:code,ds:data,ss:stack

data segment
     string db 'hello world!',13,10,'$'
     ;13是回车符的ASCII值,
     ;10与换行符的ASCII值
     ;执行的结果是回车换行;
     ;$是字符串结束的标志!
data ends

stack segment

stack ends

code segment
     start:
        push ds
	;程序加载后,DS存放着程序所在内存的段地址,这个内存区域的前256个字节存放在的是PSP
	;什么是psp:====PSP:程序段前缀,是DOS操作系统在执行程序时为程序所建立的一个信息块,   里面包括了传递给待运行程序的命令行参数,   程序运行结束时返回DOS所需的地址等有用的信息.  
	sub ax,ax
	push ax

	;以上三条语句:是为后面的ret做准备,ret即执行pop ip, pop cs,执行完ip的值为0,cs的值为ds。程序转移到程序PSP的起始地址,起始地址的前两个字节放的是int 20指令,用于返回DOS。

	mov ax,data
	mov ds,ax

	lea dx,string   ;lea是伪指令,等价于 mov dx,string,把string单元的地址装到DX,因为下一条指令要用到string的地址
	
	mov ah,9
	int 21h    ;与上一行组合使用----调用DOS功能,该功能为显示DS:DX地址处的字符


	mov ah,4ch
	int 21h
code ends
     end start