帮看个程序

hyang16 2010-08-24 09:18:31
判断字符是否为数字符的子程序,并删除数字字符。0 为结束


dseg segment
string db 'AB=c950=asd',0
dseg ends
;
cseg segment
assume cs:cseg, ds:dseg
isdecm proc
cmp al,'0'
jb isdecm1
cmp al,'9'+1
cmc
isdecm1:ret
isdecm endp

start: mov ax,dseg
mov ds,ax
mov si,offset string
mov di,si
next: mov al,[si]
inc si
or al,al
jz ok
call isdecm
jnc next
mov [di],al
inc di
jmp next
ok: mov [di],al
mov ah,4ch
int 21h
cseg ends
end start

编译通过,运行一闪就没,,,怎么办
...全文
98 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyang16 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 masmaster 的回复:]
引用 12 楼 hyang16 的回复:
看了这么久,现在才发现 杨季文的 程序大都没有显示输出的代码。。。
害我想老半天

所以我让你用debug的d命令查看内存呀
[/Quote]

那个。。。我还不会debug看内存,刚 debug -t 这个还是刚看书找到的
masmaster 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 hyang16 的回复:]
看了这么久,现在才发现 杨季文的 程序大都没有显示输出的代码。。。
害我想老半天
[/Quote]
所以我让你用debug的d命令查看内存呀
hyang16 2010-08-24
  • 打赏
  • 举报
回复
看了这么久,现在才发现 杨季文的 程序大都没有显示输出的代码。。。
害我想老半天
hyang16 2010-08-24
  • 打赏
  • 举报
回复
masmaster 兄的很详细啊,谢谢你这么用心

----------------
我也是第一次照书调试程序
之前都是只看,没动过手,真是不动不知道啊。。
hyang16 2010-08-24
  • 打赏
  • 举报
回复
发现问题了
源码里没有显示输出中断
----------------------dseg segment
string db 'AB=c950=asd',0
dseg ends
;
cseg segment
assume cs:cseg, ds:dseg
isdecm proc
cmp al,'0'
jb isdecm1
cmp al,'9'+1
cmc
isdecm1:ret
isdecm endp

start: mov ax,dseg
mov ds,ax
mov si,offset string
mov di,si
next: mov al,[si]
inc si
or al,al
jz ok
call isdecm
jnc next
mov [di],al
mov dl,[di] ; 这个
mov ah,2h ; 要加这个
int 21h ;这个
inc di
jmp next
ok: mov [di],al
mov ah,2h
int 21h
mov ah,4ch
int 21h
cseg ends
end start
-----------------
masmaster 2010-08-24
  • 打赏
  • 举报
回复

dseg segment
string db 'A3B=c950=asd',0
dseg ends
;
cseg segment
assume cs:cseg, ds:dseg
isdecm proc
cmp al,'0'
jb isdecm1
cmp al,'9'+1
cmc
isdecm1:ret
isdecm endp

start: mov ax,dseg
mov ds,ax
;显示未处理数据
call disp
;换行
call crlf

mov si,offset string
mov di,si
next: mov al,[si]
inc si
or al,al
jz ok
call isdecm
jnc next
mov [di],al
inc di
jmp next
ok: mov [di],al

;显示数据
call disp

mov ah,4ch
int 21h
;---------------------------
crlf proc
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
crlf endp
disp proc
mov bx,offset string
p: mov dl,[bx]
cmp dl,0
jz ol
mov ah,2
int 21h
inc bx
jmp p
ol: ret
disp endp
;-----------------------------
cseg ends
end start

hyang16 2010-08-24
  • 打赏
  • 举报
回复
查了下 jnc ,jnb 的 转移条件都是 cf=0
hyang16 2010-08-24
  • 打赏
  • 举报
回复
debug 执行到这里
-------------------------------------
jnc next ( debug显示 : jnb 000a)

-------------------------------------
jnc = jnb ??? 奇怪了
goodider 2010-08-24
  • 打赏
  • 举报
回复
无结果。。。。。。。
hyang16 2010-08-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 masmaster 的回复:]
楼主看的是杨季文的书吧
[/Quote]

是啊,有什么问题吗?
masmaster 2010-08-24
  • 打赏
  • 举报
回复
楼主看的是杨季文的书吧
  • 打赏
  • 举报
回复
我给你运行了下,没结果...
masmaster 2010-08-24
  • 打赏
  • 举报
回复
当然, 在程序的开头和结尾把string打印出来,以便比较。
masmaster 2010-08-24
  • 打赏
  • 举报
回复
这需要debug 你的程序, 当运行到mov ah,4ch的时候, 用d命令查看内存:
d ds:0 f

21,459

社区成员

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

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