weixin_学习爱我 发表于 2017-7-18 16:45:10

为什么第九章检测点9.1中问题(2)中的【bx+2】处要填的是cs,不能是bx么?

为什么第九章检测点9.1中问题(2)中的【bx+2】处要填的是cs,不能是bx么?求大神解释一下。

weixin_学习爱我 发表于 2017-7-18 20:43:39

(2)补全程序,使jmp指令执行后,CS:IP指向程序的第一条指令。

完整程序如下:

assume cs:code,ds:data
data segment

    dd 12345678h

data ends

code segment

start:mov ax,data

    mov ds,ax

    mov bx,0

    mov ,bx      ;源操作数bx为所填内容

    mov ,cs    ;源操作数cs为所填内容

    jmp dword ptr ds:

code ends
end start

madao0505 发表于 2017-7-19 10:29:19

我正好也看到这里 12345678h在内存中应该是 78 56 34 12这个时候的高位34 12应该是cs的值所以是bx+2       78 56才是bx。

weixin_学习爱我 发表于 2017-7-19 14:56:54

madao0505 发表于 2017-7-19 10:29
我正好也看到这里 12345678h在内存中应该是 78 56 34 12这个时候的高位34 12应该是cs的值所以是bx+2   ...

兄弟,是dd型的呀,在内存中应该是01 00 02 00 03 00 。。。08 00。
mov 【bx】,bx;表示把01 00 改为00 00
mov 【bx+2】,cs;表示把02 00改为cs
我的疑问是
既然要指向第一条指令的话,就应该是cs:ip=0000:0000
又因为bx已经为0了,那为什么不可以把【bx+2】的内存用bx来mov呢?

madao0505 发表于 2017-7-20 10:08:50

本帖最后由 madao0505 于 2017-7-20 10:10 编辑

weixin_学习爱我 发表于 2017-7-19 14:56
兄弟,是dd型的呀,在内存中应该是01 00 02 00 03 00 。。。08 00。
mov 【bx】,bx;表示把01 00 改为0 ...

你理解错了哈。如果按照你说的那种定义的话 应该是dd1,2,3,4,5,6,7,8而不是dd 12345678h具体你可以debug试一下。
dd 12345678 出来就是 78 56 34 12
然后 你要返回到第一条指令 也不是0000:0000 应该是cs:0000   这里的段地址是 code 这个标号所在的地址。
这个地址就是cs中的地址。所以直接将cs赋值给就是段地址了。   可能表达的不太好你可以再去看下视频 然后debug自己试下

weixin_学习爱我 发表于 2017-7-20 19:04:17

madao0505 发表于 2017-7-20 10:08
你理解错了哈。如果按照你说的那种定义的话 应该是dd1,2,3,4,5,6,7,8而不是dd 12345678h   ...

有点理解了,多谢多谢。

梦想飞翔的蜗牛 发表于 2019-1-26 20:40:40

dd 12345678h在内存中不是应该这样存放吗 34 12 78 56吗

sbx 发表于 2020-8-15 20:53:50

梦想飞翔的蜗牛 发表于 2019-1-26 20:40
dd 12345678h在内存中不是应该这样存放吗 34 12 78 56吗

78563412

鱼非子 发表于 2020-9-15 19:33:43

madao0505 发表于 2017-7-19 10:29
我正好也看到这里 12345678h在内存中应该是 78 56 34 12这个时候的高位34 12应该是cs的值所以是bx+2   ...

在内存中难道不是87 65 43 21吗?越来越糊涂了,卧槽
页: [1]
查看完整版本: 为什么第九章检测点9.1中问题(2)中的【bx+2】处要填的是cs,不能是bx么?