鱼C论坛

 找回密码
 立即注册
查看: 2459|回复: 7

[已解决]王爽《汇编语言(第三版)》3.2DS和【address】有个小问题想请教一下大家

[复制链接]
发表于 2020-1-19 20:18:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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站的弹幕有一条也是这个问题 ),但是我翻了好几页帖子都没有找到
帮帮我吧,谢谢大家

   
最佳答案
2020-1-19 21:17:44
  1. mov bx,1000H    ; 就执行一个操作,把bx中的内容替换成1000h
  2. mov ds,bx       ; 就执行一个操作,把ds中的内容替换成bx中的内容,仅此而已
  3. mov al,[0]      ; 首先,把ds中的内容x16,然后加上偏移,也就是加0,得到地址10000h,然后用这个地址访问内存,在这个地址的位置读取一个字节,然后用这一个字节替换al中的内容
  4.                  ; 注意,ds中的内容始终都是1000h,上面的x16和加偏移都是在临时寄存器中进行的,只有执行mov ds,bx这类指令,ds中的内容才改变
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-19 20:56:57 | 显示全部楼层
这两句都没有执行x16的操作
寄存器bx和ds中的内容都是1000h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-19 21:00:47 | 显示全部楼层
人造人 发表于 2020-1-19 20:56
这两句都没有执行x16的操作
寄存器bx和ds中的内容都是1000h

但是按照书上讲的,这个程序确实能够读取物理地址为(1000:0)中的内容,问题中写出的两段程序是用于确认段地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-19 21:17:44 | 显示全部楼层    本楼为最佳答案   
  1. mov bx,1000H    ; 就执行一个操作,把bx中的内容替换成1000h
  2. mov ds,bx       ; 就执行一个操作,把ds中的内容替换成bx中的内容,仅此而已
  3. mov al,[0]      ; 首先,把ds中的内容x16,然后加上偏移,也就是加0,得到地址10000h,然后用这个地址访问内存,在这个地址的位置读取一个字节,然后用这一个字节替换al中的内容
  4.                  ; 注意,ds中的内容始终都是1000h,上面的x16和加偏移都是在临时寄存器中进行的,只有执行mov ds,bx这类指令,ds中的内容才改变
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-19 21:31:19 | 显示全部楼层

你是真的牛逼,顺便问一句,你用来贴程序的这个高大上的东东是什么软件啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-19 21:40:08 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 16:27:04 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-10 07:53:02 | 显示全部楼层
mov eax,dword ptr ds:[eax*4+0x2357FCC]  
ds:[0235814C]=00000000
eax=00000000

cmp dword ptr ss:[esp+0x8],0x3
堆栈 SS:【001FF2B4】=00000001

movzx eax,word ptr ds:[ecx]
ds:[00000011]=??
eax=00000000
本地调用来自 01A9734B

有大佬能解释下 这几句是什么意思   本人真.小白一个  才学汇编  能否详解一下 主要是ds:[0235814C]=00000000为什么等于00000000是怎么算出来的这个过程     、堆栈 SS:【001FF2B4】=00000001  纠结了几天 求大佬教诲
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 17:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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