汇编_第4章 伪指令及程序格式_第1页
汇编_第4章 伪指令及程序格式_第2页
汇编_第4章 伪指令及程序格式_第3页
汇编_第4章 伪指令及程序格式_第4页
汇编_第4章 伪指令及程序格式_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、伪操作(伪指令) 伪操作是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。l 处理器选择伪操作l 段定义伪操作l 程序开始和结束伪操作l 数据定义及存储器分配伪操作l 表达式赋值伪操作l 地址计数器与对准伪操作l 基数控制伪操作语句类型指令(性)语句完成一定操作功能,能够翻译成机器代码的语句指示性语句(伪指令语句)为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码语句类型及格式语句类型#include stdafx.h #include stdio.h int main(int argc, char* argv)

2、int a=1,b=2,c; c=a+b; printf(“c=%dn,c); return 0; 用C语言编程实现 c = a + b,并在屏幕上显示出结果。 例:C语言编程的格式指示性语句指令性语句例:完成两个字节数据相加。DATA SEGMENT ;段定义开始(DATA段) BUF1 DB 34H ;第1个加数 BUF2 DB 2AH ;第2个加数 SUM DB ? ;准备用来存放和数的单元DATA ENDS ;段定义结束(DATA段)CODE SEGMENT ;段定义开始(CODE段) ASSUME CS:CODE,DS:DATA ;规定DATA、CODE分别为数据段和代码段 STAR

3、T: MOV AX,DATA MOV DS,AX ;给数据段寄存器DS赋值 MOV AL,BUF1 ;取第1个加数 ADD AL,BUF2 ;和第2个加数相加 MOV SUM,AL ;存放结果 MOV AH,4CH INT 21H ;返回DOS状态CODE ENDS ;段定义结束(CODE段) END START ;整个源程序结束 伪指令语句指令语句一个完整的汇编程序语句格式指令性语句:格式:名字: 操作码 操作数,操作数 ;注释伪指令语句:格式:名字 伪操作 操作数,操作数, ;注释含义:由用户按一定规则定义的标识符组成:英文字母、数字、特殊符号形式:标号和变量名字定义满足的规则(1)数字不

4、能作为第一个字符(2)单独的问号(?)不能作为名字(3)最大有效长度为31(4)保留字不能作为名字使用语句的说明部分操作码 含义:指明操作的性质或功能。书写规则:操作码与操作数之间用空格分开。操作数含义:指定参与操作的数据。个数:一般指令,1个或2个,也可以没有; 伪指令和宏指令,可以有多个。书写规则:操作数多于1个时,操作数之间用 逗号分开 段定义伪操作:完整的段定义格式 data segment ; 定义数据段 data ends;-extra segment ; 定义附加段 extra ends;-code segment ; 定义代码段 assume cs:code, ds:data,

5、 es:extrastart: mov ax, data mov ds, ax ; 段地址 段寄存器 code ends end startPSPDSESSSCSEXE程序的内存映象图装入模块文件头方式二:code segmentmain proc far assume start: push ds mov ax, 0 push ax retmain endpcode ends end start方式一:code segment assume start: mov ah,4ch int 21hcode ends end start代码段中程序结束的两种方式段名 SEGMENT 定位类型 组合类

6、型 使用类型 类别 ; 语句序列段名 ENDS定位类型 align_type PARA BYTE WORD DWORD PAGE组合类型 combine_type PRIVATE PUBLIC COMMON STACK AT exp使用类型 use_type USE16 USE32(4) 类别 classu 指定段址伪指令 格式: ASSUME :,:功能:建立段寄存器与段的缺省关系注意: ASSUME伪指令并不为段寄存器设定初值例: assume cs:code, ds:data, es:extra其中:code是代码段的段名,data是数据段的段名,extra是扩展段的段名u 设置段地址值

7、 含义:在程序的代码段开始处进行DS、SS、ES的段基址 装填。 例:MOV AX, DATA MOV DS, AX程序装入内存后,段寄存器的指向PSP程序代码DS、SS 、 ES文件头CSEND label 表示汇编程序的结束 结束伪操作code segment ; 定义代码段 assume cs:code, ds:data, es:extrastart: mov ax, data mov ds, ax ; 段地址 段寄存器 code ends end start例: 数据定义及存储器分配伪操作变量 助记符 操作数 , 操作数 , ; 注释 助记符:DB,DW,DD,DF,DQ(64位),D

