<汇编语言(第2版)>2011032701
源代码:
assume cs:codesg
codesg segment
mov ax ,0123h
mov bx ,0456h
add ax ,bx
add ax ,ax
mov ax ,4c00h
int 21h
codesg ends
end
分析:
汇编语言中有两种指令:
汇编指令:对应机器码
伪指令:没有对应的机器码,由编译器识别,不被CPU执行
上述代码中的伪指令有:
1、
XXX segment
.
.
.
XXX ends
segment和ends是一对成对使用的伪指令,功能用来定义一个段,segment说明一个段开始,ends说明一个段结束。
一个段必须有一个名次来标识,格式如下:
段名 segment
.
.
.
段名 ends
一个汇编程序是由多个段组成,这些段用来存放代码、数据或当作栈空间来使用。
一个有意义的汇编程序至少要有一个段,来存放代码。
2、
end是一个汇编程序的结束标记
3、
assume,含义"假设",将有特定用途的段和相关的段寄存器关联起来。
代码中:
assume cs:codesg标识codesg段和cs段寄存器关联
除了伪指令外,还有标号,
如codesg,一个标号指代了一个地址。
这里还有程序返回的概念
就是一个程序结束后,将cpu控制权交还给其他得以运行的程序的过程
代码中:
mov ax,4c00h
int 21h
就是实现程序返回的功能。
关于为什么使用这个int 21h来实现,在于Dos系统中断的定义,其中AH=4Ch,AL=0就定义了21H中断的4C功能,就是带返回码结束,参考地址http://blog.csdn.net/wongson/archive/2009/01/01/3679884.aspx
利用Debug命令来调试,注意Dos的PSP=程序段前缀(PSP)-资料来源:
http://course.cug.edu.cn/21cn/%CE%A2%D0%CD%BC%C6%CB%E3%BB%FA%BC%BC%CA%F5/content/masm/chapter4/4-4/4-4-4.htm
【摘抄】
程序段前缀PSP
DOS运行程序时,需要该程序的一系列参数(如,程序结束地址、Ctrl_Break处理程序的地址、出错处理地址等),另外还需要一个磁盘读、写的缓冲区,这个参数区和缓冲区,称为"程序段前缀(PSP)"。
PSP共有256字节,它是运行程序时,由DOS自动在内存中建立的。 PSP的结构下图所示:
注意:
(1)、PSP起始两字节存放"INT 20H"指令的机器码(CDH 20H),该指令使程序返回DOS;
(2)、EXE程序刚运行时,DS和ES指向PSP首址,即INT20H指令的机器码:COM程序刚运行时,DS,ES,CS,SS均指向PSP首址。
在PSP结构中,我们只关心前两个字节,它是指令"INT 20H"的机器码(CDH、20H)。
无论生活、还是技术,一切都不断的学习和更新~~~努力~