|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
;程序功能是将12666这个十进制数转化成前景色是绿色的字符串'12666'输出到dos窗口
assume cs:codesg
data segment
db 16 dup (0)
data ends
codesg segment
start:mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc ;转到子程序,把原始数除10取余数,余数加30H就是所求字符串的其中一个字符,
;一直除到商为0,得到一个字符串,放到data段中
mov dh,8
mov dl,3
mov cl,2
call show_str ;转到子程序,将data段的字符串输出到屏幕
mov ax,4c00h ;退出程序
int 21h
show_str:
mov ax,0B800h
mov es,ax
mov al,160
mul dh
mov di,0
add di,ax
add dl,dl
mov al,dl
mov ah,0
add di,ax
mov cx,10h
s:
mov al,[si]
mov ah,00000010B
mov es:[di],ax
inc si
add di,2
loop s
ret
dtoc:
push bx ;保存各寄存器的值
push dx
push ds
push si
s0:
mov dx,0 ;这里不把dx清零会报错,为什么? 报这个错:Divide overflow??????-------------这是我的程序的问题:sad
mov cx,10
div cx
mov cx,ax
add dx,30h
mov ds:[si],dl
inc si
jcxz ok
jmp s0
ok: pop si
pop ds
pop dx
pop bx
ret
codesg ends
end start
|
|