美文网首页
8086汇编(31)数值显示

8086汇编(31)数值显示

作者: 迷心迷 | 来源:发表于2019-04-04 17:55 被阅读0次

    数值显示

    编程,将data段中的数据以二进制的形式显示出来。

    子程序描述

    名称:dtoc

    功能:将word型数据转变为表示十进制的字符串,字符串以0为结尾符。

    参数:(ax)=word型数据

          ds:si指向字符串的首地址
    

    返回:无

    应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。在显示时我们调用上面程序中的show_str子程序

    assume    cs:code
    
    data segment
         db  10 dup (0)
    data ends
    
    code  segment
    
    start:        mov ax, 12666
                  mov bx, data
                  mov ds, bx
                  mov si, 0
                  call   dtoc ;将ax的每一位转化为字符串
                  mov dh, 8
                  mov dl, 3
                  mov cl, 2
                  call  show_str ;显示data段的字符串
                  mov ax, 4c00h
                  int 21h
    
    dtoc:         
                   push dx
                   push bx
                   push cx
                   push si
    
                   mov dx, 0             ;做除法的高16位
                   mov bx, 10
     s4:           div bx
                   mov cx, ax                
                   jcxz s5               ;余数为0时函数退出返回
                   add  dx, 30h          ;将余数转换为对应的ASCII值
                   mov  ds:[si], dl      ;除以10的余数存在dl中
                   inc  si
                   mov dx, 0             ;上一次的商作为被除数
                   mov cl, 1             ;保证余数为0时才退出,让cl不为0
                   loop s4
          
    
    s5:            mov ds:[si], dl  ;字符串以0为结尾符
                   mov si, 0
    
                    
                    pop si
                    pop cx
                    pop bx
                    pop dx 
                    ret
    
    
    show_str:
                 push es
                 push ax
                 push bp
                 push di
                 push si
    
                    mov ax, 0b800h
                    mov es, ax          
                    mov al, cl       
    
                    mov  bp, 0
                    mov  ch, 0
                    mov  cl, dh
    s0:             add  bp, 160       
                    loop  s0              ;循环计算行偏移量
    
                    mov  di, 0
                    mov  ch, 0
                    mov  cl, dl
    s1:             add  di,2              
                    loop  s1              ;循环计算列偏移量
    
    s2:             mov  cl,ds:[si]
                    jcxz s3        
                    mov  es:[bp + di],cl  ;字符
                    inc  di
                    mov  es:[bp +di], al  ;颜色
                    inc  di
                    inc  si
                    loop s2
    
    s3:         
                 pop si
                    pop di
                    pop bp
                 pop ax
                 pop es
                 ret
    
    code    ends
    end      start              
    

    相关文章

      网友评论

          本文标题:8086汇编(31)数值显示

          本文链接:https://www.haomeiwen.com/subject/ozmqiqtx.html