jay 发表于 2011-12-14 14:21:33

新手求助,关于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开始。
怎么修改呢?
请大家指点迷津。

ytrfamli 发表于 2011-12-20 13:55:27

这个,代码段第二行资料流向写反了,

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]
查看完整版本: 新手求助,关于LEA的使用