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