-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 |