首页 > 代码库 > 王爽<汇编语言>实验十

王爽<汇编语言>实验十

实验十 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 di100     inc di       ;指向下一个屏幕显示位置101     inc si               ;指向下一个字符102     jmp read103 ok2:    104     pop di105     pop es106     pop ds107     pop dx108     pop ax109     pop bx110     pop cx               ;使用到的寄存器出栈111     ret112          113 code ends114           end main

 

王爽<汇编语言>实验十