鱼C论坛

 找回密码
 立即注册
查看: 3952|回复: 6

S。汇编问题!呼叫版主、小甲鱼!

[复制链接]
发表于 2013-7-25 10:49:29 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 S_18 于 2013-7-25 23:42 编辑

汇编语言 实验7问题                 解释一下下列语句的意思 。

                mov ax,54h[bx]     ;

                mov dx,56h[bx]

                mov es:5h[di],ax

                mov es:7h[di],dx

                mov ax,0A8h[si]   

                mov es:0Ah[di],ax

                mov ax,54h[bx]

                div word ptr ds:0A8h[si]

                mov es:0dh[di],ax


                add bx,4

                add si,2

                add di,16

example.rar

899 Bytes, 下载次数: 2

最佳答案

查看完整内容

1. 立即寻址 立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字段,不能用于目的操作数字段。 例1 MOV AL,5 2.直接寻址 在IBM PC机中将操作数的偏移地址称为有效地址EA。在直接寻址方式中有效地址EA就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数. 如操作数在数据段中,则物 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 10:49:30 | 显示全部楼层
1. 立即寻址
立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字段,不能用于目的操作数字段。
例1            MOV    AL,5

2.直接寻址
在IBM PC机中将操作数的偏移地址称为有效地址EA。在直接寻址方式中有效地址EA就在指令中,它存放在代码段中指令操作码之后,但操作数一般存放在数据段中,所以必须先求出操作数的物理地址,然后再访问存储器才能取得操作数.

如操作数在数据段中,则物理地址=16d×(DS)十EA。1BMPC机中允许数据存放在数据段以外的其他段中,此时应在指令中指定段跨越前缀,在计算物理地址时应使用指定的段寄存器。
例4              mov  AX ,       [2000H]
(DS)=3000H,地址32000H中的值为 3050H则,执行结果为;(Ax)=3050H
因为实际mov AX中的内容为 16d * (Ds) +2000H = 32000H

    在汇编语言指令中,可以用符号地址代替数值地址,如:
MOV                  AX,VALUE   
此时VAIUE为存放操作数单元的符号地址。如写成
MOV                  AX,[VALUE]   
也是可以的.两者是等效的。如果VALUE在附加段中,则应该指定段跨越前缀如下;
                 MOV    AX,  ES:VALUE
或               MOV    AX,  ES:[VALUE]
    直接寻址方式适用于处理单个变量,例如需要处理某个存放在存储器里的变量,可用直接寻址方式,将该变量先取到一个寄存器中,然后在做处理。
    IBM PC机规定:除在双操作数中,除立即数外,必须有一个操作数使用寄存器方式。这也是一个常量常常送到寄存器去的原因。

3.寄存器间接址
操作数的有效地址在基址寄存器BX、BP或变垃寄存器SI、DI中,而操作数则在存储器中,如下图所示。

  a.如果指令中指定的寄存器是BX、SI、DI,则操作数在数据段(DS)中,所以用DS寄存器的内容作为段地址,即操作数的物理地址为:
物理地址=16d×(DS)十(BX)
或    物理地址;16 d×(DS)十(SI)
或    物理地址=16d×(DS)十(DI)
  b.如指令中指定SP寄存器,则操作数在堆栈段(SS)中,段地址在SS中,所以操作数的物理地址为:
物理地址=16d×(SS)十(SP)
MOV    AX ,[BX]
如果        (DS)=2000H , (BX)=1000H 则
物理地址=16d×(DS)十(BX) = 20000H+1000H = 21000H
21000H地址里的内容为 50A0H则 执行结果为:(AX)=50A0H
  c.指令中也可指定段跨越前缀来取得其他段中的数据。如;
    MOV    AX,ES:[BX]
这种寻址方式可以用于表格处理,执行完一条指令后,只需要修改寄存器内容就可取出表格中的下一项。

4.寄存器相对寻址方式
  操作数的有效地址是一个基址或变址寄存器的内容和指令中指定的8位或16位位移量之和。即
                    |  (BX)            
  EA =   | (BP)       + 8位或者16位的位移量
                    |  (SI)
                    |  (DI)

同寄存器寻址一样 BX BP DI 若没有段跨越前缀 物理地址为=16d×(DS) +位移量 + *
SP                                                                                 物理地址为=16d×(SS)十(SP) + 位移量 + *

举个例子:
MOV    AX,COUNT[SI]  (也可表示为MOv    AX,[COUKT十SI]
其中,COUNT 为16位位移量的符号地址。
如果(DS)=3000H,(SI)=2000H    COUNT=3000H
则物理地址 = 30000十2000十3000 =35000H

5.基址变址寻址方式
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和。两个寄存器均由指令指定。如果基址寄存器为BX,段寄存器使用DS;如基址寄存器为BP时,段寄存器则用SS。因此,物理地址为:
= 16D * DS + (BX) + SI(或者DI)
= 16D * SS + (BP) + SI(或者DI)

6.相对基址变址寻址方式
操作数的有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之
和。同样,当基址寄存器为BX时,使用DS段寄存器;而当基址寄存器为BP时,则使用SS为段寄存器。因此物理地址为:
= 16d * DS + BX + SI + 位移量(8位或16位)
= 16d * ss + BP + SI + 位移量(8位或16位)
刨        MOV    AX,MASK[BX][SI]
(也可以写成 M0V    AX,MASK[DX十SI]
或          MoV    AX.[MASK十BX十SI]   )
    如    (DS)=3000H,(BX)=2000H、(SI)=l000H,MASK=0250H,
    则    物理地址=16d×(DS)十(BX)十(SI)十MASK
                  =30000十2000十1000十0250
                  =33250H
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 19:41:49 | 显示全部楼层
去看第8章第4小节中的表格列出的寻址方式。每一种都得理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-7-25 20:43:48 | 显示全部楼层

刚刚 看到第八章 的第一节表示暂时看不懂 代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-25 23:40:41 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-7-25 20:43
刚刚 看到第八章 的第一节表示暂时看不懂 代码

哈哈 以后会懂得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-7-25 23:41:58 | 显示全部楼层
小甲鱼 发表于 2013-7-25 20:15
1. 立即寻址
立即寻址方式用来表示常数,它主要用于给寄存器赋初值,注意:只能用于源操作数字段,不能用于 ...

!!!  好详细 慢慢看 谢谢小甲鱼老师!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-3-27 09:24:45 | 显示全部楼层
新人报道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-26 15:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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