王爽汇编语言实验十
實驗十 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?
轉載于:https://www.cnblogs.com/linyuzhaozhao/p/4172792.html
總結
- 上一篇: DMZ的原理与应用
- 下一篇: 2-1 nodejs和npm的安装和环境