┈━═☆佳佑 发表于 2013-6-20 18:35:16

零基础汇编 实验10-3题

本帖最后由 ┈━═☆佳佑 于 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,            ;低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      ,cl
                  inc      di
                  jcxz       s2
                  loop      s1                  ;每字按顺序排放(loop可改为JMP)
   
         s2:      mov   cx,ds:
                   add      si,2
                   jcxz      s3
                   jmp      dtoc         ; !!!!!问题在这!!!!
      s3:      ret


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   show_str: ret    ;按步骤来 dtoc 还没对

code ends
endstart

问题在这! (55.)   这用loopdtoc 就能在 cmddebug 里顺利跟踪!用jmp在 在debug里面“t”跟踪不了总乱返回出程序!
;我把显示段子程序加上去   用LOOP指令 能显示到1 用JMP指令什么都不显示,用LOOP 只能显示到 DS段第三个字“1”(CX)=0001h ,运行LOOP指令 都是先CX-1再判断是否循环 所以 DS段第三字后就不显示了 。为什么 用 jmpdtoc 就debug 跟踪不了呢?

luoqqsh 发表于 2013-6-20 21:53:07

看上去不错,谢谢分享

射落太阳看星星 发表于 2013-6-20 22:34:07

看上去不错,感谢分享。

┈━═☆佳佑 发表于 2013-6-20 22:51:32

不是看上去不错的问题 呀 这程序还是错的 完成不了题目要求 只能显示到“123,12666,1” 后面的几个字节根本不显示
页: [1]
查看完整版本: 零基础汇编 实验10-3题