能力值:
( LV4,RANK:50 )
|
-
-
2 楼
第一句就是把代码段段地址给ax
mov ax,0020h ,你不是要放到0:200吗? (0x20<<4) + 0 不就是这个地址吗?
mov cx,18h , 看机器码了,mov ax,4c00h前面刚好0x18个字节。
s: mov al,ds:[bx]
mov es:[bx],al ;
这儿两句就是把“mov ax,4c00h”之前的指令复制到内存0:200处
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我明白了,刚才在debug中看明白了。 还有个疑问是 内存地址 0:0200 是如何得到 段地址(es)=0020 的?
我只知道 段地址x16+偏移地址=物理地址
那么 0020x16+0000=0200:0000 ,它怎么和 内存地址 0000:0200 勾搭上的??
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
另 万分感谢 szwyf 给初学者的 帮助
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
0x20:0 和0:0x200 表示的都是同一个内存地址,都是表示物理地址0x200。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
王爽的汇编写得很详细,我现在也正在研究中.
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
呵呵 我也 正在 学习中 啊
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
这个都不明白 只能说你看书没看到份上,如果你汇编没什么基础的话就慢慢来不要着急。王爽的书我觉得写的真的非常详细。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
还能回复不?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
好的,这个是这样子的。
(1)assume cs:code 是把cs段地址和code联系起来
其中下面的 mov ax,code ;code为cs段地址
(2)不是要把指令复制到0:200h得地方吗?那么根据段地址*16+偏移地址,那么得出es为20h
(3)mov cx,18h ;18h为所填写的数据,18是怎么算来的
这个18是这样计算得来的,计算机把汇编指令变成操作码,opcode,这样子move指令一般是2个字节,loop和inc都是单字节,计算机下来在mov ax,4c00h之前一共有18个字节,所以cx为18。
传输的时候也是按照单字节来进行传输的。
(4)s: mov al,ds:[bx]
mov es:[bx],al ;这儿两句不知道要干什么
inc bx
loop s
从 s:到loop s是一个循环语句,前面两句就是传输语句,由于8086不支持从内存到内存的传输,所以要使用寄存器进行传输。
解答完毕,有不明白了再问吧。
|
|
|