当前位置:文档之家› 第三章第10节汇编程序常用伪指令简介

第三章第10节汇编程序常用伪指令简介

第3 章
3.10 汇编程序常用伪指令
汇编语言是用指令的助记符、符号地址、
标号等书写程序的语言,用汇编语言编 写的程序称为汇编语言源程序。把汇编 语言源程序翻译成机器语言程序(目标 程序)的过程称为汇编。完成汇编任务 的程序称为汇编程序。 在基本汇编的基础上进一步允许在源 程序中把一个指令序列定义为一条宏指 令的汇编程序叫做宏汇编
第4 章
标号、名字与标识符
标号是反映硬指令位置(逻辑地址)的标识
符,后跟一个冒号“ :”分隔 名字是反映伪指令位置(逻辑地址)和属性 的标识符,后跟空格或制表符分隔,没有冒 号“:” 标识符(Identifier )一般最多由 31个字母、 数字及规定的特殊符号(如 _ 、 $ 、 ? 、 @ ) 组成,不能以数字开头。默认情况下,汇编 程序不区别标识符中的字母大小写 一个程序中,每个标识符的定义是唯一的, 还不能书写成汇编语言采用的保留字
;传送指令,具有2个操作数
;空操作指令,没有操作数,带有标号 LOOP DELAY
;循环指令,标号DELAY说明转移位置
BUFFER DB 1,2,3,4,5,6,7;数据定义伪指令,在主存中
开辟7 个连续的字节单元,初值依次为1 ~7 ,BUFFER 表示首地址,即段地址和偏移地址,具有赋过初值的变量的 意义,由汇编程序自动给出。
一个段地址 一个偏移地址 两个字符 0~65535之间的无符号数 -32768~+32767之间的带符号数
第3章 segment data ;数据段 count dw 8000h,?,'AB' maxint equ 64h number dw maxint array dw maxint dup(0) data ends
定义字节单元伪指令DB 第3 章
DB伪指令用于分配一个或多个字节单元, 并可以将它们初始化为指定值 初值表中每个数据一定是字节量 (Byte),存放一个8位数据: 可以是0~255的无符号数 或是-128~+127带符号数 也可以是字符串常数
第3 章 data X Y data segment ;数据段 db 'a',-5 db 2 dup(100),? db 'ABC' ends
第3 章
K: MYPROC MYCODE
SUB AX,AX ; AX清零 MOV CX,AX ; CX清零 MOV CL,NUM2 ;数据送CL DEC CL ; CL—1 MOV AL,NUM1 ;数据送AL ADD AL, NUM1 ; AL+ NUM1送AL ADC AH,00H ;进位送AH LOOP K ; K循环,次数由CX决定 MOV PRODUCT ,AX;结果送AX RET ;调用返回 ENDP ;过程结束 ENDS ;代码段结束 END MYPROC ;程序结束
个拥有256个存储单元的字节型数据缓冲区BUFFB,初 值均为0 BUFFB DB 256 DUP(0) 简化定义过程,可以在一条伪指令中用逗号分隔而构成 任意组合序列 BUFFB DB 0,0,’ABC’,?,? , 0FFH
第3 章
初值表
初值表是用逗号分隔的参数 主要由数值常数、表达式或?、 变量中重复数据的定义格式: 符号名 Dn 表达式1 DUP(表达式) 表达式1:数据重复的次数 圆括弧内表达式:要重复的内容 ?——表示初值不确定,即未赋初值;
第3 章
mov al,X ;此处X表示它的第1个数据,故AL←'a' dec X+1
;对X为始的第2个数据减1,故成为-6
mov Y,al
;现在Y这个字符串成为 'aBC'
定义字单元伪指令DW 第3 章
DW伪指令用于分配一个或多个字单 元,并可以将它们初始化为指定值 初值表中每个数据一定是字量 ( Word ),一个字单元可用于存放任 何16位数据:
LISTA ; 指向源块的首地址 LISTB ; 指向目的块的首地址 ;循环次数 ; LISTA元素送AX ;将LISTB元素加到AX ;两数之和存入LISTB ;循环至CX=0 ;功能调用号4CH送入AH ;程序结束后返回DOS ;过程结束 ;代码段结束 ;程序结束
第3 章
举例程序得出结论
(1) 源程序一般由n个段构成,理论上讲可以有很多,但实际 上8086/8088规定不超出16段。每个段都以 SEGMEN语句开 始,以ENDS语句结束。程序中第一段称为 STACK(堆栈段), 它用来在存储器的某个地方建立一个栈区;第二段称为 DATA (数据段),它在存储器中放了被乘数,乘数的数据,第三段 称为CODE (代码段),其中包括了许多以符号表示的指令用 于实现乘法运算。程序中出现了 SEGMEN 、ASSUME伪指令。 (2) ASSUME语句可使汇编程序知道CS、DS、SS、ES指向 那个段地址,它在汇编时起作用,在运行时CPU不知道除CS外 的其他段地址,所以必须在程序中用指令进行赋值。 (3)所有过程(用RROC语句定义)必须用过程结束语句 ( ENDP)结束。整个源程序也必须用结束语句( END)来结 束。 汇编程序有三种基本语句构成:(硬)指令语句,(说明) 伪指令语句,(说明)宏指令语句。 ( 4 )程序开始必须申明(装入)各段寄存器的值,即各段地址 的值
第3的逻辑地址;用这个符号 表示地址,常称为符号地址 变量名可以没有。这种情况,汇编程 序将直接为初值表分配空间,无符号 地址 设置变量名是为了方便存取它指示的 存储单元
第3 章
初始值可以是确定的值或字符串 DATA1 DW 9999H DATA2 DB ‘OK’ 初始值不确定而为任意值时则使用? DATA3 DD ? 简化定义过程可使用重复定义伪指令DUP,例如定义一
第3章 一:(硬)指令语句和伪指令语句
硬指令——使CPU产生动作、并在程序执
行时才处理的语句,就是前面第 3 章学习 的处理器指令,汇编时会生成目标代码 伪指令( Directive ) —— 不产生 CPU 动 作、在程序执行前由汇编程序处理的说明 性语句,例如,数据说明、变量定义等等 伪指令与具体的处理器类型无关,但与汇 编程序的版本有关,即;伪指令语句只为 汇编程序提供汇编时所需的信息,而本身 不会生成目标代码
STACK DSEG
DSEG ESEG ESEG CSEG
0000H 0003H 0005H 0008H 000AH
第3 章

