assume cs:code, ds:data, ss:stack data segment db 10 dup (0) data ends stack segment db 16 dup (0) stack ends code segment start: mov ax, 123 mov bx, data mov ds, bx mov bx, stack mov ss, bx mov sp, 16 call dtoc mov dh, 8 mov dl, 3 mov cl, 2 call show_str mov ax, 4c00H int 21H dtoc: ;start of function dtoc push ax push bx push cx push dx push si push di mov si, 0 mov dx, 0 mov bx, 10 div bx ;div指令,bx作为16位除数,dx和ax作为被除数,商保存在ax中,余数保存在dx中 mov cx, ax ;商为零作为判断条件 L: push dx inc si jcxz s1 mov dx, 0 div bx mov cx, ax jmp L s1: mov di, 0 s3: mov cx, si jcxz s2 pop ax add al, 30H mov ds:[di], al inc di dec si loop s3 s2: mov byte ptr ds:[di], 0 ;在数字字符串的结尾添加0,因为在show_str中要求字符串以0为结尾 pop di pop si pop dx pop cx pop bx pop ax ret ; end of function dtoc show_str: push ax push bx push cx push dx push es mov ax, 0b800h mov es, ax ;es保存显存所在段的起始地址 mov al, dh mov ch, 0A0H mul ch add dl, dl mov dh, 0 add ax, dx mov bx, ax ;根据给出的行、列参数,计算字符在显存中的位置 mov al, cl ;字体颜色属性,保存在al中,因为转移指令jcxz,需要用到cl寄存器 s0: mov ch, 0 mov cl, ds:[si] jcxz s mov es:[bx], cl mov es:[bx+1], al inc si add bx, 2 jmp s0 s: pop es pop dx pop cx pop bx pop ax ret code ends end start