王爽<汇编语言>实验十

实验十 3.数值显示(以下程序附带测试程序)

  1 ;名称: dtoc
  2 ;功能: 将dword型数据转变为表示十进制数的字符串,字符串以0为结尾
  3 ;参数: (ax)=dword型数据低字
  4 ;               (dx)=dword型数据高字
  5 ;      ds:si指向字符串的首地址
  6 ;返回: 无
  7 assume cs:code
  8 data segment
  9           haha dd 4294967295
 10           tata dd 16 dup(?)
 11 data ends  
 12 code segment
 13 main:
 14     mov ax,data
 15     mov ds,ax
 16     mov si,offset haha
 17     mov ax,[si]
 18     add si,2
 19     mov dx,[si]
 20     mov si,offset tata
 21     call dtoc
 22     mov dh,12
 23     mov dl,30
 24     mov cl,1
 25     mov si,offset tata
 26     call show_str
 27     mov ax,4c00h
 28     int 21h
 29          
 30 dtoc:
 31     push bx
 32     push cx
 33     push si
 34     mov  bx,0      ;bx 用于记录最终的位数
 35 r:    
 36     mov cx,10
 37     call divdw
 38     push cx                    ;计算余数,商,余数保存入栈
 39     inc  bx        ;位数增加
 40     
 41     cmp dx,0
 42     jnz next
 43     cmp ax,0                   
 44     jz  ok                    ;商为0,则跳出r循环
 45 next:
 46     jmp r
 47 ok: mov cx,bx
 48 s:  pop ax
 49     add al,30h
 50     mov [si],al
 51     inc si
 52     loop s
 53     mov byte ptr [si],0
 54     pop cx
 55     pop bx
 56     pop si
 57     ret
 58                         
 59 divdw:
 60     push bx 
 61     mov bx,ax
 62     mov ax,dx
 63     mov dx,0
 64     div cx
 65     push ax   ;将int(H/N)入栈
 66     mov ax,bx
 67     div cx    ;[rem(H/N)*65536+L]/N结果商放在dx中,余数放在ax中
 68     mov cx,dx
 69     pop dx
 70     pop bx
 71     ret
 72 
 73 show_str:
 74     push cx
 75     push bx
 76     push ax
 77     push dx
 78     push ds
 79     push es
 80     push di     ;将要使用到的寄存器入栈
 81 
 82     mov ax,0b800h
 83     mov es,ax
 84     mov al,160
 85     mul dh
 86     mov bx,ax    ;基址赋值
 87     mov al,2
 88     mul dl
 89     mov di,ax    ;变址赋值
 90                   
 91 read:         
 92     mov ch,[si]
 93     cmp ch,0        
 94     jz  ok2      ;判断是否遇到字符串尾端
 95                   
 96     mov ah,cl 
 97     mov al,[si]
 98     mov es:[bx+di],ax
 99     inc di
100     inc di       ;指向下一个屏幕显示位置
101     inc si               ;指向下一个字符
102     jmp read
103 ok2:    
104     pop di
105     pop es
106     pop ds
107     pop dx
108     pop ax
109     pop bx
110     pop cx               ;使用到的寄存器出栈
111     ret
112          
113 code ends
114           end main

 

posted @ 2014-12-18 21:55  预兆ZeD  阅读(342)  评论(0编辑  收藏  举报