计算机组成原理与编语言程序设计(第四版)178页4-19题:在实例模式下,假设(DS)=1234H,(SI)==124H,(12464H)=30ABH,(12484H)=464H,有以下程序

笔记内容,毕业概不负责,本人学习能力有限,有误地方请私聊更正,答案仅供参考

题目:

4-19 在实例模式下,假设(DS)=1234H,(SI)==124H,(12464H)=30ABH,(12484H)=464H,有以下程序段:

LEA    SI,[SI]
MOV    AX,[SI]
MOV    [SI+22H],1200H
LDS    SI,[SI+20H]
ADD    AX,[SI]

上述程序执行后,(DS)=________,(SI)=_______,(AX)=_________。

解析:

关键点:

LEA:可以用来将一个内存地址直接赋给目的操作数,装入有效地址的意思,它的操作数就是地址;

MOV:则是把内存地址为ebx+8处的数据赋给eax

LDS:把后面的地址指向的地址,放入前面的地址里,然后把后面地址+2的值放入DS中,LDS就放到DS里,LES就放到ES里,其他同理,例子:

LDS SI,ADR

由源地址ADR[BX]可以计算出源操作数在数据段的有效地址EA。EA指向的字单元存放的是偏移地址偏移地址,应送到指令指定的SI中;EA+2字单元存放的是段基址,应送到DS中。

ADD:后面的值+前面的值再赋值给前面的地址

()表示值,[]表示地址

LEA        SI,[SI]

首先(SI)=124H

把(SI)的值放入SI,所以SI=124H

MOV        AX,[SI]

[SI]的段寄存器DS,段寄存器(DS)=1234H

所以MOV时,先取出[SI]的段寄存器(DS)的值1234H,再加上(SI)的值124H,存入AX中

AX=(DS)+(SI)

题目可知:(DS)=1234H

12464H=12340H+124H 由于是段寄存器,DS需要加上一个0,也就是乘上10

所以最后得(AX)=12464H

(12464H)=30ABH

MOV        [SI+22H],1200H

SI+22H=>

SI+DS=AX=(12464H)=30ABH

此处的SI也是段寄存器DS,所以要先算出SI+DS的地址,上面已经算过一次了,也就是AX=12464H

SI+DS=12464H+22H=12486H

[12486H]=1200H

由此得出:[12486H]=1200H

LDS    SI,[SI+20H]

DS+SI+20H=12464H+20H=12484H,再赋值给SI

LDS:执行后把后面的地址+2的值赋值给DS,所以

(DS)=12486H=12484+2=1200H

[12486H]=1200H

所以最后DS=1200H

SI=(12484H)=464H

ADD    AX,[SI]

这条语句的意思是:AX=DS+SI

(12464H)=30ABH

350F=30ABH+464H

(DS)=___1200H___,(SI)=___464H____,(AX)=____350F_____

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小星博博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值