自学中碰到的疑点,希望达人指教
ovmem 2004-11-21 02:36:06 1.觉得《80X86汇编语言程序设计教程》第78页关于'$'的说明有错,以下是部分文字:
> 汇编语言用符号'$'表示ip的当前值
>…………
>例如下面的语句表示跳过8字节的存储区:
>org $+8
> 当'$'在指令中时他表示本指令第一字节的地址偏移。例如下面的指令表示转移到当前指令第一字节后6字节处
>jmp $+8
>当$用在伪指令的参数中时,它表示ip的当前值。例如:
>ARRAY dw 1,2,$+4,3,4,$+4
>设ARRAY分配的地址偏移是100h,那么汇编后相应的存储情况如下
单元 地址
01 100
00
02 102
00
08 104
00
03 106
00
04 108
00
0E 10A
00
……
————————————————————————————————————————————
我用emu8086试验过,书上的描述从“org $+8”这句以后就全错了,
“当'$'在指令中时他表示本指令第一字节的地址偏移”
应该改为
“当'$'在指令中时他表示本指令 下一个 字节的地址偏移”
以下是试验结果(ip初值为100h):
“jmp $+6”这句汇编后变成 “jmp 0108h”(短jmp语句占两个byte,执行完后ip=0102h,所以0102h+6h=0108h)
ARRAY的内容也同试验结果不同,结果如下(ip初值为100h):
单元 地址
01 100
00
02 102
00
04 104
00
03 106
00
04 108
00
04 10A
00
……
我猜104h 和 10Ah 这两字节变量不会变成08,00 和 0E,00是因为这是伪操作,在汇编时ip值是不变的。
但问题就是为什么这两个单元的内容不是 04,01 ???(ip的初值是0100h,0100h+4h=0104h)
*****************************************************************************************
2.
还有书上的一个问题,不太懂,见下:
>源程序是否一定要以END语句结束?程序是否一定冲代码段的偏移0开始执行?如果不是该如何指定?
*****************************************************************************************
请哥哥姐姐不吝赐教