注册 登录
编程论坛 汇编论坛

del di?

shaoyuan 发布于 2008-11-18 22:48, 1205 次点击
data    segment
char    equ '$'
ptrn    db  'this is a example $'
charddr  dw  ?
count   equ  19
data    ends

coseg   segment
        assume cs: coseg,ds:data
start:    mov ax,data
mov ds,ax
mov di,offset ptrn
mov al,char
mov cx ,count
cld
repne scasb
jz    pasepr
mov di,1
pasepr:del di
mov charddr,di
mov ah,4ch
int 21h
coseg    ends
end start
这个程序那里出错了?
2 回复
#2
cnhanxiao2008-11-19 00:52
回复 1# 的帖子
repne scasb

scasb需要ES:DI来定位,但是你程序中没有装填ES.

assume cs: coseg,ds:data,es:data
...
start:    mov ax,data
mov ds,ax
mov es,ax

太困,其他没仔细看,还有问题请留贴
#3
ONEPROBLEM2008-11-19 18:16
你的程序不是统计目标串的字符个数吗?
data    segment
char    equ '$'
ptrn    db  'this is a example $'
charddr  dw  ?
count   equ  19
data    ends

coseg   segment
        assume cs: coseg,ds:data
start:    mov ax,data
mov ds,ax                       ;这句不能少,否则保存字符串个数的时候,会保存到错误的地址去.
mov es,ax       ;也要有这语句,因为,目标串的默认段地址是es
mov di,offset ptrn
mov al,char
mov cx ,count
cld
repne scasb
jz    pasepr       ;多余,因为上一条语句已经包含了这种判断
mov di,1       ;同上.
pasepr:del di ;这句改为dec di ,"pasepr"不要了.因为当判断到"$"时,正好多了这个字符   
mov charddr,di
mov ah,4ch
int 21h
coseg    ends
end start
1