版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 伪指令的伪指令的功能与格式功能与格式 主要的主要的伪指令类型伪指令类型 汇编语言程序格式汇编语言程序格式 汇编语言程序的上机过程汇编语言程序的上机过程第第3-2章章 伪指令和程序格式伪指令和程序格式伪操作(伪指令)伪操作(伪指令) 伪操作是汇编程序对源程序进行汇编时处理的操作,伪操作是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。(配、指示程序开始结束等功能。(一是便于提高编程效一是便于提高编程效率;二是用于指导编译器如何编译汇编程序率;二是用于指导编译器如何编译汇编程序) 段
2、定义伪操作段定义伪操作 程序结束伪操作程序结束伪操作 数据定义及存储器分配伪操作数据定义及存储器分配伪操作 表达式赋值伪操作表达式赋值伪操作 地址计数器与对准伪操作地址计数器与对准伪操作语句类型语句类型指令(性)语句指令(性)语句完成一定操作功能,能够翻译成机完成一定操作功能,能够翻译成机器代码的语句器代码的语句指示性语句(伪指令语句)指示性语句(伪指令语句)为汇编程序在翻译汇编语言源程序时为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码提供有关信息,并不翻译成机器代码语句类型及格式语句类型语句类型#include stdafx.h#include stdafx.h #incl
3、ude stdio.h #include stdio.h int int main main(int argc, charint argc, char* * argv argv) int int a=1,b=2,c; a=1,b=2,c; c c= =a+ba+b; ; printf(“c printf(“c=%dn,c);=%dn,c); return 0; return 0; 指示性语句指示性语句指令性语句指令性语句例:完成两个字节数据相加。例:完成两个字节数据相加。DATA SEGMENT ;段定义开始(;段定义开始(DATA段)段) BUF1 DB 34H ;第第1个加数个加数 BUF
4、2 DB 2AH ;第第2个加数个加数 SUM DB ? ;准备用来存放和数的单元;准备用来存放和数的单元 DATA ENDS ;段定义结束(;段定义结束(DATA段)段) CODE SEGMENT ;段定义开始(;段定义开始(CODE段)段) ASSUME CS:CODE,DS:DATA ;规定;规定DATA、CODE分别为数据段和代码段分别为数据段和代码段 START: MOV AX,DATA MOV DS,AX ;给数据段寄存器;给数据段寄存器DS赋值赋值 MOV AL,BUF1 ;取第;取第1个加数个加数 ADD AL,BUF2 ;和第;和第2个加数相加个加数相加 MOV SUM,AL
5、 ;存放结果;存放结果 MOV AH,4CH INT 21H ;返回;返回DOS状态状态CODE ENDS ;段定义结束(;段定义结束(CODE段)段) END START ;整个源程序结束;整个源程序结束 伪指令语句伪指令语句指令语句指令语句一个完整程序语句格式语句格式指令性语句指令性语句:格式:格式: 名字:名字: 操作码操作码 操作数操作数 ,操作数,操作数 ;注释;注释 伪指令语句伪指令语句:格式:格式: 名字名字 伪操作伪操作 操作数操作数 ,操作数,操作数, ;注释;注释 含义:由用户按一定规则定义的标识符含义:由用户按一定规则定义的标识符组成:英文字母、数字、特殊符号组成:英文字
6、母、数字、特殊符号形式:标号和变量形式:标号和变量名字定义满足的规则名字定义满足的规则(1 1)数字不能作为第一个字符)数字不能作为第一个字符(2 2)单独的问号(?)不能作为名字)单独的问号(?)不能作为名字(3 3)最大有效长度为)最大有效长度为3131(4 4)保留字不能作为名字使用)保留字不能作为名字使用语句的说明部分操作码操作码 含义:指明操作的性质或功能。含义:指明操作的性质或功能。书写规则:操作码与操作数之间用空格分开。书写规则:操作码与操作数之间用空格分开。操作数操作数含义:指定参与操作的数据。含义:指定参与操作的数据。个数:一般指令,个数:一般指令,1 1个或个或2 2个,也
7、可以没有;个,也可以没有; 伪指令和宏指令,可以有多个。伪指令和宏指令,可以有多个。书写规则:操作数多于书写规则:操作数多于1 1个时,操作数之间用个时,操作数之间用 逗号分开逗号分开 伪指令的伪指令的功能与格式功能与格式 主要的主要的伪指令类型伪指令类型 汇编语言程序格式汇编语言程序格式 汇编语言程序的上机过程汇编语言程序的上机过程 段定义伪操作:段定义伪操作:完整的段定义格式完整的段定义格式 data segment data segment ; 定义数据段定义数据段 data endsdata ends;-;-extra segment extra segment ; 定义附加段定义附加
8、段 extra endsextra ends;-;-code segment code segment ; 定义代码段定义代码段 assume cs:code, ds:data, es:extraassume cs:code, ds:data, es:extrastart: start: mov mov ax, data ax, data mov ds mov ds, ax , ax ; 段地址段地址 段寄存器段寄存器 code endscode ends end start end startPSPPSPDSDSESESSSSSCSCSEXE程序的内存映象图装入模块文件头u 指定段址伪指令指
9、定段址伪指令 格式:格式: ASSUME ASSUME :,: 功能:建立段寄存器与段的缺省关系功能:建立段寄存器与段的缺省关系注意注意: ASSUMEASSUME伪指令并不为段寄存器设定初值伪指令并不为段寄存器设定初值例:例: assume cs:code, ds:data, es:extraassume cs:code, ds:data, es:extra其中:其中:codecode是代码段的段名,是代码段的段名,datadata是数据段的段名,是数据段的段名,extraextra是扩展段的段名是扩展段的段名u 设置段地址值设置段地址值 含义:在程序的代码段开始处进行含义:在程序的代码段开
10、始处进行DSDS、SSSS、ESES的段基址的段基址 装填。装填。 例:例:MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AXPSPPSP程序代码程序代码DS、SS 、 ES程序装入内存后,段寄存器的指向程序装入内存后,段寄存器的指向文件头文件头CSEND label 结束伪操作结束伪操作code segment ; code segment ; 定义代码段定义代码段 assume cs:code, ds:data, es:extraassume cs:code, ds:data, es:extrastart: start: mov mov ax, data
11、 ax, data mov ds mov ds, ax ; , ax ; 段地址段地址 段寄存器段寄存器 code endscode ends end startend start例:例: 数据定义及存储器分配伪操作数据定义及存储器分配伪操作 变量变量 助记符助记符 操作数操作数 , , 操作数操作数 , , ; ; 注释注释 助记符:助记符:DB DW DD DF DQ(64DB DW DD DF DQ(64位位) DT(80) DT(80位位) )DATA_BYTE DB 10,4,10H,?DATA_WORD DW 100,100H,-5,? - - 0AH0AH 04H04H 10H1
12、0H - - 64H64H 00H00H 00H00H 01H01H FBHFBH FFHFFH - -DATA_BYTE DATA_BYTE DATA_WORD DATA_WORD 例:例:DBDB:定义字节:定义字节DWDW:定义字:定义字DDDD:定义双字:定义双字ARRAY DB HELLO DB AB DW AB 48H48H 45H45H 4CH4CH 4CH4CH 4FH4FH 41H41H 42H42H 42H42H 41H 41H ARRAY ARRAY VAR DB 100 DUP (?) DB 2 DUP (0,2 DUP(1,2),3) 64H64H 20H20H 00
13、H00H 03H03H 00H00H 04H04H 偏低偏低 偏高偏高 偏低偏低 PAR1 PAR1 PAR1 DB 100,20H PAR2 DW 300H,400HADDR_TABL1 DW PAR1,PAR2;存放偏移地址;存放偏移地址ADDR_TABL2 DD PAR1,PAR2;存放;存放偏移和段地址偏移和段地址偏低偏低偏高偏高段低段低段高段高偏低偏低偏高偏高段低段低段高段高 PAR2 PAR2 ADDRADDR_TABL1 TABL1 偏高偏高PAR1PAR1的偏移地址的偏移地址PAR2PAR2的偏移地址的偏移地址ADDRADDR_TABL2 TABL2 PAR1PAR1的偏移地址
14、的偏移地址PAR1PAR1的段地址的段地址PAR2PAR2的偏移地址的偏移地址PAR2PAR2的段地址的段地址操作数常数代表数据字节数据例:DATAB DB 18H,-1,30字数据例:DATAW DW 18H,2A45H 双字数据例:DATAD DD 18H,2F3A124BH表达式代表内存单元地址例: ADDR1 DW NEXT ;存放偏移地址 ADDR2 DD NEXT ;存放偏移和段地址NEXT:MOV AL,34H ;NEXT为一条指令的标号段地址高字节偏移地址高字节偏移地址低字节偏移地址高字节段地址低字节偏移地址低字节ADDR1ADDR2字符串存放各字符的ASCII码例:STR1
15、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) BUF2 DW 1,2,3 DUP(6)FF1E180045001800182A004B123A2FDATABDATABDATAWDATAWDATADDATAD例:例:OPER1 DB ?, ?OPER2 DW ?, ? MOV OPER1, 0 ; ;字节指令字节指令 MOV OPER2, 0
16、; ;字指令字指令例:例:OPER1 DB 1, 2OPER2 DW 1234H, 5678H MOV AX, OPER1+1 MOV AL, OPER2 类型不匹配类型不匹配 MOV AX, MOV AX, WORD PTRWORD PTR OPER1+1 OPER1+1 MOV AL, MOV AL, BYTE PTRBYTE PTR OPER2 OPER2(AX)=3402H (AL)=34H 表达式赋值伪操作表达式赋值伪操作表达式名表达式名 EQU EQU 表达式表达式ALPHA EQU 9BETA EQU ALPHA+18注意:注意:EQUEQU指令不占用内存空间!指令不占用内存空间
17、!如:如: BUF1 DW 1,2,3BUF1 DW 1,2,3 INTT EQU 5 INTT EQU 5 BUF2 DW 4,5,6 BUF2 DW 4,5,6那么那么3 3和和4 4的地址是连续的!的地址是连续的! “ “ = ” = ” 伪操作伪操作 (允许重复定义允许重复定义) EMP = 7EMP = EMP+1解除定义伪指令PURGE格式:PURGE 功能:解除指定符号的定义例:Y1 EQU 7 PURGE Y1 Y1 EQU 128 EQUEQU与与= =的差异的差异:同一个程序中 = 可以对一个符号重复定义,EQU不能对同一个符号重复定义例:Y1=7 Y1=128 的定义是正
18、确的 Y1 EQU 7 Y1 EQU 128 的定义是错误的 地址计数器与对准伪操作地址计数器与对准伪操作地址计数器地址计数器 $ $ :存放当前正在汇编的指令的地址:存放当前正在汇编的指令的地址 ORG $+8 ; ; 跳过跳过8 8个字节的存储区个字节的存储区 JNE $+6 ; ; 转向地址是转向地址是 JNE JNE 的地址的地址 +6+6 JMP $+2 ; ; 转向下一条指令转向下一条指令$ $ 用在伪操作的参数字段:用在伪操作的参数字段:表示地址计数器的当前值表示地址计数器的当前值 ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4 00H00H 01H 00H
19、02H 00H 7CH7CH 00H00H 03H 00H 04H 00H 82H82H ARRAY ARRAY 007E007E0078007800740074地址计数器地址计数器$ $的常用使用方法的常用使用方法应用:常用来确定数组中元素的个数应用:常用来确定数组中元素的个数例:例:BUF1 DB 1BUF1 DB 1,2 2,3 3,4 4,5 5 CNT1 EQU $-BUF1 CNT1 EQU $-BUF1 (常用)(常用) BUF2 DW 1BUF2 DW 1,2 2,3 3,4 4,5 5 CNT2 EQU ($-BUF2)/2CNT2 EQU ($-BUF2)/2 CNT1 C
20、NT1、CNT2CNT2的值分别为数组的值分别为数组BUF1BUF1、BUF2BUF2中数据元素的个数中数据元素的个数 u ORG ORG 伪操作伪操作: :指明下一条汇编语句的偏移地址指明下一条汇编语句的偏移地址 ,本身不占内存空间SEG1 SEGMENT ORG 10 VAR1 DW 1234H ORG 20 ;在10和20地址之间是没有指令的 VAR2 DW 5678H ORG $+8 VAR3 DW 1357HSEG1 ENDS ORG 100HSTART: 表达式操作符:表达式操作符:(1) (1) 算术操作符:算术操作符: 、 、 、 、ModModVIDEO_BUF DB 25*
21、80*2 DUP(?)ARRAY DW 1,2,3,4,5,6,7ARYEND DW ? MOV CX, (ARYEND-ARRAY)/2ADD AX, BLOCK+2 ; 符号地址符号地址 常数常数 有意义有意义 ; 时意义不明确时意义不明确MOV AX, BX+1 ; MOV AX, BX+1 ; ; 寄存器间接寻址寄存器间接寻址OPR1 EQU 25 ;00011001BOPR2 EQU 7 ;00000111BAND AX, OPR1 AND OPR2(2) (2) 逻辑和移位操作符:逻辑和移位操作符: ANDAND、OROR、XORXOR、NOTNOT、SHLSHL、SHRSHR;
22、AND AX,1MOV AX, 0FFFFH SHL 2; MOV AX,0FFFCH(3) (3) 关系操作符:关系操作符: EQEQ、NENE、LTLT、LELE、GTGT、GEGE计算结果为计算结果为逻辑值逻辑值:真真 0FFFFH0FFFFH 假假 0000H0000HX: Y: 若若 128 (真真) 汇编结果:汇编结果: MOV FID, -1若若 128 (假假) 汇编结果:汇编结果: MOV FID, 0MOV FID, (OFFSET Y - OFFSET X) LE 128(4) (4) 数值回送操作符:数值回送操作符: OFFSETOFFSET、SEGSEG、LENGTH
23、LENGTH、SIZE SIZE SIZE SIZE 变量变量功能:功能:LENGTH LENGTH * * TYPE TYPE ;DB的TYPE值为1,DW的TYPE值为2OFFSETOFFSET / SEGSEG 变量变量 / 标号标号功能:回送变量或标号的偏址功能:回送变量或标号的偏址 / / 段址段址如如MOV DX,SEG FUNCMOV DX,SEG FUNCLENGTH LENGTH 变量变量功能:回送由功能:回送由DUP定义的定义的变量的单元数,变量的单元数,其它情况回送其它情况回送1 1例例: :ARRAY DW 100 DUP (?)TABLE DB ABCD MOV CX
24、, LENGTH ARRAY ; MOV CX, 100MOV CX, LENGTH TABLE ; MOV CX, 1MOV CX, SIZE ARRAY ; MOV CX, 200MOV CX, SIZE TABLE ; MOV CX, 1(5) (5) 属性修改的伪指令:属性修改的伪指令: PTRPTR格式:格式: 新属性新属性 PTR PTR (旧属性的)表达式(旧属性的)表达式 MOV WORD PTRPTR BX, 5功能:功能: 用于暂时改变用于暂时改变内存变量或标号内存变量或标号的原有属性,但的原有属性,但不能修改寄存器不能修改寄存器的原有属性。的原有属性。方式:方式: 与其它
25、汇编指令配合使用,不能独立使用。与其它汇编指令配合使用,不能独立使用。1 1、有一些指令中,操作数或表达式的属性是不明显的,需、有一些指令中,操作数或表达式的属性是不明显的,需要加以明确,如要加以明确,如: : 例:例:CALL CALL DWORD PTRDWORD PTR BX BX ;远调用;远调用 CALL CALL BYTE PTRBYTE PTR BX BX ;段内近调用;段内近调用2 2、需要修改、需要修改操作数或表达式的属性的,如:操作数或表达式的属性的,如: 例:例:F1 DW 1234HF1 DW 1234H MOV AL MOV AL,BYTE PTR F1 BYTE P
26、TR F1 ;AL=34HAL=34H 例:例:F2 DB 23HF2 DB 23H,56H56H,18H18H MOV BX MOV BX,WORD PTR F2 WORD PTR F2 ;BX=5623HBX=5623HPTRPTR指令的应用场合指令的应用场合 para (Paragraph, 节) 表明该段起始地址对齐到para 一般,各个逻辑段的首地址在节的整数边界上(每16个存储单元叫做一节, 1 para = 16 Bytes ),即每个逻辑段的起始地址是16的整数倍。 例如: code segment para code(6) (6) 定位类型的伪指令:定位类型的伪指令: PAR
27、APARA 伪指令的伪指令的功能与格式功能与格式 主要的主要的伪指令类型伪指令类型 汇编语言程序格式汇编语言程序格式 汇编语言程序的上机过程汇编语言程序的上机过程汇编语言源程序结构汇编语言源程序结构 完整段定义结构:用段定义伪指令,对用到的逻辑段分别定义典型的结构:数据段名 SEGMENT 数据段名 ENDS堆栈段名 SEGMENT 堆栈段名 ENDS代码段名 SEGMENT ASSUME START:段地址装填 MOV AH,4CH INT 21H代码段名 ENDS END START例:求字存储单元中两个数之差,结果存入下一个相邻的字单元中。DATA SEGMENTBUF DW 3483H
28、,4596HRES DW ? DATA ENDSSTACK SEGMENT STACK STACK STA DW 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE.DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AX,BUF SUB AX,BUF+2 MOV RES,AX MOV AH,4CH INT 21H CODE ENDSEND START例:三个数相加并把结果存放在SUM单元中 DATA SEGMENT BUF DB 35H,78H,0A5H SUM DB ? DATA ENDS CODE SEGMENT A
29、SSUME CS:CODE,DS:DATA ASUM PROC FARASUM PROC FAR START:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX程序段前缀结构程序段前缀结构FAR含义:把整个程序定义成一个FAR型过程(或子程序),该过程能够让其它汇编文件中的段来调用,而near则不能。 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 STARTEXEEXE文件文件:
30、:分别定义了数据段分别定义了数据段, ,代码段和堆栈段代码段和堆栈段COMCOM文件文件: :只定义了一个段只定义了一个段. .code segmentcode segmentmain proc farmain proc far assume assume start:start: push dspush ds mov mov ax, 0 ax, 0 push ax push ax retretmain endpmain endpcode endscode ends end start end startcode segmentcode segmentmain proc farmain pro
31、c far assume assume start:start: movmov ax,4c00h ax,4c00h int int 21h 21hmain endpmain endpcode endscode ends end start end start代码段中程序结束的两种方式:代码段中程序结束的两种方式: 伪指令的伪指令的功能与格式功能与格式 主要的主要的伪指令类型伪指令类型 汇编语言程序格式汇编语言程序格式 汇编语言程序的上机过程汇编语言程序的上机过程1. 1. 程序运行步骤及生成的文件程序运行步骤及生成的文件myfile.asm编辑程序编辑程序汇编程序汇编程序连接程序连接程序myf
32、ile.crfotherfiles.objmyfile.lstmyfile.objmyfile.mapmyfile.exe建立建立, , 运行汇编语言程序运行汇编语言程序CEDIT MYFILE . ASMCMASM 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 ErrorsCLINK MYFILE . OBJ Microsoft (R) Overlay Linker Version 3.6
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甲亢的饮食治疗方法
- 2025年非金属相关成型、加工机械项目合作计划书
- 手外伤患者的营养支持
- 外科管道护理质量控制与持续改进
- 个案护理经验分享
- 休克早期识别与干预
- 环境安全:医院感染控制基础
- 吸痰机使用课件
- 消防安全知识二十条
- 大脑中动脉闭塞的护理
- DB11T 2491-2025 文物保护工程勘察规范 长城
- 急性心肌梗死治疗课件
- 树木砍伐安全培训课件
- 风电场冬季防火知识培训课件
- 中国邮政2025南通市秋招综合管理职能类岗位面试模拟题及答案
- 源网荷储一体化项目并网调试实施方案
- 2025-2030奶山羊养殖效益分析及乳制品深加工与产业投资机会报告
- 《〈京津冀建设工程计价依据-预算消耗量定额〉城市地下综合管廊工程》第一册土建工程
- 儿科护理课件模板
- UPS不间断电源课件教学
- 2024年江苏省盐城市护理三基业务知识考试复习试卷及答案
评论
0/150
提交评论