8086汇编(31)数值显示

2019-04-04  本文已影响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              
上一篇下一篇

猜你喜欢

热点阅读