80X86学习笔记--常用伪指令语句

本文详细介绍了80X86汇编语言中常用的伪指令,包括符号定义语句如EQU、=和LABEL,以及段定义语句如SEGMENT、ENDS、ASSUME和ORG。通过实例解析了这些伪指令的使用方法及其在程序中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)符号定义语句

1.等价语句EQU

符号名 EQU 表达式

COUNT EQU 100  ;  符号COUNT就代表常数100

BUFF_LEN EQU 4*COUNT  ;  COUNT是已定义的符号常数

HELLO EQU “HELLO WORLD!”

MOVE EQU MOV

COUNT EQU CX

用EQU可以用MOVE代替MOV,用COUNT代替寄存器CX.

注意:第一,等价语句不另外给符号分配存储单元;第二,等价语句定义的符号不能与其他符号相同,也不能被重新定义,否则汇编程序会认为出现符号重复定义错误。

2.等号语句(=)

等号语句用来定义符号常数、

符号名= 数值表达式

用符号语句定义的符号可被重新定义。

3.定义符号名语句

符号名 LABEL 类型

类型可以是BYTE WORD DWORD NEAR FAR等

该语句的功能是定义有符号名指定的符号,使该符号的段属性和偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同,使该符号的类型为参数所规定的类型。

BUFFER LABEL WORD

BUFF DB 100 DUP (0)

BUFFER的类型是WORD,段属性和偏移属性与BUFF相同。

QUIT LABEL FAR

EXIT: MOV AH, 4CH

MOV AH, 4CH有两个标号QUIT和EXIT,但它们类型不同。

(2)段定义语句

为了与存储器的分段结构相对应,汇编语言的源程序也是由若干个段组成。

1.段开始和结束语句

段名 SEGMENT [定位类型][组合类型][‘类型’]

段名  ENDS

段名的命名方法与一般符号命名方法相同。

一个简单的数据段如下所示:

DSEG SEGMENT

         MESS DB ‘HELLO’, 0DH, 0AH, ‘$’

DSEG ENDS

CSEG SEGMENT

         MOV AX, DSEG

         MOV DS, AX

         MOV DX, OFFSET MESS

         MOV AX, 9

         INT 21H

         MOV AH, 4CH

         INT 21H

CSEG ENDS

2.段使用设定语句

汇编程序根据段开始语句和段结束语句判断出源程序的段划分,为了有效地产生目标代码,汇编程序还要了解各程序段与段寄存器的对应关系。段寄存器与程序段的对应关系由段设定语句说明。

ASSUME 段寄存器名:段名[,段寄存器:段名…]

段寄存器名可以是CS, DS ES,SS。

CS对应CSEG段,DS对应DSEG段。

ASSUME CS: CSEG, DS: DSEG

ASSUME伪指令中的段名域也可以是一个特别的关键字NOTHING,它表示某个段寄存器不再与任何段有对应关系。

DESEG1 SEGMENT

             VARW DW 12H

DESEG1 ENDS

DSEG2 SEGMENT

            XXX DW 0

            YYY DW 0

DSEG2 ENDS

CSEG SEGMENT

ASSUME CS: CSEG, DS:DSEG1, ES:DSEG2

MOV AX, DSEG1

MOV DS, AX

MOV AX, DSEG2

MOV ES, AX

MOV AX, VARW

MOV XXX, AX

ASSUME DS: DSEG2, ES:NOTHING

MOV AX, DSEG2

MOV DS, AX

MOV AX, XXX

MOV YYY, AX

CSEG ENDS

3.ORG语句

汇编程序在对源程序汇编的过程中,使用地址计数器来保存当前正在汇编指令或变量的地址偏移。

ORG 数值表达式

TESTSEG SEGMENT

ORG 100H

BEGIN: MOV AX, 1234H

             ORG 500H

VAR DW 1234H

TESTSEG ENDS

汇编语言中用“$”表示地址计数器的值。

例:表示跳过8个字节的存储区

ORG $+8

当$用在伪指令的参数中时,它表示地址计数器的当前值。

ARRAY DW 1, 2, $+4, 3, 4, $+4


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值