发新话题
打印

汇编语言格式

汇编语言格式

◆解编辑程序、汇编程序、连接程序的功能及其输入、输出文件的类型。

◆了解汇编语言源程序框架,熟悉程序段定   义和过程定义伪操作。


◆熟悉数据类型和数据定义伪操作。
◆熟练掌握并运用8086指令集及各类寻址方式。

3.1  汇编语言程序格式

    汇编语言程序主要由一系列伪指令语句或汇编语言指令组成,伪指令指示汇编程序如何将汇编语言指令转换为机器代码。一条汇编语言指令由助记符,一个或两个操作数项组成。操作数项指出要处理的数据,助记符是对CPU发出的命令,告诉CPU执行什么操作。            

3.1.1.一个简单程序实例

;THE FORM OF AN ASSEMBLY LANGUAGE   PROGRAM


STSEG  SEGMENT


        
DB 64 DUP(?)


STSEG  ENDS


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



DTSEG  SEGMENT


DATA1  DB  36H


DATA2  DB  4BH


SUM    DB  ?


DTSEG  ENDS


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



CDSEG  SEGMENT


MAIN   PROC    FAR  ;this is the program entry point


ASSUMECS:CDSEG,DSTSEG,SS:STSEG

START: MOV  AX,DTSEG     ;load the data segment address


        MOV   DS,AX       ;assign value to DS



        MOV  AL,DATA1    ;get the first operand



        MOV   BL,DATA2    ;get the second operand



        ADD   AL,BL       ;add the operands



        MOV   SUM,AL
      ;store result in location SUM


        MOV   AH,4CH      ;set up to



        INT    21H        ;return to DOS



MAIN
  ENDP


CDSEG
ENDS


        END  START              ;this is the program exit point


汇编语句组成


四个域:[标号:]    助记符   [操作数]   [;注释]



(1)标号域通过标号名或变量名与紧跟其后的代码行地址发生对应关系,标号域不能超过31个字符。
  ◆伪指令的标号域不需要冒号( :)作结束符。


     如: DATA1  DB  36H ;变量-----数据的符号地址。
  汇编语言指令行的标号必须用“:”作结束符,它表示其后一条指令的地址。
     如:START: MOV AX, DTSEG ;标号----- 指令的符号地址














(2)助记符


    汇编语言助记符(指令 )及其操作数转换成机器代码后,由CPU执行规定的工作。伪指令是汇编程序对源程序进行汇编时处理的操作命令。


(3)与伪指令(伪操作)
    伪指令不能生成机器代码,它只为汇编程序提供转换源程序的命令。
(4)注释

    注释以“;”开始,它可以在一行的后部,也可以在一行的第一个字符开始,汇编程序对“;”后的注释不进行处理。注释通常用来说明一条指令或一段程序的功能。

练习题4.  下列标号为什么是非法的?


(1) GET.DATA         
(2) 1_NUM
(3) TEST-DATA   
(4) RET
(5) NEW ITEM


答案:



非法标号:
  


(1)标号不运行使用“.”



(2)第一个字符不能为数字



(3)不允许出现‘-’



(4)不能是保留字,如助记符
  


(5)不能有空格


常用伪操作:


(1)
程序结构伪操作


段定义伪操作         
段名  SEGMENT

   


段名
  ENDS


过程定义伪操作
    过程名 PROC  [NEAR/FAR]


  



过程名
EDP


程序开始伪操作
  TITLE  程序名 ---- 程序说明(<60个ASCII字符)


程序结束伪操作
  END START


段分配伪操作
ASSUME CS:CODE,DSATA,SS:STACK,ESATA

TOP

3.1.2 汇编、连接和运行一个程序

    建立可执行的汇编语言程序的三个步骤:
   (1)用编辑程序(EDIT)建立ASM源文件;
   (2)用汇编程序(MASM)把ASM文件转换为OBJ文件;
   (3)用连接程序(LINK)把OBJ文件转换为EXE文件。
      
建立, 运行汇编语言程序
C>EDIT MYFILE.ASM<CR>
C>MASM MYFILE.ASM<CR>
     Microsoft (R) Macro Assembler Version 5.10
     Copyright (C) Microsoft Corp 1981,1988.All rights reserved.
     Object filename [MYFILE.OBJ]: <CR>
     Source listing  [NUL.LST]: MYFILE.LST<CR>
     Cross-reference [NUL.CRF]: <CR>
            47962 + 413345Bytes symbol space free
                 0 Warning Errors
                 0 Severe  Errors
