21,500
社区成员
发帖
与我相关
我的任务
分享
assume cs:code,ss:stack
data segment
db 10 dup (0)
data ends
stack segment
dw 10 dup (0)
stack ends
code segment
start:mov ax,12666 ;要显示的数字
mov bx,data
mov ds,bx;取得存放数据的地址
mov bx,stack
mov ss,bx
mov sp,14h ;指向分配的栈
mov si,0
mov di,0
call dtoc ;调用数字转换子程序
mov dh,8 ;显示字符串的位置和样式
mov dl,3
mov cl,2
call show_str
mov ax,4c00h ;0019
int 21h
dtoc:mov bx,10 ;bx作为除数
rem:mov dx,0 ;dx每次要清空,否则会影响结果
div bx
mov cx,ax
push dx ;余数入栈,结果是得出该数字的每一位
inc si ;计算有多少个字
jcxz exit
jmp short rem
exit:mov cx,si ;取得循环数
p:pop bx ;将数取出
add bl,30H ;转换了数字对应的字符
mov [di],bl ;字符赋到相应地址
inc di
loop p
ret ;返回到call下一地址
show_str:mov si,0
dec dh
mov al,0A0H
mul dh ;乘法
dec dl ;先减1才能正确指定位置
mov dh,0
add ax,dx ;得到文字显示地址
mov bp,ax ;偏移地址送入bp
mov ax,0b800h
mov es,ax ;将显示缓冲区段地址送入es
mov bx,0
mov di,0
s:push cx ;将cl中的样式入栈
mov ah,cl ;取得样式 高位
mov al,[bx+di] ;字符串一个个字符赋值 低位
mov es:[bp+si],ax ;字符和样式送入显示缓冲区
mov ch,0
mov cl,al ;将字符放到CX中,遇到0则跳出循环
inc di
add si,2
jcxz back
pop cx ;将样式取出
jmp short s
back:pop cx
ret
code ends
end start