鱼C论坛

 找回密码
 立即注册

关于中断的深入学习

已有 229 次阅读2017-6-19 17:10 |个人分类:作业

assume cs:code,ss:stack

stack segment
dw 8 dup(0)
stack ends

code segment 
start:
mov ax,stack
mov ss,ax
mov sp,10h
;----把存放47号中断的地址指向0:200h处----
mov ax,47h*4
mov di,ax
mov ax,0
mov es,ax
mov es:2[di],ax
;mov ax,200h
mov es:[di],word ptr 200h
;----把47号中断程序存入0:200h处----
mov cx,offset int47end - offset int47
mov ax,cs
mov ds,ax
mov si,offset word ptr int47
mov ax,0
mov es,ax
mov di,word ptr 200h
rep movsb
;----显示位置----
mov ax,0b800h
mov es,ax
mov ax,160*11+80
mov di,ax
;----显示80个!----
mov bx,offset prn - offset lprn ;跳转位置,跟add[bp+2],bx配合--bp+2存放的
mov cx,50h ;是ip,当iret时,回跳的距离
prn:
mov es:[di],byte ptr '!'
add di,2
int 47h
lprn:
nop
mov ax,4c00h
int 21h
;----中断实现程序----
int47:
push bp
mov bp,sp
dec cx
jcxz int47i
add [bp+2],bx
int47i:
pop bp
iret
int47end:nop
code ends
end start

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 erh 2017-6-19 17:32
跟作业答案忘对了一下。发现忘记了应该先cld,再rep movsb了 。汇编里面不要想默认值的事情,所有的问题自己要想到!记住教训

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部