assume cs:code
code segment
s: db 9,8,7,4,2,0
start:
mov ax,cs
mov ds,ax
mov bx,offset s
mov dx,0b800h
mov es,dx
mov si,160*12+2*12
mov cx,6
circle:
push cx
mov al,[bx]
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
pop cx
mov es:[si],ah
mov es:[si+2],al
cmp cx,4
ja sign1
je sign2
jb sign3
sign1:
mov byte ptr es:[si+4],'/'
jmp short ok
sign2:
mov byte ptr es:[si+4],' '
jmp short ok
sign3:
cmp cx,1
je ok
mov byte ptr es:[si+4],':'
jmp short ok
ok:
add si,6
inc bx
loop circle
mov ax,4c00h
int 21h
code ends
end start
- [qingpengchen2011] 我的子程序是没错的,我在想是不是虚拟机的问题 08/08 12:17
- [qingpengchen2011] 嗯~行。我再认真详细看看,谢谢咯 08/08 10:38
- [tomato] 我运行了,不是地址的问题。也没有出现崩溃的现象,不过有的子程序功能好像不太对。子程序书中都有,建议你 08/07 22:07
- [tomato] 还是不行吗?我帮你看一下。 08/07 21:29
- [qingpengchen2011] table等标志的值都是在此安装程序中的偏移地址,所以那些子程序等等的地址都是要重新计算的。这点我倒 08/07 18:10
- [qingpengchen2011] table dw sub0-int7ch+200h,sub1-int7ch+200h,sub2-in 08/07 18:06
- [qingpengchen2011] table dw sub0-int7ch+200h,sub1-int7ch+200h,sub2-in 08/07 18:06
- [tomato] 结果也贴上来晾凉吧。 08/05 23:49
- [tomato] 我看不是死循环的问题,是子程序入口地址错了。告诉你一个解决思路,就是单步跟踪读取子程序地址那个地方, 08/05 23:45
- [tomato] 很有可能是你程序的问题,检查一下是不是死循环了。 08/05 23:41
[ chinatree 发表于 2011-08-03 16:06 ]
跳转用的有些多了,而且add ah,30h
add al,30h直接add ax,3030h好了,能省一个字节,而且也没有看到字符颜色属性
[ qingpengchen2011 发表于 2011-08-04 13:06 ]
嗯。。好的。我再优化一下