能力值:
( LV2,RANK:10 )
|
-
-
2 楼
mov ax,cs
+ mov ds,ax
-----------------
mov ds,cs
就是告诉cpu,ds和cs一样嘛
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
哦哦,那么当执行到第六行时,1000段的[0][2][4][6]单元的内容又是什么?他安排了1000:0开始的内存单元为这13行代码,他又把这段内存定义为堆栈段和数据段,还用了这段代码段的【0】【2】【4】【6】单元来进行add运算,那不是出乱子了吗?从1000:0开始的前24字节(大概是24个字节吧)也就是这段代码段的前几个单元存放的是这13行代码,那还能用前面这几个单元来进行运算吗??
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
MS代码段不能直接用来mov,所以要通过AX作为中间变量过度一下
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
[QUOTE=子琳;820814]哦哦,那么当执行到第六行时,1000段的[0][2][4][6]单元的内容又是什么?他安排了1000:0开始的内存单元为这13行代码,他又把这段内存定义为堆栈段和数据段,还用了这段代码段的【0】【2】【4】【6】单元来进行add运算,那不是出乱子了吗?从1000:0开始的前24字节(大概是24个字节...[/QUOTE]
1000段的[0][2][4][6]都是这段代码的机器码.
他这段代码只是为了说明:一段内存,既可作为代码段,也可作为数据段、栈段等,
关键是看cpu中寄存器的设置,即cs,ss,ds的值.
这段代码其实是没有实际意义的
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我来完整地回答lz的问题,还希望能得到你的kx币。
首先第一问题:
MOV AX,CS 这个语句就是说把cs的值赋给ax,这个是和下一个语句( MOV DS,AX )一起用的,合起来就是:把cs值赋给ds。
LZ可能是觉得这样岂不麻烦,干嘛不直接用 mov ds,cs?原因就是因为cs和ds为段寄存器,不能直接相互赋值,必须通过其他的寄存器做中间人。
第二个问题:
lz怕 add 运算弄乱了代码段。在这里是不会发生这种事,因为你说的代码总共占24个字节,而这段代码中对内存进行改变的语句只有:PUSH AX, PUSH BX。他们是把AX值写入栈,而栈低地址在1000:0020,PUSH AX语句改写 地址1000:001F和1000:0020,PUSH BX改写1000:001D和1000:001E,而这四个单元本来是没有上述任何代码的。因为代码只有24个字节,而改写的是第29-32字节。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
楼上说的比较详细了,楼主把kx付给人家吧
|
能力值:
( LV5,RANK:60 )
|
-
-
8 楼
6楼说的比较详细了,楼主把kx付给人家吧
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
o !明白了。谢谢,改写的PUSH AX PUSH BX
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
哇哇,好多人学习的时候都是看王大哥的书啊,偶也在看,可是自己人品有点问题,一直看的不咋滴
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
一直以为王爽是女的。。。话说我高中同学有个女生,姓管,叫管爽。。
|
|
|