汇编网首页登录博客注册
huangbeidu的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
友情链接

[2009-04-26 16:28] 实验10.3 数值显示

算法还不成熟 仅限显示5位数 但是耗费了我许多精力调试 先发上来
 
assume cs:code,ds:data,ss:stack
stack segment
dw 16 dup (0)
stack ends
data segment
db 10 dup (0)
data ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,32
mov ax,12666;待显示的数字
mov bx,data
mov ds,bx
mov si,0
call dtoc


mov dh,8    ;行
mov dl,3    ;列
mov ch,2    ;颜色属性
call show_str

mov ax,4c00h
int 21h

;***************
show_str:
push ax
push bx
push cx
push dx
push di
push si
mov ah,dh
mov al,160   ;一行160个Byte
mul ah
add dl,dl
mov dh,0
add ax,dx
mov bx,ax    ;bx放第一个字符的偏移量
mov ax,0b800h
mov es,ax
mov di,0
mov dh,ch
s:
mov ch,dh
mov cl,[si]        
mov es:[bx][di],cx ;写入显存
inc si
add di,2
mov ch,0
jcxz so
jmp s
so:
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
;***************

;***************
dtoc:
push di
push si
push dx
push ax
push bx   ;保存相关寄存器

mov bx,10
s1:
mov dx,0
div bx  ;除以10求余数
add dl,30h   ;十进制数码字符对应的ASCII码=十进制数码  值+30H
mov 4[si],dl   ;word型数据最高五位数 ??????
mov cx,ax
jcxz ok
dec si  ;???????????????
jmp s1

ok:
pop bx
pop ax
pop dx
pop si
pop di

ret
;*************
code ends
end start 

将有???的两行改为mov [si],dl和inc si可以显示0~65535但前提是把待显示的数字倒过来写 -_-#……
评论次数(4)  |  浏览次数(575)  |  类型(汇编作业) |  收藏此文  | 

[  huangbeidu   发表于  2009-04-26 19:35  ]

失误 倒过来写的话尾数不能为0 -_-!!

[  huangbeidu   发表于  2009-04-26 22:19  ]

“剽窃”了他人的算法 感觉不错 化为己用
现dtoc子程序更新如下:
;@@@@@@@@@@@@@@@
dtoc:
push di
push si
push dx
push ax
push bx
push cx   ;保存相关寄存器

mov bx,10
s1:
mov dx,0
div bx  ;除以10求余数
add dl,30h   ;十进制数码字符对应的ASCII码=十进制数码值+30H
push dx
inc si   ;用si来统计循环次数 即数字位数
mov cx,ax
jcxz ok
jmp s1
ok:
mov cx,si
mov si,0
s2:
pop dx
mov [si],dl
inc si
loop s2

pop cx
pop bx
pop ax
pop dx
pop si
pop di
ret
;@@@@@@@@@@@@@@@
以后这种颠来倒去的就用栈了 比mov来mov去的好用多了 更新后用数字1230测试 通过

[  wsrf   发表于  2009-04-27 17:18  ]

先按自己的想法实现,再去参考别人的代码,这样收获会更大。

[  游客   发表于  2009-04-29 10:31  ]

可以参考前面的那个不会溢出的除法处理方式来想想这个程序怎么去支持dx为非0的数据显示,让显示的数据超过5位。

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码