当前位置: 代码迷 >> 汇编语言 >> 通过中断int21h显示有点有关问题~望牛人指导一上
  详细解决方案

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

热度:312   发布时间:2013-02-26 00:00:00.0
通过中断int21h显示有点问题~望牛人指导一下
本帖最后由 lovesqi 于 2012-12-24 11:23:36 编辑
代码功能:调用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

------解决方案--------------------------------------------------------
debug 加载之运行正常,说明有寄存器没有进行适当的初始化,仔细看看,si 没有置值就直接使用了。
  相关解决方案