C>LINK MYFILE.OBJ<CR>
    Microsoft (R) Overlay Linker  Version 3.64
    Copyright (C) Microsoft Corp 1983-1988. All rights reserved.
    Run File [MYFILE.EXE]: <CR>
    List File [NUL.MAP]: <CR>
    Libraries [.LIB]: <CR>
    LINK : warning L4021: no stack segment

    C>MYFILE<CR>

练习题3. 将下列文件类型填入空格:
(1) .obj  (2) .exe  (3) .crf  (4) .asm  (5) .lst  (6) .map
       编辑程序输出的文件有_________________;
       汇编程序输出的文件有_______________;
       连接程序输出的文件有_______________。
答案:
   编辑程序输出文件: (4)
   汇编程序输出文件: (1), (3), (5)
   连接程序输出文件: (2), (6)
3.1.3 数据类型和数据定义
1. 数据类型
8086/8088使用的数据类型是8位或16位的正数和负数。在计算机内部,负数用补码形式表示。
2. 数据定义伪操作
  ORG 指定数据的存储地址或代码段的起始地址
例: ORG 100H
    DATA1  DB 100
例: ORG  100H
    START: MOV AX,BX
   DB  定义字节, 是唯一能定义字符串的伪操作.
; List File for DB Examples
0000  19                            DATA1        DB 25   
0001   89                              DATA2         DB  10001001B  
0002  12                            DATA3        DB  12H     
0010                         ORG 0010H
0010  32 35 39 31                                            DATA4DB  ‘2591’
0018                         ORG       0018H
0018  00                        DATA5       DB        
0020                         ORG       0020H               
0020  4D 79 20 6E 61 6D                        DATA6          DB ‘My name is Joe’
             65 20 69 73 20 4A
             6F 65
002E  0A 10 02 31 30 42             DATA7  DB 10,10H,10B,‘10B’
    DW   
; List File for DW Examples
0070                   ORG 70H
0070  03BA            DATA DW 954
0072  0954                  DATA9 DW 100101010100B
0074  253F                  DATA10 DW 253FH
0076  FFFB                DATA11 DW  -5
0080                   ORG     80H
0080 0009 FFFF 0007 000C  
         0020 0064 4849
                       DATA11     DW  9,-1,7,0CH,00100000B,100,‘HI’
练习题6.  对于下面两个数据段,偏移地址为10H11H的两个字节中的数据是一样的吗?为什么?
DTSEG  SEGMENT      
       ORG             10H                 
    DATA1DB    72H
        DB     04H
    DTSEG  ENDS             
DTEG  SEGMENT
         ORG  10H
   DATA1  DW  7204H
    DTSEG  ENDS
答案: 不一样. 分别是72H, 04H和04H, 72H. 存储字时低8位存在低字节,高8位存在高字节.
练习题7.  下面的数据项设置了多少个字节?
   (1) ASC_DATA DB ‘1234’
   (2) HEX_DATA   DB    1234H
答案: (1) 设置了4个字节;(2) 设置了2个字节
DD        定义双字
    ; List File for DD Examples
00A0                              ORG 00A0H
00A0  000003FF                DATA13  DD 1023
00A4  0008965C                DATA14  DD 10001001011001011100B
00A8  5C2A57F2     DATA15 DD 5C2A57F2H
00AC  00000023 00034789  DATA16 DD 23H,34789H,65533

                      0000FFFD

DQ定义4
DT 为压缩的BCD数据分配存储单元
   ; List File for DQ ,DT Examples
00C0                              ORG   00C0H
00C0  C223450000000000  DATA17 DQ 4523C2H
00C8  4948000000000000  DATA18 DQ ‘HI’        
00D0  0000000000000000     DATA19 DQ  ?
00E0                         ORG    00E0H
00E0  2998564379860000    DATA20  DT 867943569829
            0000
00EA  0000000000000000      DATA21 DT ?
           0000

DUP    按照给定的次数来复制某个(某些)操作数

; List File for DUP Examples
0100                         ORG  0100H 设置32个字节空间
0100  0020[             DATA22  DB 32  DUP(?)
                ??
                          ]
0120                                   ORG 0120H
0120  0005[                  DATA23  DB 5 DUP(2 DUP(99));以99充满10个字节   
        0002[
             63
                ]
                   ]
012A  0008[             DATA24 DW 8 DUP(?) ;设置8个字空间
             ????
                 ]
练习题5.  下面的数据项定义了多少个字节?
   DATA_1  DB         6 DUP(4 DUP(0FFH))
答案:  24字节
EQU  赋值伪操作
  =   赋值伪操作
COUNT              EQU25
COUNTER1       DB    COUNT

COUNTER2       DB    COUNT

TEMP=25
TEMP=TEMP+1

TOP

发新话题