有无效的指令吗???

notecom 2005-02-27 03:24:16
源代码如下:
data segment
num db '1','2','3','a','c','d','e','B','G','R','!','%','E'
numlen equ $-num
data ends
code segment
assume cs:code,ds:data
start: mov ax,data
mov ds,ax
lea si, num
mov cx,numlen
p1: mov al,[si]
cmp al,'0'
jb p2
cmp al,'9'
jb p
cmp al,'A'
jb p2
cmp al,'Z'
jb p
cmp al,'a'
jb p2
cmp al,'z'
jb p
p: mov dl,al
mov ah,2
int 21h
p2: inc si
loop p1
code ends
end start
编译和连接后已经提示没有错误,可是在运行可执行文件的时候,
提示:NTVDM CPU 遇到无效的指令。
CS:0561 IP:0031 OP:FO 03 E9 01 E9选择“关闭”终止应用程序
如果真的有无效指令的话,在编译的时候为什么检查不出来呢

...全文
100 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanjia 2005-02-27
  • 打赏
  • 举报
回复
不好意思,把NUM_LEN:BYTE去掉!
怎么显示我不知道,不好意思
lanjia 2005-02-27
  • 打赏
  • 举报
回复



如果想分别统计数字,大写字母,小写字母的个数,程序该怎么改写?
两种情况:1、3个个数分一行显示(比如:2,3,6)
2、分三行显示(2个
3个
6个)



COUNT_NUM PROC NUM:PTR BYTE NUM_LEN:BYTE

XOR AX,AX
XOR BX,BX
XOR cx,cx




loop1:
LEA SI,NUM

MOV AL,[SI]
.IF AL>='0'&&AL<='9'
JMP N
.ELSEIF AL>='A'&&AL<='Z'
JMP U
.ELSEIF AL>='a'&&AL<='z'

JMP L
.ELSE
JMP NEXT
.ENDIF

N: INC AX
INC SI
JMP loop1

U: INC BX
INC SI
jmp loop1

L: INC CX
INC SI
jmp loop1
NEXT:
INC SI
jmp loop1

COUNT_NUM ENDP


代码效率不高,我也是刚学的!
也不知道指令对不对?
在网吧写的。
请高手指教,谢谢
notecom 2005-02-27
  • 打赏
  • 举报
回复
哦,谢谢!
Cassati 2005-02-27
  • 打赏
  • 举报
回复
你是由于没有返回DOS的吧
mov ah,4ch
int 21h
加进去看看
notecom 2005-02-27
  • 打赏
  • 举报
回复
我就是在dos下调试的
W32API 2005-02-27
  • 打赏
  • 举报
回复
编译器支持你所使用的指令就可以通过编译。
NTVDM 不支持你使用的指令就无效指令。
建议在 DOS 下调试。

统计个数把
jb p ;<'Z','z','9'
判断该成
判断
;>'Z','z','9' 成立则直接跳到下一个分析
然后 count 增量,并 jmp p

要显示所出现的对应字符,可以增加 buffer 去保存出现的字符或者保存字符对应的坐标。
最后显示出来.
notecom 2005-02-27
  • 打赏
  • 举报
回复
忘记了一点,个数的后面还要同时显示对应的字符
notecom 2005-02-27
  • 打赏
  • 举报
回复
如果想分别统计数字,大写字母,小写字母的个数,程序该怎么改写?
两种情况:1、3个个数分一行显示(比如:2,3,6)
2、分三行显示(2个
3个
6个)

21,458

社区成员

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

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