DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 611|回复: 0
打印 上一主题 下一主题

[教程] 汇编语言教程-段寄存器的说明语句

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-29 08:45:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
汇编语言教程-段寄存器的说明语句
  在汇编语言源程序中可以定义多个段,每个段都要与一个段寄存器建立一种对应关系。建立这种对应关系的说明语句格式如下:
  ASSUME段寄存器名:段名[,段寄存器名:段名,……]
  其中:段寄存器是CS、DS、ES、SS、FS和GS,段名是在段定义语句说明时的段名。
  在一条ASSUME语句中可建立多组段寄存器与段之间的关系,每种对应关系要用逗号分隔。例如,
  ASSUME CS:CODE1, DSATA1
  上面的语句说明了:CS对应于代码段CODE1,DS对应于数据段DATA1。
  在ASSUME语句中,还可以用关键字NOTHING来说明某个段寄存器不与任何段相对应。下面语句说明了段寄存器ES不与某段相对应。
  ASSUME ES:NOTHING
  在通常情况下,代码段的第一条语句就是用ASSUME语句来说明段寄存器与段之间的对应关系。在代码段的其它位置,还可以用另一个ASSUME语句来改变前面ASSUME语句所说明的对应关系,这样,代码段中的指令就用最近的ASSUME语句所建立的对应关系来确定指令中的有关信息。
  例6.1汇编语言段及其段说明语句的作用。
  DATA1SEGMENT;定义数据段DATA1
  word1DW5678h
  byte1DB\"ABCDEFG\"
  DATA1ENDS
  DATA2SEGMENT;定义数据段DATA2
  word2DW1234h
  word3DW9876h
  DATA2ENDS
  DATA3SEGMENT;定义数据段DATA3
  byte2DB?
  DATA3ENDS
  CODE1SEGMENT;编写代码段CODE1
  ASSUMECS:CODE1, DSATA1, ESATA2;(1)
  MOVAX, DATA1;(2)
  MOVDS, AX;(3)
  MOVAX, DATA2;(4)
  MOVES, AX;(5)
  …
  MOVAX, word1;访问段DATA1中的字变量word1
  MOVword2, AX;访问段DATA2中的字变量word2
  …
  ASSUMEDSATA3, 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来确定。结束本程序执行的指令是所有主模块必须书写的语句。
  注意:代码段寄存器不能由程序员在源程序中对其赋值,其值是由操作系统在装入它进入系统运行时自动赋值的。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-3 23:06 , 耗时 0.095007 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表