000BH BE 0000 MOV SI, OFFSET 000EH BF 0000 MOV DI, OFFSET 0011H B9 6400 MOV CX,100 0014H AD LOP1: LODSW 0015H 260305 ADD AX,ES:[DI] 0018H AB STOSW 0019H E2F9 LOOP LOP1 001BH B4 4C MOV AH,4CH 001DH CD 21 INT 21H MAIN ENDP CSEG ENDS END MAIN
第3 章 ⑴ 执行性语句——由硬指令构成的语句,它通常对应 一条机器指令,出现在程序的代码段中: 标号: 硬指令助记符 目的操作数, 源操作数;注释 前面章节已讲过
⑵ 说明性语句——由伪指令构成的语句,它通 常指示汇编程序如何汇编源程序: 名字 伪指令助记符 参数,参数,… ;注释
MOV CX,0 DELAY: NOP
第3 章 3 . 1 0 . 2
伪 指 令 中
参 数 、 变 量 和 标 号
1.汇编伪指令的标号; 不能以数字0~9开头
不能以保留字开头
字母不区分大小写
标号和语句之间不能有‘:’
第4 3章
(1)
2.符号定义语句
用符号来表示一个指定的常数或数值表达式即为常 量标号,这种伪指令的格式是在符号与常数之间用“ =” 或者“EQU”连接(等值语句)如: NUM1 EQU 78H ;将78H赋值给NUM1 CONT1 = 96 ;将60H赋值给CONT1 CONT2 = 28H+NUM1 ;将A0H赋值给CONT2 CONT3 EQU 2*CONT1 ;将C0H赋值给CONT3 常量标号是给某个数据取的名字,一经定义,汇编指令 中就可以使用这个名字,无需使用具体的数字 (2)解除语句PURGE 格式 PURGE 符号名1,符号名2,… 此语句本身没有符号名,被 PURGE 解除后的符号名可 以重新定义,例: PURGE NUM1, CONT1
第3 章
STACK

例4.2假设LISTA与LISTB为两个字类型数组,将他们 各对应相加,其和放在LISTB数组中,程序设计如下:
SEGMENT ;堆栈段开始 DW 32H DUP(?) ;堆栈段空间为40个字 ENDS ;堆栈段结束 SEGMENT ;数据段开始 LISTA DW 64H DUP(1234H) ;100字的源缓冲区 ENDS ;数据段结束 SEGMENT ;附加段开始 LISTB DW 100 DUP (432H1) ; 100字的目的缓冲区 ENDS ;附加段结束 SEGMENT ;代码段开始 ASSUME CS:CSEG DS:DSEG;指明代码段、数据段段名 ASSUME SS:STACK ES:ESEG ;堆栈段、附加段段名 MAIN PROC ;定义过程 B8 9014 MOV AX,DSEG ;数据段段地址送AX 8ED8 MOV DS, AX ;数据段段地址装入DS B8 9D14 MOV AX, ESEG ;附加段段地址送AX 8EC0 MOV ES, AX ;附加段段地址装入ES FC CLD ; 选择地址增方向
第3 章
字变量和字常量的定义: WNUM EQU 5678H ;定义WNUM为常量 COUNT DW 20H ;定义COUNT是赋了初值的变量,假设在数据段的 有效偏移地址为10H.字变量和字常量的应用: MOV AX,[BX+SI+WNUM] ; MOV AX,[BX+SI+5678H] MOV AX,COUNT ; MOV AX,[0010H] ; AX=0020H MOV AX,[SI+COUNT] ; MOV AX,COUNT[SI] ; MOV AX,[SI+20H] LEA BX,COUNT ; LEA BX,[0010H] MOV BX,OFFSET COUNT ; MOV BX,0010H
相关主题