<汇编语言(第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的结构下图所示:

2011032711383065.gif
注意:
  (
1)、PSP起始两字节存放"INT 20H"指令的机器码(CDH 20H),该指令使程序返回DOS;
  (2)、EXE程序刚运行时,DS和ES指向PSP首址,即INT20H指令的机器码:COM程序刚运行时,DS,ES,CS,SS均指向PSP首址。

  在PSP结构中,我们只关心前两个字节,它是指令"INT 20H"的机器码(CDH、20H)。

转载于:https://www.cnblogs.com/GoGoagg/archive/2011/03/27/1996788.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值