八咫琼武月 发表于 2012-2-5 23:39:45

汇编监测点3.1课后题求解

表咯第四行
jmp 0ff0:0100对应CS值为什么是1000H,从何而来!(我反复看了几次教程视频,小甲鱼在执行到jmp 0ff0:0100时,直接就说CS值为1000,倒是有个改IP公式jmp ax ,这是否就是将AX值,也就是用0ff0覆盖?)视频中有将同时修改CS值和IP值的方法,可是修改结束后出现的事物理地址,好像并未提及之后CS值和IP的值,还是我理解错了,一直很模糊!还有第7行中mov ax,是怎么算的,视频教程中并未提及,单纯看做0008为偏移地址来计算怎么算也算不对,对应AX值成了C389H,http://www.fishc.com/uploads/allimg/101115/1_101115003845_1.png

Seely 发表于 2012-2-5 23:39:46

这个图里面错了,虽然图里面的CS:IP和原本的指向的同一地址。
即:0ff0:100=ff0h*10h+100h=ff00h+100=10000h 它直接把10000写成1000:0填进去了。
正确的应该是CS=ff0h; IP=100h.所以这个图后面的CS和IP也都错了。

mov ax, 也就是mov ax, ds: 此时ds=2000h 所以 ds:=2000h*10h+8h=20008h
20008h地址处的数值是89h,由于赋值的是字(ax为16位也就是一个字),所以高位在20009h(C3h)。
所以ax=C389h 如果这里你看不懂,复习下 “3.1 内存中字的存储”。

莫名其妙 发表于 2012-2-6 10:29:14

本帖最后由 莫名其妙 于 2012-2-6 11:16 编辑

答案下面还有一行红字    注,以上答案来自互联网,第二题实际验证过之后有所出入:


注,以上答案来自互联网,第二题实际验证过之后有所出入:
更正如下:jmp 0FF0:0100 后,CS的值应该为0FF0,IP的值应该为100。
这个应该是跳转到cs:IP代码段物理地址是10000H 开始 可以有偏移地址多个指向同一个物理地址吧



还有第7行中mov ax,是怎么算的,视频教程中并未提及,单纯看做0008为偏移地址来计算怎么算也算不对,对应AX值成了C389H,   关于这个问题应该是 不是算法 应该说是赋值mov ax, 应该是 讲当前 DS:位置的值 给AX
这问题可以看看3.2 ds 和3.4的mov add sub   

小甲鱼视频经常用calc验证计算机的数据   我感觉需要验证的其实计算机的到是次要的 主要需要验证的是书中 因为排版错误或者印刷错误导致的 数据错误 才是最麻烦的

疾风飘流 发表于 2012-2-6 16:02:57

此题的确小甲鱼的答案(准确的说是网上的答案)有错误。按照答案的话,第二条应该是jmp 1000:0000
同时修改cs与ip的方式是jmp cs:ip   而单纯只改ip的话可以输入jmp ip,单纯只改cs也可用
mov ax,cs值
mov cs,ax
来进行,当然要麻烦点。
至于楼主所说的 的意思是后面所学内存单元的内容,既把DS中的值当作段地址,中的0008当作偏移地址,把0008这个内存单元的字(注意是字不是字节)输入到AX中,所以要同时把0009内存单元用到。所以ax才变成C389H。

八咫琼武月 发表于 2012-2-6 21:51:39

初学者伤不起呀..小甲鱼课后题的答案都奉为圣旨一样的.没通过监测点不准往下学啊

网友 发表于 2014-3-11 14:25:23

本帖最后由 网友 于 2014-3-12 11:13 编辑

mov ax,2000h
mov ds,ax
mov ax,    这里如果段地址不写 默认是ds
内存存储是反过来的所以是C389

0ff0*10+0100=10000H难道不是吗?
页: [1]
查看完整版本: 汇编监测点3.1课后题求解