数值显示
assume cs:code,ds:datadata segment
db 10 dup (0)
data ends
code segment
start:mov ax,12666 ;将要显示的数字12666放入ax中
mov bx,data ;关联数据段
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
call show_str
mov ax,4c00h
int 21h
dtoc:push ax
push bx
push si
mov bl,10 ;将bl赋值为10,作为除数
mov bh,0
mov cx,5
s:div bx ;除法
add dx,30h ;将dx中的余数加30h变为字符
push dx ;将dx中的数值入栈
sub dx,dx ;将dx中的数据清零,不影响下一次除法
loop s
mov cx,5
mov si,0
s0:pop dx
mov ds:,dx
inc si
loop s0
pop si
pop bx
pop ax
ret
show_str:
mov al,0a0h ;每一行是0a0h个字符
dec dh ;第一行是000-09f,故需减一行
mul dh ;乘以dh就是第8行
mov bx,ax
mov al,02h ;每一列是02h
mul dl ;第3列
sub ax,2
add bx,ax ;将首个字符的位置保存在bx中
mov ax,0b800h ;找到显存地址
mov es,ax
mov di,0
mov dl,cl ;将cl内容转存入dl,避免与循环cx冲突
mov cx,5 ;设置循环次数
s1:mov al, ;将字符存入寄存器al
mov es:,al
mov es:.1,dl
inc si
add di,2
loop s1
ret
code ends
end start
求大佬指点为何显示不了 5个笑脸吗?
yjcoke 发表于 2020-2-14 10:16
5个笑脸吗?
我是什么都没显示,求指点 梦想飞翔的蜗牛 发表于 2020-2-14 20:45
我是什么都没显示,求指点
老弟,我就是用你的代码呀,你自己看看是不是你在64位下用DOSMAX的原因
页:
[1]