判断字符串中字母数字的问题

sunjor 2008-11-04 08:59:37
输入一个字符串,把数字,字母,其他分别放到三个数组中.这是我的编的程序,高手不要笑.
data segment
string db 10,?,10 dup(?)
letter db 10 dup(?)
digital db 10 dup(?)
other db 10 dup(?)
data ends


code segment
assume ds:data,cs:code


start: mov ax,data
mov ds,ax
mov ax,0
mov bx,0
mov dx,0
lea si,string
mov ah,0ah
int 21h
mov cl,string+1
mov ch,0
lea si,string+2

one: cmp byte ptr[si],2fh
jbe oth
cmp byte ptr[si],39h
jbe number
cmp byte ptr[si],40h
jbe oth
cmp byte ptr[si],5ah
jbe let
cmp byte ptr[si],60h
jbe oth
cmp byte ptr[si],7ah
jbe let
jmp oth


oth: mov other[ax],[si]
inc ax
inc si
jmp next
let: mov letter[bx],[si]
inc bx
inc si
jmp next
number: mov digital[dx],[si]
inc dx
inc si
jmp next
next: loop one
mov ax,4ch
int 21h
code ends
end start


问题在 mov other[ax],[si]这块 提示是MUST be index or base register,下面mov letter[bx],[si],mov digital[dx],[si]提示的是Phase error between passes 还有int 21h那也说Phase error between passes 我该怎么改呢?
...全文
123 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-11-04
  • 打赏
  • 举报
回复
只有BX、BP、SI、DI可以用做间址。
紫郢剑侠 2008-11-04
  • 打赏
  • 举报
回复
两个操作数至少要有一个是常数或寄存器罢?

di寄存器没有用到罢?


mov other[ax],[si]
改成
mov di, [si]
mov other[ax], di



mov letter[bx],[si]
改成
mov di,word ptr [si]
mov letter[bx],di



mov digital[dx],[si]
改成
mov di,[si]
mov digital[dx],di

上面的这些赋值操作也可以通过堆栈来进行



mov ax,4ch
int 21h
改成
mov ax,4c00h
int 21h


21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