目录 上一页 下一页 下一章

-32- PC机汇编语言实战精解

  这个程序可以把内存中的一串文字显示在屏幕上,这个程序应用了一些新的技术:
  ① 我们使用了DEBUG的"E"(EDIT)命令将文字串放入内存;
  ② 程序中使用了"间接寻址"技术。
"E"(EDIT)命令具有"编辑内存"的功能,它的用法很简单,在提示符后键入"E段:偏移[Enter]"即可。DEBUG会把指定内存单元的内容显示在屏幕上,同时等待输入新数据,如果只修改一字节内容,则在输入数据后打回车;若要修改相临的下一字节内容,则在输入数据后打空格,待把所有数据修改完后再打回车结束此命令。注意如果只输入偏移地址,则DEBUG会默认DS为段地址。
  我们再编写汇编语言程序时,有时需要把内存中的数据取到寄存器中加以处理,在这种情况下我们应该把指令写成"MOV 寄存器,[偏移地址]"的形式。CPU执行这个指令时就会把内存中"DS:偏移地址"处所储存的数据取到指定寄存器中。
提醒大家注意一点:CPU的引用的段地址默认来自DS寄存器,当然也可以明确指定一个段寄存器作为段地址来源,用DEBUG编程时指令要写成两行:
  ****:**** ES:[Enter](指定ES为段寄存器,也可指定其它段寄存器)
  ****:**** MOV 寄存器,[偏移地址][Enter]
CPU执行此指令时就会把内存中ES:[偏移地址]处储存的数据取到指定寄存器中。
  偏移地址两侧的"[ ]"是必不可少的。它表示我们要装入寄存器的数据是储存在这个地址处的数据,而不是这个地址本身。我们用DEBUG做个实验:
C:\ASM\>DEBUG[Enter]
-d0 f注意这两个字节
09FE:0000CD 20 FF 9F 00 9A EE FE-1D F0 4F 03 68 04 8A 03. ........O.h...
-a100[Enter]
09FE:0100 mov ax,[0]
09FE:0103 mov ax,0
09FE:0106 [Enter]
-r注意"DS:0000"这个存储单元
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=09FEES=09FESS=09FECS=09FEIP=0100 NV UP EI PL NZ NA PO NC
09FE:0100A10000MOV AX,[0000] DS:0000=20CD
  通过前面讨论的内容,我们现在就可以推知这条指令执行完后AX寄存器的数据。

① 对于学习过C语言程序设计技术的朋友来说,"间接寻址"并非是什么新鲜东西,还记得"指针"的概念吗?

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章