8、T(80位)DATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,?- 0AH 04H 10H - 64H 00H 00H 01H FBH FFHDATA_BYTE DATA_WORD 例:DB: 定义字节DW:定义字DD: 定义双字ARRAY DB HELLO DB AB DW AB 48H 45H 4CH 4CH 4FH 41H 42H 42H 41H ARRAY VAR DB 100 DUP (?) DB 2 DUP (0,2 DUP(1,2),3)存储单元分配实例: PAR1 DB 100,20H PAR2 DW 300H,400H ADDR_

9、TABL1 DW PAR1,PAR2;存放偏移地址 ADDR_TABL2 DD PAR1,PAR2;存放偏移和段地址 64H 20H 00H 03H 00H 04H 偏低 偏高 偏低 PAR1 偏低偏高段低段高偏低偏高段低段高 PAR2 ADDR_TABL1 偏高PAR1的偏移地址PAR2的偏移地址ADDR_TABL2 PAR1的偏移地址PAR1的段地址PAR2的偏移地址PAR2的段地址存储单元分配实例:操作数常数代表数据字节数据例:DATAB DB 18H,-1,30字数据例:DATAW DW 18H,2A45H 双字数据例:DATAD DD 18H,2F3A124BH表达式代表内存单元地址

10、例: ADDR1 DW NEXT ;存放偏移地址 ADDR2 DD NEXT ;存放偏移和段地址NEXT:MOV AL,34H ;NEXT为一条指令的标号段地址高字节偏移地址高字节偏移地址低字节偏移地址高字节段地址低字节偏移地址低字节ADDR1ADDR2字符串存放各字符的ASCII码例:STR1 DB ABCD STR1 DB A, B, C, D STR1 DB 41H,42H,43H,44H ?只分配单元,不定义初值例:BUF1 DB 5,6,7,? BUF2 DW 56H,78H,?,345FH例:操作数用复制操作符DUP,表示操作数重复若干次 BUF1 DB 2 DUP(2,3,4)

11、BUF2 DW 1,2,3 DUP(6)FF1E180045001800182A004B123A2FDATABDATABDATAWDATAWDATADDATAD例(字节或字的赋值):OPER1 DB ?, ?OPER2 DW ?, ? MOV OPER1, 0 ;字节指令 MOV OPER2, 0 ;字指令结果为:(AX)=3402H (AL)=34H例(错误的赋值语句):OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 类型不匹配 MOV AL, OPER2 类型不匹配 修改成:MOV AX, WORD PTR OPER1+1MOV AL,

12、 BYTE PTR OPER2 表达式赋值伪操作表达式名 EQU 表达式ALPHA EQU 9BETA EQU ALPHA+18“ = ” 伪操作 (允许重复定义)EMP = 7EMP = EMP+1解除定义伪指令PURGE格式:PURGE 功能:解除指定符号的定义例:Y1 EQU 7 PURGE Y1 Y1 EQU 128 EQU与=的差异:同一个程序中 = 可以对一个符号重复定义,EQU不能对同一个符号重复定义例:Y1=7 Y1=128 的定义是正确的 Y1 EQU 7 Y1 EQU 128 的定义是错误的 地址计数器与对准伪操作地址计数器 $ :保存当前正在汇编的指令的地址 ORG $+

13、8 ; 跳过8个字节的存储区 JNE $+6 ; 转向地址是 JNE 的地址 +6 JMP $+2 ; 转向下一条指令$ 用在伪操作的参数字段:表示地址计数器的当前值 例:ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4 00H 01H 00H 02H 00H 7CH 00H 03H 00H 04H 00H 82H ARRAY 007E00780074地址计数器$的常用使用方法应用:常用来确定数组中元素的个数例:BUF1 DB 1,2,3,4,5 CNT1 EQU $-BUF1 (常用) BUF2 DW 1,2,3,4,5 CNT2 EQU ($-BUF2)/2 CNT1、C

