王爽《汇编语言(第三版)》3.2DS和【address】有个小问题想请教一下大家
本帖最后由 Fimbulex 于 2020-1-19 21:02 编辑文章最开始有一段程序
mov bx,1000H
mov ds,bx
mov al,【0】
有点搞不懂这个地方,为什么cpu直接把1000H判定成段地址执行那个×16的操作?
为什么不是把1000H当做一个数据存入bx中?
我自己的猜想是因为下一条语句“mov ds,bx”的影响才导致的。可是程序不是自上往下读取的吗?
ps:我觉得这个问题不是我一个人问过(因为b站的弹幕有一条也是这个问题{:10_266:} ),但是我翻了好几页帖子都没有找到{:10_266:}
帮帮我吧,谢谢大家{:10_297:}
这两句都没有执行x16的操作
寄存器bx和ds中的内容都是1000h
人造人 发表于 2020-1-19 20:56
这两句都没有执行x16的操作
寄存器bx和ds中的内容都是1000h
但是按照书上讲的,这个程序确实能够读取物理地址为(1000:0)中的内容,问题中写出的两段程序是用于确认段地址 mov bx,1000H ; 就执行一个操作,把bx中的内容替换成1000h
mov ds,bx ; 就执行一个操作,把ds中的内容替换成bx中的内容,仅此而已
mov al, ; 首先,把ds中的内容x16,然后加上偏移,也就是加0,得到地址10000h,然后用这个地址访问内存,在这个地址的位置读取一个字节,然后用这一个字节替换al中的内容
; 注意,ds中的内容始终都是1000h,上面的x16和加偏移都是在临时寄存器中进行的,只有执行mov ds,bx这类指令,ds中的内容才改变 人造人 发表于 2020-1-19 21:17
你是真的牛逼,顺便问一句,你用来贴程序的这个高大上的东东是什么软件啊{:10_254:} {:10_257:} mov eax,dword ptr ds:
ds:=00000000
eax=00000000
cmp dword ptr ss:,0x3
堆栈 SS:【001FF2B4】=00000001
movzx eax,word ptr ds:
ds:=??
eax=00000000
本地调用来自 01A9734B
有大佬能解释下 这几句是什么意思 本人真.小白一个才学汇编能否详解一下 主要是ds:=00000000为什么等于00000000是怎么算出来的这个过程 、堆栈 SS:【001FF2B4】=00000001纠结了几天 求大佬教诲{:9_221:}{:9_220:}{:9_228:}{:9_236:}
页:
[1]