伪指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ASSUME ES:MYEXTRA,SS:MYSTACK
注意:ASSUME语句只能安排在代码段内,一 般应在代码段作为首始指令。允许多次使用该 语句重新约定段寄存器与段的关系。除CS外, 各个段寄存器的实际值,还要用MOV赋值
第6章 6.1.5 伪指令
MYCODE SEGMENT ASSUME CS:MYCODE,DS:MYDATA ASSUME ES:MYEXTRA,SS:MYSTACK START: MOV AX,MYDATA MOV DS,AX MOV AX,MYEXTRA MOV ES,AX MOV AX,MYSTACK MOV SS,AX : MYCODE ENDS
第6章 6.1.5 伪指令
过程定义伪指令 PROC、 ENDP 、 NEAR 、 FAR
过程的含义与子程序相同,最后一跳语句总是 返回指令 PROC/ENDP总是成对出现 NEAR可以省略,默认为NEAR P173例题
例题
;过程 AAA1 PROC NEAR LOADSB ADC AL,[BX] ;主程序 DAA ADITI: AAA1 STOSB LOOP ADITI INC BX MOV AL,0 RET ADC AL,AL AAA1 ENDP STOSB
CODE_SEG
第6章:逻辑段的简化定义
.STACK [大小]
;堆栈段定义伪指令 .STACK 创建一个堆栈段,段名是: STACK 。可选的“大小”参数指定堆栈段所占存储区的 字节数,默认是1KB(=1024=400H字节)
.DATA
;数据段定义伪指令 .DATA 创建一个数据段,段名是: _DATA。数据段名可用@DATA预定义标识符表示
第6章: 汇编语言程序的开发过程-补充 文本编辑器,如 EDIT.COM
编 辑
错误
源程序:文件名.asm 汇编程序,如 MASM.EXE
汇 编
错误
目标模块:文件名.obj 连接程序,如 LINK.EXE
连 接
可执行文件:文件名.exe
错误
调试程序,如 DEBUG.EXE
调 试
应用程序
错误
开发过程1:源程序的编辑
第6章 6.1.5 伪指令
类名:是程序员任选的一个字符串,使用 时必须用单引号括起来,连接时将把不同 模块中的相同类名的各段在物理地址上相 邻的连接在一起,其顺序则与 LINK 时提供 的各模块相同 ORG伪指令
功能:用来规定目标程序存放单元的偏移量 格式:ORG 表达式 说明:表达式以 65536 为模,结果非负,可以 是标识符,语句不能有标号
PUBLIC格式
• PUBLIC 标识符,…,标识符 • PUBLIC VAR1
源程序结束伪指令END
用来表明END语句处是源程序的终结 格式:END 表达式 说明:这里表达式通常是程序第一条语句标号
第6章 6.1.5 伪指令
完整的源程序举例
;数据段定义 DATA_SEG VAR1 VAR2 RESULT DATA_SEG ;代码段定义 CODE_SEG START: SEGMENT DW 7654H DW 2345H DW ? ENDS SEGMENT ASSUME CS:CODE_SEG,DS:DATA_SEG MOV AX,DATA_SEG MOV DS,DATA_SEG MOV AX,VAR1 SUB AX,VAR2 MOV RESULT,AX ENDS END START
第6章 6.1.5 伪指令
组合类型:在多模块程序设计中表示该段和其他 同名段间的组合连接方法,默认下不与别的段连 接
PUBLIC:在满足定位类型的前提下与其他同名段连接, 连接的顺序有连接程序确定 COMMON:表示该段与别的模块中的所有其他同名同 类别段共享相同的存储空间 AT 表达式:表示相应段定位在由表达式求值得到的节 边界地址上 STACK:与PUBLIC组合类型处理方式相同 MEMORY:表示连接时,本段应装在被连接的其它段 之上,即同名段中具有最高的地址
第6章 6.1.5 伪指令
PARA 表示相应段必须从某一个节(等于 16 个 字节)的边界开始,即段的起始地址能为 16整 除 PARA=XXXX XXXX XXXX XXXX 0000B WORD表示相应段必须从任一个字的边界开始, 即段的起始地址能为2整除 WORD=XXXX XXXX XXXX XXXX XXX0B BYTE表示相应段可以从任一地址开始 BYTE=XXXX XXXX XXXX XXXX XXXXB PAGE和PARA类型其段内的偏移地址都是从0 开始的
开发过程2:源程序的汇编(生成列表文件)
汇编过程中,可以通过参数选择生成列表文 件(.LST)。列表文件是一种文本文件,含 有源程序和目标代码,对我们学习汇编语言 程序设计和发现错误很有用 汇编程序 MASM.EXE 可带其他参数,为了 生成列表文件,各自的命令是: MASM /l wj1.asm; 该命令除产生模块文件 wj1.obj (和可执行 文 件 wj1.exe ) 外 , 还 将 生 成 列 表 文 件 wj1.lst
第6章 6.1.5 伪指令
TYPE、SIZE、LENGTH
见表6.3
段定义伪指令
SEGMENT/ENDS伪指令 成对使用,说明段的名称和范围,还可指明段 的定位类型、组合类型、分类名
段名
段名
SEGMENT [定位类型][组合类型][分类名] : 本段程序内容(指令或伪指令语句) ENDS
第6章 6.1.5 伪指令
;小型模式存储模式 ; 1KB空间堆栈段 ;数据段 ;数据定义 ;代码段 ;起始点 ;设置DS ;程序代码
;结束点,返回DOS ;子程序代码 ;汇编结束
第6章: 完整段定义格式
完整段定义利用 SEGMENT 和 ENDS 一对伪 指令定义逻辑段 同时需要配合 ASSUME 伪指令指明逻辑段 是代码段、堆栈段、数据段还是附加段 完整段定义的优势是可以指明逻辑段的定位、 组合、类别等属性;而简化段定义只能采用 系统默认的属性 完整段定义和简化段定义的实质是一致的
第6 章
第6章 6.1.5 伪指令
Βιβλιοθήκη Baidu
方式伪指令
.8086 .386
赋值伪指令EQU
表达式名称 EQU 表达式 新标号 EQU 老标号 例如:ABC EQU 2000H XYZ EQU [BP+5] AAD EQU PAR_3 COUNT EQU CX 用PURGE可以撤销对原先的赋值 PURGE XYZ
第6章 6.1.5 伪指令
定义变量伪指令
DB、DW、DD、DF、DQ、DT
定义存储单元类型的伪指令
BYTE、WORD、DWORD 此指令要和其他指令结合起来使用
LABEL
用于定义标号名称和属性,它和下一条指令共享存储 器单元 格式:名字 LABEL 类型 例如:BYTE-ARRAY LABEL BYTE WORD-ARRAY DW 100 DUP(?) 两种访问方式:MOV WORD-ARRAY,0 MOV BYTE-ARRAY,0
注意:当定义除代码段以外其他段时,段 内不能包括指令语句 段名:所定义段名称,前后要一致,要有 一定的意义 定位类型:给出实际段起点类型
有PAGE、PARA、WORD、BYTE四种 PAGE 表示相应段必须从某一页的边界开始, 即段的起始地址能为256整除 PAGE=XXXX XXXX XXXX 0000 0000B
解决任一模块引用其他模块中的变量和标号问 题 内部标识符、外部标识符 每个模块要有两个清单,一个标明他所要访问 的其他模块的标识符;另一个列出他所定义的, 且为其他模块所访问的标识符 使用伪指令EXTRN、PUBLIC
第6章 6.1.5 伪指令
EXTRN格式
• EXTRN 标识符:类型,…,标识符:类型 • EXTRN VAR1:WORD
第6章 6.1.5 伪指令
定义结构的伪指令STRUC/ENDS
格式:结构名称 结构名称 STRUC ENDS
(由DB、DW、DD伪指令组成的语句序列)
STUDENT_RECORD STRUC NAME DB ‘LiPing’ SEX DB 0 AGE DB 25H NUMBER DB ‘????’ MATH DB 91 PHYSICAL DB 85 CIRCUIT DB 95 STUDENT_RECORD ENDS
.CODE [段名]
;代码段定义伪指令.CODE创建一个代码段,可选的“段 名”参数指定该代码段的段名。如果没有给出段名,则采 用默认段名 一个段的开始自动结束前面的一个段
简化段定义伪指令之前,需有存储模式语句
第6章:简化段定义的源程序格式
.model small .stack .data …… .code start: mov ax,@data mov ds,ax …… mov ax,4c00h int 21h …… end start
第6章 6.1.5 伪指令
结构的存储分配和预置
格式:变量 结构名称<赋值说明> LiPing STUDENT_RECORD <,,,’891011’>
LuiYi STUDENT_RECORD <‘LuiYi’,1,,’891011’,80H>
对结构的访问
格式:变量名.字段名 例如:MOV AL,LiPing.AGE 等价于: MOV AL,[BX].AGE
第6章:例: 在屏幕上显示一段信息
string
;数据段(定义要显示的字符串) db’Hello, Assembly !’,0dh,0ah,’$’ ;代码段(显示字符串的程序) mov dx,offset string mov ah,9 int 21h
Hello, Assembly !
程序功能
第6章:源程序文件wj1.asm ;wj1.asm .model small .stack .data string db ’Hello, Assembly !’,0dh,0ah,’$’ .code start: mov ax,@data mov ds,ax mov dx,offset string mov ah,9 int 21h mov ax,4c00h int 21h end start
第6章 6.1.5 伪指令
SEG和OFFSET
SEG返回存储器地址操作数的段地址 OFFSET 返回存储器地址操作数的段内偏移地 址部分
: NUMBER-1 DD ? CCAA EQU SEG NUMBER-1 : MOV AX,SEG NUMBER-1 MOV DS,AX MOV SI,OFFSET NUMBER-1
源程序文件要以ASM为扩展名 源程序文件的形成(编辑)可以通过任何 一个文本编辑器实现:
DOS中的全屏幕文本编辑器EDIT 其他程序开发工具中的编辑环境 Windows中的记事本Notepad
EDIT wj1.asm
开发过程2:源程序的汇编(TASM)
汇编是将源程序翻译成由机器代码组成的 目标模块文件的过程 MASM 提供的汇编程序是MASM.EXE: MASM wj1.asm 如果源程序中没有语法错误, MASM 将自 动生成一个目标模块文件(wj1.obj);否 则 MASM 将给出相应的错误信息。这时应 根据错误信息,重新编辑修改源程序后, 再进行汇编
第6章 6.1.5 伪指令
IF ELSE ENDIF条件汇编伪指令
格式:IF ;如果条件成立 : [ELSE] ;否则 : ENDIF ;结束条件汇编语句 其中IF有多种形式:
• IF 操作数、 IFE 操作数、 IFDEF 标号或变量、 IFNDEF 标号或变量、IFB<变量>、IFNB<变量>、 IFIDN<操作数1>,<操作数2>、IFDIF<操作数1>, <操作数2>、IF1、IF2
第6章 6.1.5 伪指令
逻辑运算伪指令AND、OR、XOR、NOT
只用于算数表达式中 操作数在两边,可以是立即数 例如:
• AND AX,CX • MOV AX,0FEH AND 145H • AND DX,CX AND 0FA4CH
第6章 6.1.5 伪指令
访 问 外 部 标 识 符 的 伪 指 令 EXTRN 、 PUBLIC
DATA SEGMENT ORG 20H X DB 35,64 : DATA ENDS CODE SEGMENT ORG 100H MOV AL,X : ADD AX,BX ORG $+3 ADD AL,5 : CODE ENDS
第6章 6.1.5 伪指令
ASSUME伪指令
功能:用来告诉汇编程序在指令执行期间内存 的哪一段是数据段,哪一段是堆栈段,哪一段 是代码段 格式:ASSUME 段寄存器名:段名符[,段寄存 器名:段名符,…] 例如:ASSUME CS:MYCODE,DS:MYDATA
相关文档
最新文档