王爽 汇编 实验15
assume cs:codestack segment
db 128 dup(0)
stack ends
data segment
dw 0,0
data ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov ax,0
mov es,ax ; 保存原来int9的端口地址
push es:
pop ds:
push es:
pop ds:
mov word ptr es:,offset int9 ;放入现在的端口
mov es:,cs
mov ax,0b800h
mov es,ax
mov di,160*12+50
mov ax,'a'
s:
mov es:,ax
call sleep
add ax,1
cmp ax,'z'
jna s
mov ax,4c00h
int 21h
sleep:
push ax
push bx
mov ax,0
mov bx,10h
s0: sub ax,1
sbb bx,0
cmp ax,0
ja s0
cmp bx,0
ja s0
pop bx
pop ax
ret
int9:
push ax
push bx
push es
in al,60h
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds: ;对int指令进行模拟,调用原来的int9
cmp al,1
jne int9ret
inc byte ptr es:
int9ret:
pop es
pop bx
pop ax
iret
code ends
end start
为什么 我这样 在sleep 那里debug 可以过 过了后就卡住了?
求助求助{:10_254:} 找到问题了 这里的ax 该为8位的就行了 ah
mov ax,'a'
s:
mov es:,ax
call sleep
add ax,1
cmp ax,'z'
jna s
下面的inc byte ptr es: 应该为 es: 才会变颜色 ISHEEPI 发表于 2020-10-19 08:17
找到问题了 这里的ax 该为8位的就行了 ah
mov ax,'a'
s:
如果已解决,请把帖子类型改为已经解决 本帖最后由 ISHEEPI 于 2020-10-19 18:39 编辑
巴巴鲁 发表于 2020-10-19 08:25
如果已解决,请把帖子类型改为已经解决
在哪里改{:10_257:}
还有个小问题
为什么这里要call?
call dword ptr ds: ;对int指令进行模拟,调用原来的int9
要去调用 真正的int9? ISHEEPI 发表于 2020-10-19 18:34
在哪里改
还有个小问题
为什么这里要call?
编辑自己的帖子,把主题改为已经解决
我汇编才学到第三章{:10_266:} 巴巴鲁 发表于 2020-10-19 19:09
编辑自己的帖子,把主题改为已经解决
我汇编才学到第三章
好的好的
ISHEEPI 发表于 2020-10-19 18:34
在哪里改
还有个小问题
为什么这里要call?
个人认为 这个应该是为了 处理按下的键不为ESC键时的情况
页:
[1]