. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  数值显示  编译通过  欢迎各位朋友交流  [待解决] 回复[ 0次 ]   点击[ 275次 ]  
hzk123
[帖 主]   [ 发表时间:2010-11-01 16:49 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-03-26 18:29
assume cs:code
data segment
db 10 dup (0)
data ends
stack segment     ;用来中转数字字符
db 16 dup (0)
stack ends
code segment
start: mov ax,12666
       mov bx,data
       mov ds,bx
       mov si,0
       call dtoc
       mov dh,8
       mov dl,3
       mov cl,2
       call show_str
       mov ax,4c00h
       int 21h
dtoc:mov bx,stack
     mov ss,bx
     mov bp,0
     mov bl,10
   s:call divdw
     add dl,30h
     mov byte ptr ss:[bp],dl   ;传递字符
     inc bp
     mov cx,ax
     jcxz ok
     jmp short s

  ok:
     mov cx,bp           ;设置循环次数
     dec bp              ;因为上面的jcxz之前,还自加了一次,这使得ss:[bp]
                           指向第一个字符‘1’
   s1:mov al,ss:[bp]     ;循环传送字符到ds:[si]中
      mov  ds:[si],al
      dec bp
      inc si
      loop s1
      
      ret

divdw:mov dl,al       ;16位除法溢出处理
      mov al,ah
      mov ah,0
      div bl
      mov dh,al
      mov al,dl
      div bl
      mov dl,ah       ;余数在dl中
      mov ah,dh
      ret

show_str:  mov ax,0b800h     ;显示字符串
           mov es,ax
           mov al,160
           mul dh
          
           mov bx,ax
           mov al,2
           mul dl
          
           add ax,bx
           mov bp,ax
           mov di,0
           mov si,0
      s2:  mov al,ds:[si]
           mov es:[bp+di],al
           mov cl,al
           mov ch,0
           jcxz ok1 
           mov cl,2
           mov es:[bp+di+1],cl   
           inc si
           add di,2
           jmp short s2
      ok1:ret
code ends
end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved