汇编语言段寄存器的说明语句(转)

在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下:

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

其中:段寄存器是CS、DS、ES、SS、FS和GS,段名是在段定义语句说明时的段名。

在一条ASSUME语句中可建立多组段寄存器与段之间的关系,每种对应关系要用逗号分隔。例如,

ASSUME  CS:CODE1, DS:DATA1

上面的语句说明了:CS对应于代码段CODE1,DS对应于数据段DATA1。

在ASSUME语句中,还可以用关键字NOTHING来说明某个段寄存器不与任何段相对应。下面语句说明了段寄存器ES不与某段相对应。

ASSUME  ES:NOTHING

在通常情况下,代码段的第一条语句就是用ASSUME语句来说明段寄存器与段之间的对应关系。在代码段的其它位置,还可以用另一个ASSUME语句来改变前面ASSUME语句所说明的对应关系,这样,代码段中的指令就用最近的ASSUME语句所建立的对应关系来确定指令中的有关信息。

例6.1 汇编语言段及其段说明语句的作用。

DATA1SEGMENT;定义数据段DATA1
word1DW 5678h
byte1DB "ABCDEFG"
DATA1ENDS
DATA2SEGMENT;定义数据段DATA2
word2DW 1234h
word3DW 9876h
DATA2ENDS
DATA3SEGMENT;定义数据段DATA3
byte2DB ?
DATA3ENDS
CODE1SEGMENT;编写代码段CODE1
ASSUMECS:CODE1, DS:DATA1, ES:DATA2

;(1)

MOVAX, DATA1;(2)
MOVDS, AX;(3)
MOVAX, DATA2;(4)
MOVES, AX;(5)
MOVAX, word1;访问段DATA1中的字变量word1
MOVword2, AX;访问段DATA2中的字变量word2
ASSUMEDS:DATA3, ES:NOTHING;(6)
MOVAX, DATA3
MOVDS, AX
MOVBL, byte2;访问段DATA3中的字节变量byte2
MOVAX, 4C00H

;(7)

INT21H;(8)
CODE1 ENDS

语句(1)和(6)分别说明了段和段寄存器之间的对应关系,其中语句(6)重新说明语句(1)所指定的对应关系。

二组语句(2)和(3)、(4)和(5)实现对段寄存器DS和ES赋初值。ASSUME说明语句只起说明作用,它不会对段寄存器赋值,所以,必须对有关段寄存器赋值。在以后的其它源程序中也都是用此方法来实现对数据段寄存器赋值的。

语句(7)和(8)是调用中断21H的4CH号功能来结束本程序的执行,程序的返回代码由寄存器AL来确定。结束本程序执行的指令是所有主模块必须书写的语句。

注意:代码段寄存器不能由程序员在源程序中对其赋值,其值是由操作系统在装入它进入系统运行时自动赋值的。

转载于:https://www.cnblogs.com/huzhongzhong/archive/2011/07/28/2119178.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值