• 数值显示


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

    assume cs:code, ds:data
    
    data segment
     db 10 dup(0)
    data ends
    
    code segment
     start: 
       mov ax, 12666d
       
       mov bx, data
       mov ds, bx
       mov si, 0
       
       call dtoc   ;实现将word型整数转化为ASCII字符串
    
       mov dh, 8     ;初始化打印位置
       mov dl, 3
       mov cl, 0fah  ;打印属性
       
       call show_str ;开始打印
       
       mov ax, 4c00h
       int 21h
       
     dtoc: 
       push dx
       push cx
       push bx
       push ax
       push si
       
       mov bx, 0  ;bx记录 该数 有多少位 用于循环多少次 将 栈中每位的ASCII码存放到指定内存中
       
      s1: 
       mov cx, 10d     ;d表示十进制
       mov dx, 0
       
       div cx
       mov cx, ax  ;得到的商赋值给cx, 用于jcxz判断是否为0
       
       jcxz s2     ;当商为0跳到s2
       
       add dx, 30h  ;余数+30h = 该余数的ASCII码
       push dx
       
       inc bx
       
       jmp short s1
       
      s2: 
       add dx, 30h  ;当商为0的时候,余数为个位
       push dx
       
       inc bx
       
       mov cx, bx  ;bx记录了有多少位
       mov si, 0
       
      s3: ;实现将栈中的数据依次出栈放到指定内存中   
       pop ax
       
       mov [si], al
       inc si
       
       loop s3
       
      ok_dtoc:
       pop si
       pop ax
       pop bx
       pop cx
       pop dx
     
       ret
       
     show_str:
       push dx
       push cx
       push bx
       push ax
       push si
       
       mov al, 0A0h ;160个字节==0A0h
       
       dec dh ;dh=dh-1   7=8-1
       mul dh ;(n-1)*0A0h  7*160=字节
       
       mov bx, ax ;偏移位置【7行】
       
       mov al, 2 ;每个字符占两个字节
       mul dl ;(ax)=(al)*(dl) = 2*3=6
       sub ax, 2 ;(ax)=(ax)-2 = 6-2 = 4
       
       add bx, ax ; 7行+4
       
       mov ax, 0B800h ;显存开始地址
       mov es, ax
       
       mov di, 0
       mov al, cl 
       mov ch, 0
       
      s: 
       mov cl, ds:[si]
       jcxz ok_show_str
       
       mov es:[bx+di], cl ;字符
       mov es:[bx+di+1], al ;颜色属性
       
       inc si
       
       add di, 2 ;一个字节存放字符 另一个字节存放属性
       jmp short s
       
      ok_show_str: 
       pop si
       pop ax
       pop bx
       pop cx
       pop dx
       
       ret
    code ends
    end start


  • 相关阅读:
    luogu P3368 【模板】树状数组 2
    dp
    vijos 羽毛
    luogu tyvj 纪念品分组
    codevs 1259 最大正方形子矩阵 WD
    python 序列化之pickle模块 json模块
    python 类的进阶
    python 面向对象与类的基本知识
    python 异常处理
    python time模块 sys模块 collections模块 random模块 os模块 序列化 datetime模块
  • 原文地址:https://www.cnblogs.com/qintangtao/p/2860727.html
Copyright © 2020-2023  润新知