zoukankan      html  css  js  c++  java
  • 173.伪操作

     

    0.1 程序运行步骤及生成的文件

    0.2建立, 运行汇编语言程序

    C>EDIT  MYFILE . ASM  ↓
    C>MASM  MYFILE . ASM  ↓
          Microsoft (R) Macro Assembler Version 5.10 
         Copyright (C) Microsoft Corp 1981,1988.All rights reserved.
         Object filename [MYFILE.OBJ]:   ↓
         Source listing  [NUL.LST]: MYFILE.LST  ↓
         Cross-reference [NUL.CRF]:   ↓
                47962 + 413345Bytes symbol space free
                     0 Warning Errors
                     0 Severe  Errors
    C>LINK  MYFILE . OBJ  ↓
         Microsoft (R) Overlay Linker  Version 3.64
        Copyright (C) Microsoft Corp 1983-1988. All rights reserved.
         Run File [MYFILE.EXE]:   ↓
         List File [NUL.MAP]:   ↓
        Libraries [.LIB]:   ↓
        LINK : warning L4021: no stack segment
        C>MYFILE  ↓

    0.3 汇编程序功能

    汇编程序的主要功能:
      检查源程序,给出出错信息。
      产生目标文件(.obj)和列表文件(.lst)。
      展开宏指令。

    1.伪操作(伪指令)Directives

    伪操作是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。

    处理器选择伪操作
    段定义伪操作
    程序开始和结束伪操作
    数据定义及存储器分配伪操作
    表达式赋值伪操作
    地址计数器与对准伪操作
    基数控制伪操作

     2. 处理器选择伪操作

    .8086 选择 8086 指令系统
    .286 选择 80286 指令系统
    .286P 选择保护模式下的 80286 指令系统
    .386 选择 80386 指令系统
    .386P 选择保护模式下的 80386 指令系统
    .486 选择 80486 指令系统
    .486P 选择保护模式下的 80486 指令系统
    .586 选择 Pentium 指令系统
    .586P 选择保护模式下的 Pentium 指令系统

    3.段定义伪操作

    完整的段定义格式

     

    段名 SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’]
      ……
      …… ; 语句序列
    段名 ENDS

    (1)定位类型 align_type
        PARA    BYTE    WORD    DWORD    PAGE
    (2)组合类型 combine_type
        PRIVATE    PUBLIC    COMMON    STACK    AT   exp
    (3)使用类型 use_type
        USE16    USE32
    (4) 类别 ‘class’

     存储模式与简化段定义伪操作

    (1) MODEL 伪操作
    .MODEL 存储模式 [,语言类型] [,操作系统类型] [,堆栈选项]
    存储模式:tiny small medium compact large huge flat

    .model small
    .stack 100H
    .data
    ……
    .code
    .startup
    ……
    .exit 0
    end

    (2) 简化的段定义伪操作
    .code [name]
    .data
    .data?
    .fardata [name]
    .fardata? [name]
    .const
    .stack [size]

     

    段组定义伪操作

     4.程序开始和结束伪操作

    TITLE text
    NAME module_name
    END [ label ]
    . STARTUP
    . EXIT [ return_value ]

    5.数据定义及存储器分配伪操作

    [变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释]
    助记符:DB DW DD DF DQ DT

    DATA_BYTE DB 10,4,10H,?
    DATA_WORD DW 100,100H,-5,?

    ARRAY  DB ‘HELLO’
        DB ‘AB’
        DW ‘AB’

      PAR1   DW   100,200
      PAR2   DW    300,400
    ADDR_TABLE DW    PAR1,PAR2


    VAR DB 100 DUP (?)
       DB 2 DUP (0,2 DUP(1,2),3)

    OPER1 DB ?, ?
    OPER2 DW ?, ?
      ……
      MOV OPER1, 0 ;字节指令
      MOV OPER2, 0 ;字指令

    OPER1 DB 1, 2
    OPER2 DW 1234H, 5678H
      ……
      MOV AX, OPER1+1 ×
      MOV AL, OPER2 × 类型不匹配

      MOV AX, WORD PTR OPER1+1
      MOV AL, BYTE PTR OPER2

     

    (AX)=3402H (AL)=34H

    LABEL 伪操作: name LABEL type

    BYTE_ARRAY LABEL BYTE
    WORD_ARRAY DW 50 DUP (?)
      tos LABEL WORD


    6.表达式赋值伪操作

    表达式名 EQU 表达式

      ALPHA   EQU    9
      BETA      EQU    ALPHA+18
      BB     EQU    [BP+8]

    “ = ” 伪操作 (允许重复定义)

      ……
      EMP = 7
      ……
      EMP = EMP+1
      ……

    7.地址计数器与对准伪操作

    地址计数器 $ :保存当前正在汇编的指令的地址
    ORG    $+8    ; 跳过8个字节的存储区
    JNE      $+6    ; 转向地址是 JNE 的首址 +6
    JMP     $+2    ;转向下一条指令

    $ 用在伪操作的参数字段:
      表示地址计数器的当前值

    ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4

     

     

    8.基数控制伪操作

    . RADIX 表达式 ; 规定无标记数的基数

      

  • 相关阅读:
    python爬虫三大解析库之XPath解析库通俗易懂详讲
    经济学人精读笔记11:你还会逛实体书店吗?
    经济学人精读笔记10:员工休假居然对企业有好处?
    每日一句
    经济学人精读笔记9:打出租out了,“飞的”时代要来了!
    经济学人精读笔记8:企业应该倾听员工的声音
    经济学人精读笔记7:动乱当道,你还想买LV吗?
    经济学人精读笔记6:美团拼多多上市后高歌猛进,逆袭成功
    经济学人精读笔记5:国外枪击事件频发,中国留学生望而生畏
    经济学人精读笔记4:想脱单吗?政府帮你找到另一半!
  • 原文地址:https://www.cnblogs.com/ZanderZhao/p/11055128.html
Copyright © 2011-2022 走看看