目录 上一页 下一页 下一章

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

  (2)"从串取"指令
  指令LODS就是一个用于取数据的串处理指令:
助记符:LODS(Load from string)
用 途:从DS:SI指示的内存单元中取出数据并放入累加器
格 式:LODSB(取一字节)
    LODSW(取一个字)
执 行:LODSB--ALDS:[SI],同时SI +/- 1
    LODSW--AXDS:[SI],同时SI +/- 2
  指令最后的字母"B"和"W"表示所要取的数据类型是"BYTE"或"WORD"。所以"LODSB"的动作和"MOV AL,BYTE PTR DS:[SI]"相当,而"LODSW"则与"MOV AX,WORD PTR DS:[SI]"一样。但是LODS指令和MOV指令有两点区别:
① LODS指令只能将数据取入累加器中,不能取入别的寄存器;
② LODS指令不仅能取得数据,同时对提供地址的SI寄存器有操作--自动的加上或减去和取得数据等量的字节数。若取了1B数据,则SI变化1;而取得1W数据,则SI变化2。那么究竟什么情况下SI增量,什么情况下SI减量呢?这个问题将在下面回答。
  (3)方向标志--DF(Direction Flag)
  DF是标志寄存器中的bit10位,它的置、复位情况将影响到执行串处理指令时SI(还有DI)寄存器的增与减。当DF置位(为1)时,每次执行指令后SI(DI)减量,这样就使得串处理从高地址向低地址方向进行;而DF复位(为0)时,每次执行指令后SI(DI)增量,串处理自然会从低地址向高地址方向进行。现在的问题就是如何设定DF的状态?
  (4)"D"标志控制指令
  指令CLD就是一条用于控制DF状态的指令,和这条指令相对应的是STD指令:
助记符:CLD(Clear direction)/STD(Set direction)
用 途:使DF标志复位/置位
格 式:CLD/STD
执 行:DF<-0,DF清零/DF<-1,DF置1
  这两条指令功能很简单,不再多说。
  我们前面曾经提到过标志寄存器中某些位可以对CPU内部的工作状态进行控制,DF标志就是很典型的一例。
  当我们将要显示的字符取入AL寄存器后,剩下的工作就是将这个字符显示在屏幕上。这一步可用DOS提供的2号功能实现,只要将AL中的ASCII码送入DL寄存器再调用DOS功能即可,不过在前面的程序中我们采用了一个更简捷的方法--调用BIOS 10H中断。
  (5)INT 10H的0EH功能。
  10H号中断调用也是由BIOS提供,它负责管理PC机的显示系统,我们在屏幕上看到的文字和图形一般都是经过10H号中断显示出来的。这个中断包括很多功能,现在要讨论的0EH功能是十分常用的一个,它被称为"TTY方式的字符显示功能"。
  TTY是电传打字机,一种古老的设备,它可能比我本人出现的还要早。究竟什么是TTY方式?我也不能很确切的说出定义,不过这个功能同10H中断提供的其它一些显示文字的功能相比确有很大的不同:
  ① 使用这个功能显示一个字符后,光标会自动移到下一个位置;

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章