|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 ┈━═☆佳佑 于 2013-6-20 19:19 编辑
- ;题目是 将 data段 123,12666,1,8,3,38 以十进制显示出来。
- assume cs:code,ss:stack
- data segment
- dw 123,12666,1,8,3,38,0,0 ; 后加两字 构成16字节 便于计算 (ds:0-f)
- dw 24 dup (0) ;定义三行16字节 存放ASCII码 (ds:10h-3fh)
- data ends
- stack segment
- db 16 dup (0)
- stack ends
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- code segment
- start: mov ax,data
- mov ds,ax
- mov si,0
- mov di,16
-
- mov ax,stack
- mov ss,ax
- mov sp,16
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;转换;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- call dtoc
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- call show_str
-
- mov ax,0100h
- int 21h
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;转换;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- dtoc: mov bx,0
- push bx ;栈入0定位
- mov ax,[si] ;低16位
- s0: mov dx,0 ;高16位
- mov cx,10 ;除数
- div cx
- mov cx,dx
- add dx,30h
- push dx
- loop s0 ;取ASCII
-
- s1: pop cx
- mov [di],cl
- inc di
- jcxz s2
- loop s1 ;每字按顺序排放(loop可改为JMP)
-
- s2: mov cx,ds:[si]
- add si,2
- jcxz s3
- jmp dtoc ; !!!!!问题在这!!!!
- s3: ret
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- show_str: ret ;按步骤来 dtoc 还没对
- code ends
- end start
复制代码问题在这! (55.) 这用loop dtoc 就能在 cmd debug 里顺利跟踪!用jmp在 在debug里面“t”跟踪不了总乱返回出程序!
;我把显示段子程序加上去 用LOOP指令 能显示到1 用JMP指令什么都不显示,用LOOP 只能显示到 DS段第三个字“1”(CX)=0001h ,运行LOOP指令 都是先CX-1再判断是否循环 所以 DS段第三字后就不显示了 。为什么 用 jmp dtoc 就debug 跟踪不了呢?
|
|