汇编语言程序解惑
程序员文章站
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