微机原理中的一道题目请教大家
若程序的数据段定义如下,写出各指令语句独立执行后的结果:DSEGSEGMENTDATA1DB10H,20H,30HDATA2DW10DUP(?)STRIGNDB'123'...
若程序的数据段定义如下,写出各指令语句独立执行后的结果:
DSEG SEGMENT
DATA1 DB 10H,20H,30H
DATA2 DW 10 DUP(?)
STRIGN DB '123'
DSEG ENDS
(1) MOV AL, DATA1
(2) MOV BX, OFFSET DATA2
(3) LEA SI, STRING
ADD DI, SI
答案给出的解释是这样的:
(1) 取变量DATA1的值。 指令执行后是, AL = 10H.
(2) 变量DATA2的偏移地址。指令执行后, BX = 0003H.
(3) 先取变量STRING的偏移地址送寄存器SI,之后将SI的内容与DI 的内容相加并将结果送DI。指令执行后,SI = 0017H;DI = DI+0017H.
我现在不明白关于第二个问题中,为什么BX = 0003H, 第三个问题中,为什么执行后SI =0017H, 展开
DSEG SEGMENT
DATA1 DB 10H,20H,30H
DATA2 DW 10 DUP(?)
STRIGN DB '123'
DSEG ENDS
(1) MOV AL, DATA1
(2) MOV BX, OFFSET DATA2
(3) LEA SI, STRING
ADD DI, SI
答案给出的解释是这样的:
(1) 取变量DATA1的值。 指令执行后是, AL = 10H.
(2) 变量DATA2的偏移地址。指令执行后, BX = 0003H.
(3) 先取变量STRING的偏移地址送寄存器SI,之后将SI的内容与DI 的内容相加并将结果送DI。指令执行后,SI = 0017H;DI = DI+0017H.
我现在不明白关于第二个问题中,为什么BX = 0003H, 第三个问题中,为什么执行后SI =0017H, 展开
展开全部
data1,data2和string都在同一数据段,所以在内存中存放是从上往下存的
|10h|
|20h|
|30h|
20个空的内存单元(dw 10 dup()十个字)
31h (‘1’的assic码)
32h
33h
所以data2的偏移地址为0003h(从上往下第四个,10h的偏移地址为0000h)
string为0017h(即十进制的23)
|10h|
|20h|
|30h|
20个空的内存单元(dw 10 dup()十个字)
31h (‘1’的assic码)
32h
33h
所以data2的偏移地址为0003h(从上往下第四个,10h的偏移地址为0000h)
string为0017h(即十进制的23)
追问
这么说来,DATA1,DATA2,STRING之间的相对偏移地址都是有关联的啊,我还以为他们是完全独立的的呢。
北京奥德利诺
2024-08-20 广告
2024-08-20 广告
北京奥德利诺仪器有限公司代理德国Dataphysics品牌:OCA系列,DCAT系列,MS系列,SVT系列产品。代理奥地利Alicona品牌:IFM系列三维表面测量仪,EdgeMaster刀具测量仪等产品。欢迎致电。...
点击进入详情页
本回答由北京奥德利诺提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询