|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:codesg
data segment
db 10 dup(0)
data ends
codesg segment
start:
mov ax,12666
mov bx,data
mov ds,bx; 数据段
mov si,0
mov bx,0ah
mov cx,ax;通过ax是否为零来判断数字 是否转换完
call dtoc ;将数字转换为10进制
mov dh,8
mov dl,3
mov cl,2
call show_str ;放入显存
mov ax,4c00h
int 21h
dtoc:
div word ptr [bx];除以10
mov [si],dl;余数放入 数据段
mov dx,0 ;清空余数
mov cx,ax ;判断是否为0
jcxz ok
inc si ;数据段下一个位置
jmp short dtoc ;循环
ok:ret;为零结束
show_str:
mov al,2
mul dl
sub al,2
mov dl,al;dl 里存放列偏移
mov al,0a0h
dec dh
mul dh ;al存放行偏移
add al,dl;ax存放 偏移
mov di,ax;di 存放显存偏移
mov dx,cx;dx 存放字体样式
mov cx,5;循环次数
mov ax,0b800h
mov es,ax;显存
s:
mov al,ds:[si] ;将数据拿出
add al,30h ;加30h
mov es:[di],al ;放入显存
mov es:[di+1],dl ;放入字体样式
add di,2 ;偏移加2
dec si ;数据下一个
loop s
ret
codesg ends
end start
debug 的时候可以结束 但没显示12666
直接运行会卡住
求大神解答
本帖最后由 xieglt 于 2020-10-12 10:11 编辑 assume cs:codesg
data segment
db 10 dup(0)
data ends
codesg segment
start:
mov ax,12666
mov bx,data
mov ds,bx ; 数据段
;12666先存个位的6,最后存万位的1,因此从后向前处理
mov si,10
MOV [SI],36 ;DOS输出结束符号
mov bx,0ah
call dtoc ;将数字转换为10进制
;调用DOS 9号功能输出字符串
mov ah,9
mov dx,si
int 21h ;
mov ax,4c00h
int 21h
dtoc:
dec si
;除法 dx:ax / bx 商进AX,余数进DX
xor dx,dx
div bx
;10进制数转换成ASCII码才能输出
add dl,30H
mov [si],dl ;余数放入 数据段
test ax,ax
jz ok
jmp short dtoc ;循环
ok:ret ;为零结束
codesg ends
end start
|
|