鱼C论坛

 找回密码
 立即注册
查看: 1473|回复: 1

做课程设计一之前实验一下显示,可是出错【自己解决了】

[复制链接]
发表于 2014-4-14 23:36:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 ck329054222 于 2014-4-15 17:18 编辑

我的问题是。下面的代码运行之后,只显示我设置的双字的后6位,第一位的1怎么也不显示。。。求大神找出问题所在。。
assume cs:code
data segment
db 10 dup (0)
data ends

code segment
start: mov ax,9f0ah
mov dx,0fh
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 si ;转换为ASCII码并存入数据段
push ax
push cx
push dx

s1:
mov cx,10
call divdw
jcxz kk

add cx,30H
inc si
push cx

jmp short s1 ;每次取余数转换为ASCII码

kk:
add cx,30h
push cx
inc si;最后一个1除以10就跳到这里了,si并没有增加,最后一位1也不在栈里故补偿
mov cx,si ;设置循环次数
mov si,0

s2:
pop dx
mov ds:[si],dx
inc si
loop s2 ;将ASCII码存入内存

pop dx
pop cx 
pop ax
pop si
ret

show_str:push dx ;显示数据段内的字符
push cx
push bx
push ax

mov ax,0b800h
mov es,ax

mov al,0a0h
mul dh 
mov bx,ax;ax中为第八行首字节的偏移地址

mov al,2
mul dl
add bx,ax;显存第一个字母的偏移地址

mov ah,cl
mov ch,0
s:
mov cl,ds:[si]
jcxz ok
mov al,cl ;字符放入低八位
mov es:[bx],ax
inc si
add bx,2

jmp short s
ok: pop ax
pop bx
pop cx
pop dx
ret

divdw: ;双字除法
push ax
mov ax,dx;将高16位装入低16位
mov dx,0;装换后,不会产生溢出
div cx;高16位产生高位余数dx,商ax为需要返回的值余数dx
mov bx,ax
pop ax;还原低16位
div cx;ax即为所需返回的商
mov cx,dx;判断最后余是否为0。cx=0,jcxz跳转
mov dx,bx
ret
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-15 17:12:27 | 显示全部楼层
本帖最后由 ck329054222 于 2014-4-15 17:17 编辑

还是自己解决了。。。关键是数字中间有个0。。
在29到30行之间加上
mov bx,cx  
mov cx,ax
把39到40行改成
add bx,30h
push bx
把32到34行改成
add bx,30H
inc si
push bx

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-30 22:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表