| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 chunhuaqiuyue 于 2021-12-26 22:33 编辑  
 
assume cs:code,ds:data 
 
data segment 
        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 ch,2 
        call show_str 
 
        mov ax,4c00h 
        int 21h 
 
dtoc:  
        mov di,10 
s0: 
        mov dx,0 
        div di    ;商存放在ax中,余数存放在dx中 
        mov cx,ax        ;商存放在cx中,用来判断除法结束 
        add dx,30h 
        mov [si],dl ;将ASCII码保存,注意与数据对应位置是逆序排放 
        inc si 
        jcxz ok 
        jmp short s0 
 
show_str: 
        mov ax,0b800h ; set to screen start position 
        mov es,ax 
 
        mov bl,dl  ; 解决 后面 30行 mul 后 ,bx会因为保存乘法高位而被置0的问题; 所以先把值存入bl 
        mov bh,0 
        mov dl,0 
        mov dl,dh 
        mov dh,0 
        mov ax,160 ; 160 bytes per row; 因为一行80个列,每一列 是 16位组成,低8位代表字符 高8位代表颜色属性 
        mul dx 
 
        add bx,bx ; mul 2 ; 原因和29行一样 
 
        add ax,bx 
        mov bx,ax 
        mov ax,cx 
        mov cx,0 
 
show_str_s: 
        mov al,ds:[si] 
        mov cx,si 
        mov es:[bx],ax 
        jcxz ok 
        sub si,1 
        add bx,2 
        jmp short show_str_s 
 
ok:        ret 
 
code ends 
end start |   
 
 
 
 |