. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验dtoc,调试成功,各位多提意见~~~  [已解决] 回复[ 2次 ]   点击[ 669次 ]  
qiangzi
[帖 主]   [ 发表时间:2010-01-25 22:09 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:6
注册日期:2010-01-07 10:37
assume cs:code
data segment
  db 10 dup (0)
data ends
stack segment
  dw 32 dup (0)
stack ends
code segment
start:mov ax,12666     ;要显示的数据
      mov bx,data       
      mov ds,bx        ;ds指向段
      mov bx,stack
      mov ss,bx        ;ss指向栈
      mov sp,20h       ;sp指向栈顶
      mov si,0         
      call dtoc        ;调用dtoc子程序
      mov dh,8         ;要显示的位置 行
      mov dl,3         ;要显示的位置 列
      mov cl,2         ;显示的颜色 绿色
      call show_str    ;调用show_str子程序
      mov ax,4c00h
      int 21h
 dtoc:push dx          
      push cx
      push si          ;子程序中使用的寄存器入栈
    a:mov dx,0         ;被除数高16位
      mov bx,10        ;除数
      div bx           ;ax中位商,dx为余数
      inc si           ;计数,记录入栈的个数
      add dx,30h       ;化为ASCII码
      push dx          ;余数入栈
      mov cx,ax        ;ax中的值给cx
      jcxz b           ;判断cx是否为0,为0,转到b,否则往下执行
      jmp short a      ;跳转到a
    b:mov cx,si        ;cx中储存循环次数
      mov bx,0         
    c:pop ds:[bx]      ;栈中数据出栈,存入data段中
      inc bx           ;后来出栈的数据的低16为把前面出栈的高16为覆盖
      loop c
      pop si
      pop cx
      pop dx           ;子程序中使用的寄存器出栈
      ret
show_str:mov ax,0B800H
         mov es,ax     ;es指向显示缓冲区
         dec dh
         mov al,0a0h
         mul dh
         dec dl
         add dl,dl
         mov dh,0
         add ax,dx
         mov bx,ax     ;计算偏移地址
         mov ah,cl     ;ah暂时储存颜色
       s:mov cl,ds:[si];字符放在cl中
         mov ch,0
         jcxz ok       ;判断是否结束
         mov ch,ah     ;颜色放在ch中
         mov es:[bx],cx;放于显示缓存区
         add bx,2
         inc si        ;计数增加
         jmp short s   ;跳转
      ok:ret
code ends
end start
abob
[第1楼]   [ 回复时间:2010-01-26 11:36 ]   [引用]   [回复]   [ top ] 
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
看到程序中的注释就知道博主的思路很清晰 ^_^
qiangzi
[第2楼]   [ 回复时间:2010-01-27 09:33 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:6
注册日期:2010-01-07 10:37
此贴由 贴主 于 [ 2010-01-27 09:33 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(abob):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved