|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 liuhui88126 于 2011-7-1 16:49 编辑
- ;>>>>编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出>>>>>>>>>>>>>>>>>>>>>>>>
- assume cs:code
- data segment
- db 10 dup (0)
- data ends
- code segment
- start:mov ax,12666
- mov bx,data
- mov ds,bx
- mov si,0
- call dtoc
- mov dh,8
- mov dl,3
- mov cl,2
- call show_str
- dtoc:mov si,1 ;第一个内存单元下面有用,所以设置从第二个开始存放数据
-
- ck: mov bx,10 ;如果用8位除数的话,结果为1266,AL放不下,导致除法溢出,所以要用16位除数
- mov dx,0 ;高16位被除数清空
- div bx ;除法
- mov bl,dl ;余数放入BL
- mov cx,bx ;判断余数是否为0
- jcxz ok ;跳转
- mov byte ptr ds:[si],dl ;不为0的话就存
- inc si
- loop ck
- ok:ret
-
- show_str:push cx ;保护CL的值
- mov ax,0b800h
- mov es,ax
- mov di,0
- mov al,160 ;数据显示区
- mul dh
- mov bx,ax ;数据显示
- cd:mov cl,ds:[si] ;把当前数据段中的数据拿出比较,是否为0
- mov ch,0
- jcxz exit ;为0跳
- add cl,30h ;数据+30,转换12666 ASCII码
- mov al,cl ;数据放入AL
- pop cx ;取出颜色值
- mov ah,cl ;放入颜色值
- mov word ptr es:6[bx][di],ax ;显示
- add di,2
- dec si ;逆序一个一个比较,到了第一个的时候,数据是为0的,就说明结束了,这就是为什么上面要mov si,1的原因了。
- push cx
- jmp short cd
- exit:mov ax,4c00h
- int 21h
- code ends
- end start
- ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>经测试,没问题>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
复制代码
|
评分
-
查看全部评分
|