|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
|