微型计算机几及其接口技术 · 8086汇编伪指令与操作数运算符

第三节 8086汇编伪指令与操作数运算符

一、8086汇编伪指令

1.简化段定义伪指令

(1)存储模式伪指令

格式:
.MODEL 存储模式 [,语言类型(通常缺省)][,堆栈类型] ;堆栈类型可以是NEARSTACK(如果SS == DS)或FARSTACK(如果SS != DS),默认值为NEARSTACK

各种存储模式及属性:
存储模式及属性

例(存储模式定义语句),采用SMALL模式,近堆栈类型:
.MODEL SMALL
.MODEL large,c,farstack

(2)数据段定义伪指令

数据段定义格式
.DATA ;生成的数据段的段名为_DATA,程序员可以通过@DATA的方法获得数据段的段基址。

例 :
MOV AX,@DATA
MOV DS,AX

(3)代码段定义伪指令

代码段定义格式:
.CODE[名字]

(4)堆栈段定义伪指令

堆栈段定义格式:
.STACK [大小]
如果没有指定堆栈大小,则默认大小为1KB,默认段为STACK

例:定义一个4KB的堆栈段
.STACK 4096
只有主模块(有起始标号)才能定义堆栈段

2.数据定义伪指令

目的:为一个数据项分配存储单元。

格式:
[变量名] 命名 操作数项[,操作数项...] [;注释]

主要命令:
·DB ———— 定义字节数据,MASM6.11后可以用BYTE,占1字节
·DW ———— 定义字,MASM6.11后可以用WORD,占一个字,2字节
·DD ———— 定义双字,MASM6.11后可以用DWORD,占一个双字,4字节
·DF ———— 定义6字节
·DQ ———— 定义8字节
·DT ———— 定义10字节

操作数项包括常量或表达式、字符串(定义字符串只能用BYTEDB)、?表达式、带DUP的表达式】;DUP:复制操作符,可以复制某个或某些操作数。

····例:定义变量(※※※※※)····
NLIST DW 100 11B,'B',-1;为变量NLIST分配3字节初值为03H42H0FFH
DB 'PAS',?;为变量NLIST再分配4字节,NLIST共占7字节
NLS DW 1,2,'AB';为变量NLS分配3字节,初值为0001H0002H4241H

····例:复制操作符UDP复制某个(或某些操作数)(※※※※※)····
BUFFER DW 100 DUP(?);为BUFFER分配100字节
SW DB 3 DUP('A5',2),1;为变量SW分配10字节 ———— [(2+1)*3]+1 = 10
ARRAY DB 2 DUP('abc',3 UDP(?));为变量ARRAY分配12字节 ———— (3+3)*2=12

····例1:假设DS = 1000H,给出下列数据在内存中的分配····
.DATA
DATA1 DB 31H
DATA2 DB'abc'
DATA3 DW 3864H
.CODE

例1 图解:
例1

····例2:假设DS = 2000H,给出下列数据在内存中的分配····
.DATA
DATA1 DB2 DUP(54H,2 DUP(7))
DATA2 DW'ab'
.CODE

例2 图解:
例2

3.地址定位伪指令与地址计数器

(1)地址定位伪指令 ORG

格式:ORG 表达式
目的:将表达式的值送入程序计数器

例:假设 DS = 1000H,给出下列数据在内存中的分配?
DATA
DATA1 DB 31H
DATA2 DB 'abc'
ORG 6
DATA3 DB86H,5FH
.CODE

图解:
例3

(2)地址计数器 $

$ 表示它当前所在位置的偏移地址。

例:DS = 1000H,给出下列数据在内存中的分配?
.DATA
ORG 126H
ARRAY DW 1, 2, $ + 5, 3, $ + 2
.CODE

图解:
例4

(3)定位偶地址起始伪指令

格式:EVEN

例:
ORG 100H
BUF1 DB 12
EVEN ;保证BUF2从偶数地址开始
BUF2 DW 8F76H

(4)地址边界对齐伪指令

格式:ALIGN NUM

例:
ORG 100H
BUF1 DB 12
ALIGN 4 ;保证BUF2是从奇数地址开始
BUF2 DD 8F76H

4.符号定义伪指令

(1)用 EQU 伪指令定义符号

格式:符号名 EQU 表达式

例:
CONST EQU 100*2;定义符号常量
ADDRS EQU [BX + 10];为地址表达式定义名字
COUNT = AX;给寄存器定义名字

(2)用 = 定义符号

格式:符号名 = 表达式

例:
NUM = 23

5.过程定义伪指令

格式:
过程名 PROC [NEAR/FAR]
过程体
过程名 ENDP

6.程序起始伪指令

格式:.STARTUP

7.程序退出伪指令

格式:.EXIT [返回码]
通常情况下返回码为0】,此时该伪指令会产生的代码:
MOV AX,4C00H
INT 21H

8.程序结束伪指令

格式:
END [起始标号]

二、宏指令

目的:简化程序的书写而设计的。
格式:
宏名 MACRO [形参1,形参2,...]
宏体
ENDM;宏定义结束

说明:MACROENDM是成对出现的。

调用宏的格式:
宏名 [实参1,实参2,...]

例:
ADDUP MACRO AD1,AD2,AD3;定义一个带3个形参的宏
MOV AX , AD1
ADD AX, AD2
ADD AX, AD3
ENDM
...
ADDUP BX, 2, COUNT;宏调用

三、操作数运算符

1.算数运算符

例5

例1:
将首地址为BLOCK字数组的第6个字传送到DX

解:MOV DX, BLOCK + (6 - 1) * 2;地址 + 常量,结果仍为一地址

例2:
设数据定义如下:
ARRAY DW 1, 2, 3, 4, 5, 6, 7
WENDA DW ?
将数组长度(字数)存入CX

解:MOV CX,(WENDA - ARRAY)/2;地址 - 地址 = 常量。(/2是因为ARRAY是一个DW型数组,每个数据项占2字节)

2.逻辑与移位运算符

例6

3.关系运算符

例7

4.数值回送运算符

例8

注:原文中的OFFSET运算符后的示例注释可能有问题,待定?原文图如下
例8BUG

5.属性运算符

例9
BE%8B9.png&pos_id=img-82gg75Tw-1698039855336)

PTR运算符格式:
类型 PTR 表达式

例:JMP FAR PTR NEXT;指明NEXT是一个远地址指针,实现段间转移

6.其他运算符

例10

7.操作数运算符的优先级

例11

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值