马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 项羽姓秦 于 2020-4-8 11:33 编辑
在我学习第十五章外中断做例子实践的时候遇到了一个问题;
题目为:在屏幕依次显示‘a’~‘z’字符串;
然而我根据书中的代码进行编译,却发现结果与书中有所不同;(附代码和结果)
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,0b800h
mov es,ax
mov ah,'a'
s: mov es:[160*12+40*2],ah
call delay
inc ah
cmp ah,'z'
jna s
mov ax,4c00h
int 21h
delay:
push ax
push dx
mov dx,1000h
mov ax,0
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
code ends
end start
结果却只显示字符串‘a’;让我纠结百般啊!!
后来也渗入探究,慢慢排查的办法,终于让我发现了问题的存在;(附代码和结果)
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,0b800h
mov es,ax
mov ah,'a'
s: mov es:[160*12+40*2],ah
call delay
inc ah
cmp ah,'z'
jna s
mov ax,4c00h
int 21h
delay:
push ax
push dx
mov dx,5h
mov ax,0
s1: sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
code ends
end start
结果终于与书中所说一致;
不同之处在于那个延缓的时间,就是书中所说的1000万次循环。mov dx,100h
我改为:mov dx,5h
最终正常运行;
但是我还是有一事不明白的,那就是为什么书中所处理的是1000h,而我处理的只需要5h就可以了?
请大神分析一二,感谢!
|