zoukankan      html  css  js  c++  java
  • <汇编语言(第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)。

  • 相关阅读:
    夫妻合伙创业,度过艰苦的时期,酒楼生意蒸蒸日上
    搬运工做起了石头生意,他的石雕产品深受喜爱
    都市白领开毛衣店,仅一年时间收入20万元
    高中生下海创业,几十年来他始终将家乡的利益放在首位
    白手起家的他,创立公司,身价达到数千万
    从搬砖工到亿万富豪,这些年他经历了什么?
    货车司机创业做物流,他只为赢得老百姓的口碑
    患难夫妻做服装,他们的公司在全国做出了名堂
    struts2注解的作用
    struts2注解的作用
  • 原文地址:https://www.cnblogs.com/GoGoagg/p/1996788.html
Copyright © 2011-2022 走看看