14、NT2的值分别为数组BUF1、BUF2中数据元素的个数 例:SEG1 SEGMENT ORG 10 VAR1 DW 1234H ORG 20 VAR2 DW 5678H ORG $+8 VAR3 DW 1357HSEG1 ENDS例: ORG 100HSTART: u ORG 伪操作 定义偏移量表达式操作符:(1) 算术操作符: 、 、 、Mod VIDEO_BUF DB 25*80*2 DUP(?)ARRAY DW 1,2,3,4,5,6,7ARYEND DW ?MOV CX, (ARYEND-ARRAY)/2ADD AX, BLOCK+2 ; 符号地址常数 有意义 ; 时意义不明确MOV

15、AX, BX+1 ; MOV AX, BX+1 ; 寄存器间接寻址OPR1 EQU 25 ;0001001BOPR2 EQU 7 ;00000111BAND AX, OPR1 AND OPR2(2) 逻辑和移位操作符: AND、OR、XOR、NOT、SHL、SHR;AND AX,1MOV AX, 0FFFFH SHL 2;MOV AX,0FFFCH(3) 关系操作符: EQ、NE、LT、LE、GT、GE计算结果为逻辑值:真 0FFFFH 假 0000HX: Y: 若 128 (真) 汇编结果: MOV FID, -1若 128 (假) 汇编结果: MOV FID, 0MOV FID, (OFF

16、SET Y - OFFSET X) LE 128(4) 数值回送操作符: OFFSET、SEG、LENGTH、SIZE SIZE 变量功能:LENGTH * TYPEOFFSET / SEG 变量 / 标号功能:回送变量或标号的偏址 / 段址LENGTH 变量功能:回送由DUP定义的变量的单元数,其它情况回送1TYPE 变量功能:指出变量的类型。字节:TYPE=1,字:TYPE=2,双字:TYPE=4例:ARRAY DW 100 DUP (?)TABLE DB ABCDMOV CX, LENGTH ARRAY ; MOV CX, 100MOV CX, LENGTH TABLE ; MOV CX

17、, 1MOV CX, SIZE ARRAY ; MOV CX, 200MOV CX, SIZE TABLE ; MOV CX, 1(5) 属性操作符: PTR类型 PTR 表达式 MOV WORD PTR BX, 5PTR运算符实例 用于暂时改变变量或标号的原有属性。格式为: 新属性 PTR 表达式例:F1 DW 1234H MOV AL,BYTE PTR F1 ;AL=34H例:F2 DB 23H,56H,18H MOV BX,WORD PTR F2 ;BX=5623H例:CALL DWORD PTR BX ;远程调用汇编语言源程序结构 完整段定义结构:用段定义伪指令,对用到的逻辑段分别定义

18、典型的结构:数据段名 SEGMENT 数据段名 ENDS堆栈段名 SEGMENT 堆栈段名 ENDS代码段名 SEGMENT ASSUME START:段地址装填 MOV AH,4CH INT 21H代码段名 ENDS END START例:求字存储单元中两个数之差,结果存入下一个相邻的字单元中。DATA SEGMENT BUF DW 3483H,4596H RES DW ? DATA ENDSSTACK SEGMENT STACK STACK STA DW 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE.DS:DATASTART: MOV AX

19、,DATA MOV DS,AX MOV AX,BUF SUB AX,BUF+2 MOV RES,AX MOV AH,4CH INT 21H CODE ENDS END START例:三个数相加并把结果存放在SUM单元中 DATA SEGMENT BUF DB 35H,78H,0A5H SUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ASUM PROC FAR START:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX程序段前缀结构含义:把整个程序定义成一个FAR型过程 MOV AL,0 MOV SI,OFFSET BUF ADD AL,SI INC SI ADD AL,SI INC SI ADD AL,SI MOV SUM,AL RET ASUM ENDP CODE ENDS END STARTEXE文件:分别定义了数据段,代码段和堆栈段COM文件:只定义了一个段.1. 程序运行步骤及生成的文件myfile.asm编辑程序汇编程序连接程序myfile.crfot

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论