Fimbulex 发表于 2020-1-19 20:18:40

王爽《汇编语言(第三版)》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:}

   

人造人 发表于 2020-1-19 20:56:57

这两句都没有执行x16的操作
寄存器bx和ds中的内容都是1000h

Fimbulex 发表于 2020-1-19 21:00:47

人造人 发表于 2020-1-19 20:56
这两句都没有执行x16的操作
寄存器bx和ds中的内容都是1000h

但是按照书上讲的,这个程序确实能够读取物理地址为(1000:0)中的内容,问题中写出的两段程序是用于确认段地址

人造人 发表于 2020-1-19 21:17:44

mov bx,1000H    ; 就执行一个操作,把bx中的内容替换成1000h
mov ds,bx       ; 就执行一个操作,把ds中的内容替换成bx中的内容,仅此而已
mov al,      ; 首先,把ds中的内容x16,然后加上偏移,也就是加0,得到地址10000h,然后用这个地址访问内存,在这个地址的位置读取一个字节,然后用这一个字节替换al中的内容
               ; 注意,ds中的内容始终都是1000h,上面的x16和加偏移都是在临时寄存器中进行的,只有执行mov ds,bx这类指令,ds中的内容才改变

Fimbulex 发表于 2020-1-19 21:31:19

人造人 发表于 2020-1-19 21:17


你是真的牛逼,顺便问一句,你用来贴程序的这个高大上的东东是什么软件啊{:10_254:}

人造人 发表于 2020-1-19 21:40:08

zwhe 发表于 2020-6-3 16:27:04

{:10_257:}

久久_99 发表于 2020-6-10 07:53:02

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]
查看完整版本: 王爽《汇编语言(第三版)》3.2DS和【address】有个小问题想请教一下大家