为什么第九章检测点9.1中问题(2)中的【bx+2】处要填的是cs,不能是bx么?
为什么第九章检测点9.1中问题(2)中的【bx+2】处要填的是cs,不能是bx么?求大神解释一下。(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
我正好也看到这里 12345678h在内存中应该是 78 56 34 12这个时候的高位34 12应该是cs的值所以是bx+2 78 56才是bx。 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: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自己试下 madao0505 发表于 2017-7-20 10:08
你理解错了哈。如果按照你说的那种定义的话 应该是dd1,2,3,4,5,6,7,8而不是dd 12345678h ...
有点理解了,多谢多谢。 dd 12345678h在内存中不是应该这样存放吗 34 12 78 56吗 梦想飞翔的蜗牛 发表于 2019-1-26 20:40
dd 12345678h在内存中不是应该这样存放吗 34 12 78 56吗
78563412 madao0505 发表于 2017-7-19 10:29
我正好也看到这里 12345678h在内存中应该是 78 56 34 12这个时候的高位34 12应该是cs的值所以是bx+2 ...
在内存中难道不是87 65 43 21吗?越来越糊涂了,卧槽
页:
[1]