梦想飞翔的蜗牛 发表于 2020-2-13 22:38:39

数值显示

assume cs:code,ds:data

data segment
db 10 dup (0)
data ends

code segment
start:mov ax,12666                  ;将要显示的数字12666放入ax中
      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:push ax
   push bx
   push si
   
   mov bl,10                     ;将bl赋值为10,作为除数
   mov bh,0                        
   mov cx,5

   s:div bx                        ;除法
   add dx,30h                      ;将dx中的余数加30h变为字符
   push dx                         ;将dx中的数值入栈
   sub dx,dx                     ;将dx中的数据清零,不影响下一次除法
   loop s
   
   mov cx,5
   mov si,0
                        
s0:pop dx                           
   mov ds:,dx
   inc si
   loop s0
   
   pop si
   pop bx
   pop ax
   ret

show_str:         
         mov al,0a0h             ;每一行是0a0h个字符
         dec dh                  ;第一行是000-09f,故需减一行   
         mul dh                  ;乘以dh就是第8行
         mov bx,ax               
         
         mov al,02h               ;每一列是02h
         mul dl                   ;第3列
         sub ax,2               
         add bx,ax                ;将首个字符的位置保存在bx中
                  
                     
         mov ax,0b800h             ;找到显存地址
         mov es,ax
         mov di,0            
         
         mov dl,cl                   ;将cl内容转存入dl,避免与循环cx冲突
               
         mov cx,5                     ;设置循环次数
      
      s1:mov al,               ;将字符存入寄存器al
      
         mov es:,al
         mov es:.1,dl
         inc si
         add di,2
         loop s1
      
               
         ret
      
   
code ends
end start
      
求大佬指点为何显示不了

yjcoke 发表于 2020-2-14 10:16:10

5个笑脸吗?

梦想飞翔的蜗牛 发表于 2020-2-14 20:45:13

yjcoke 发表于 2020-2-14 10:16
5个笑脸吗?

我是什么都没显示,求指点

yjcoke 发表于 2020-2-15 09:34:13

梦想飞翔的蜗牛 发表于 2020-2-14 20:45
我是什么都没显示,求指点

老弟,我就是用你的代码呀,你自己看看是不是你在64位下用DOSMAX的原因
页: [1]
查看完整版本: 数值显示