新手求助,关于LEA的使用
题目:试从jay单元开始存放两个无符号的字节数,将大数送往max单元。我写的程序:
data segment
jay db 12h,34h
max db ?
data ends
code segment
assume ds:data,cs:code
start:mov ax,data
mov ax,ds
lea bx,jay
mov al,
cmp al,
ja next
mov bl,
mov max,bl
jmp exit
next:mov max,al
exit:mov ah,4cH
int 21h
code ends
end start
但是定义的数据总是在DS:100开始,而载入的JAY的偏移地址从ds:000开始。
怎么修改呢?
请大家指点迷津。 这个,代码段第二行资料流向写反了,
mov ax,ds
如此一来ds寄存器的值给了ax,那麽一开始mov ax,data就形同虚设了
改为mov ds,ax就正常了
定义的数据总是在DS:100开始
这个应该是因为ds寄存器初始时是指向PSP(ProgramSemgentPrefix)
(应该是吧??记得鱼老师好像是在非常前段的课程里跟着课本稍微提到)
这个PSP结构共256个字节(16进制就是0x100),後面跟着的才是我们自己定义的各个段,
但是因为你代码的bug导致ds寄存器没有指向data段,所以才会有这0x100的差距
你的源碼先是定義了data段,然後是code段,因此在記憶體的分布應該就是
ds:0000
... 共256字节
ds:00ff
ds:0100
一开始调试还怀疑是不是自己该重头读起了,怎麽调试ds:0000内容竟然不是12 34 ... ...
後来才恍然大悟只是代码里的bug,呵呵.
页:
[1]