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

僞操做是彙編程序對源程序進行彙編時處理的操做,完成處理器選擇、存儲模式定義、數據定義、存儲器分配、指示程序開始結束等功能。

post

處理器選擇僞操做
段定義僞操做
程序開始和結束僞操做
數據定義及存儲器分配僞操做
表達式賦值僞操做
地址計數器與對準僞操做
基數控制僞操做spa

 

 2. 處理器選擇僞操做

.8086 選擇 8086 指令系統
.286 選擇 80286 指令系統
.286P 選擇保護模式下的 80286 指令系統
.386 選擇 80386 指令系統
.386P 選擇保護模式下的 80386 指令系統
.486 選擇 80486 指令系統
.486P 選擇保護模式下的 80486 指令系統
.586 選擇 Pentium 指令系統
.586P 選擇保護模式下的 Pentium 指令系統操作系統

 

3.段定義僞操做

完整的段定義格式code

 

 

段名 SEGMENT [定位類型] [組合類型] [使用類型] [‘類別’]
  ……
  …… ; 語句序列
段名 ENDSblog

 

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

 

 存儲模式與簡化段定義僞操做it

(1) MODEL 僞操做
.MODEL 存儲模式 [,語言類型] [,操做系統類型] [,堆棧選項]
存儲模式:tiny small medium compact large huge flatio

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

(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 表達式 ; 規定無標記數的基數

 

 

 

 

 

 

 

 

相關文章
相關標籤/搜索