王爽《組合語言》實驗10:編寫子程式dtoc 解答
阿新 • • 發佈:2019-01-23
assume cs:code data segment ;儲存轉換後的ASCII db 10 dup(0) data ends code segment start: mov ax,12666 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 di push cx push dx push si mov di,0 ;記錄入棧多少次,就是有多少位數 s1: mov cx,10d ;除10 mov dx,0 div cx mov cx,ax ;如果商為0,那麼求值完成 jcxz s2 add dx,30h push dx ;把求得的ACSII入棧 inc di jmp short s1 s2: add dx,30h ;最後一次也要記錄 push dx inc di mov cx,di s3: pop ax mov [si],al ;ACSII碼只佔用了低8位 inc si loop s3 pop si pop dx pop cx pop di pop ax ret show_str: push cx ;儲存用到的暫存器 push si push es push di push bx mov ax,0b800h mov es,ax mov al,0a0h ;一行的總列數160位元組 dec dh ;行號減1,因為是從0開始的 mul dh ;計算行開始偏移地址 mov bx,ax mov al,2 mul dl ;計算列 sub ax,2 ;列也是從0開始,而且一個字元佔兩個位元組 add bx,ax ;求出開始位置 mov di,0 mov al,cl mov ch,0 ;高8位為0 s: mov cl,ds:[si] ;判斷是否到了字元結束 jcxz ok mov es:[bx+di],cl mov es:[bx+di+1],al inc si add di,2 jmp short s ok: pop bx pop di pop es pop si pop cx ret code ends end start