王爽<汇编语言>实验十
实验十 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