通过中断int21h显示有点问题~望牛人指导一下

lovesqi 2012-12-24 11:21:25
代码功能:调用cmos中的时间,然后按格式显示.我使用了int10h 和 int21h 的中断例程来显示发现有点问题
代码如下:
程序运行后在内存中处理数据后如下

但是运行时候调用int 21h ah=9的显示字符串以$结尾的中断例程效果如下,不知道是为什么,请牛人帮忙分析一下



assume cs:code,ds:data
data segment
db 18 dup (0)
data ends
code segment
read: db 9,8,7,4,2,0
start: mov ax,cs
mov ds,ax
mov ax,data
mov es,ax
mov di,3
mov bx,offset read
mov cx,6
ok: push cx
mov al,[bx] ;端口号
out 70h,al ;向70端口写入地址
in al,71h ;向71端口读入数据
mov ah,al
mov cl,4 ;移4位
shr ah,cl ;获得十位数码
and al,00001111b ;获得个位数码
add al,30h ;转换个位为ASCII码
add ah,30h ;转换十位为ASCII码
mov es:[si],ah ;存放高位
mov es:[si+1],al ;存放低位
add si,3
inc bx
pop cx
loop ok
mov byte ptr es:[si-1],'$' ;存放结尾符号
mov byte ptr es:[2],'/' ;添加符号
mov byte ptr es:[5],'/'
mov byte ptr es:[11],':'
mov byte ptr es:[14],':'


;以下为显示
mov ah,2 ;置光标
mov bh,0 ;第0页
mov dh,10 ;行数
mov dl,12 ;列数
int 10h
mov ax,data
mov ds,ax
mov dx,0 ;ds:ax 指向字符串的首地址 data:0
mov ah,9 ;在光标位置显示字符串以$结尾
int 21h
mov ax,4c00h
int 21h
code ends
end start
...全文
180 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovesqi 2012-12-24
  • 打赏
  • 举报
回复
引用 1 楼 zara 的回复:
debug 加载之运行正常,说明有寄存器没有进行适当的初始化,仔细看看,si 没有置值就直接使用了。
谢谢提醒,有点马虎了.十分感谢
zara 2012-12-24
  • 打赏
  • 举报
回复
debug 加载之运行正常,说明有寄存器没有进行适当的初始化,仔细看看,si 没有置值就直接使用了。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