马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
代码如下:assume cs:code, ds:data, ss:stack
data segment
db 10 dup(0);存放处理好的十进制数据
data ends
stack segment
dw 16 dup(0)
stack ends
code segment
start: mov ax, 12666
mov bx, data
mov ds, bx
mov bx, stack
mov ss, bx
mov sp, 32
mov si, 0
call dtoc
mov dh, 8
mov dl, 3
mov cl, 2
call show_str
dtoc: push ax
push bx
push cx
push dx
push si
mov bx, 0;用于分解时计数,表述位数
fenjie:mov cx, 10
mov dx, 0
div cx
mov cx, ax
jcxz s2 ;商为0时停止分解
add dx, 30H; 对应0~9的ASCII码
push dx ;余数压入栈中暂存
inc bx
jmp short fenjie
s2: add dx, 30H
push dx
inc bx
mov si, 0
mov cx, bx; 将栈中暂存的数据转移到数据段中
s3: pop ax
mov [si], al
inc si
loop s3
pop si
pop dx
pop cx
pop bx
pop ax
ret
show_str: push cx
push si
mov ax, 0b800H
mov es, ax
mov ax, 160
mul dh
mov bx, ax
mov ax, 2
mul dl
add bx, ax ;定位显示的初始位置
mov al, cl ;用al来存放属性,cl用来判断
mov ch, 0
mov di, 0 ;指向显存
s: mov cl, ds:[si]
jcxz ok ;判断cx是否为0,不为0则继续执行,为0则跳转
mov es:[bx+di], cl ;存放ASCII码
mov es:[bx+di+1], al;存放属性
inc si;指向要显示的下一个字母
add di, 2
jmp short s
ok: pop si
pop cx
ret
code ends
end start
mov dh, 8
mov dl, 3
mov cl, 2
call show_str
mov ax, 4c00h
int 21h
|