目录 上一页 下一页 下一章

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

要注意,这个指令实际执行一种"COPY"的操作,数据串移动到另一个位置后,原位置的数据依然存在,这可以从上面程序的输出结果上看出来。
  通过这么多实际问题我们可以看出,很多串处理指令只有和REP前缀联合应用才能真正处理数据串,单独应用的串指令目前只有一个--LODS。其实LODS也可以加上REP前缀,只是我还没有发现这样应用LODS指令有什么实用价值。我曾在程序中写出过REP PUSH AX这样的指令,竟然也能编译通过,不过用DEBUG跟踪执行这样的指令时并未发生想象中的所谓"连续压栈"所操作,大家可以试一下,看看究竟会发生什么。
  问题已经讨论完了,但串处理指令还有一个没有说到,笔者特意将此指令保留到最后,目的是想借着讨论这个指令之机为即将开始的新一章打一个伏笔。这最后一个串指令就是和LODS相对的指令--STOS:
助记符:STOS(Store in to string)
用 途:成串存入数据
格 式:STOSB(存入一字节)
    STOSW(存入一个字)
执 行:将累加器中的数据存入ES:DI指向的内存单元,同时DI寄存器根据DF的状态相应增减。
  例程DISPSTR.ASM序说明这个指令的用法:
DISPSTR.ASM
data

string
data

code

main












disploop:




segment
assume
db'The sa
ends

segment
assume
proc
mov
mov
mov
mov
mov
mov
mov
cld
rep
mov
mov
mov

lodsb
or
jz
stosw

ds:data
me sunshine is presente



cs:code
far
ax,data
ds,ax
ax,0b800h
es,ax
di,0
ax,0720h
cx,2048

stosw
si,offset string
di,160*10+16
ah,2


al,al
exit



d to all those who love sunshine',0





;初始化DS寄存器

;ES寄存器置入段地址0B800H

;DI寄存器清0
;AX寄存器置入0720H
;处理2048个字
;设置DF标志
;将0720H写入ES:DI指向的内存单元
;SI寄存器指向字符串STRING
;设置DI寄存器
;AH寄存器送入2

;取得一个字符
;是0吗?
;是0,结束程序
;将字符连同AH中的02H一同写入内存

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章