鱼C论坛

 找回密码
 立即注册

关于中断的深入学习(二)

已有 235 次阅读2017-6-19 19:39 |个人分类:作业

;--用7ch中断例程完成jmp near ptr s指令的功能,用bx向中断例程传送转移位移。
;--应用举例:在屏幕的第12行,显示data段中以0结尾的字符串

assume cs:code,ss:stack,ds:data
 
data segment
db 'conversation',0
data ends

stack segment
dw 8 dup(0)
stack ends

code segment
start:
mov ax,stack
mov ss,ax
mov sp,10h
;----改中断向量表,使int7c指向0:200处----;
mov ax,0
mov es,ax
;mov ax,7ch*4
mov di,word ptr 7ch*4
mov es:[di],word ptr 200h
mov es:2[di],word ptr 0h
;----将中断程序放到0:200处----
mov cx,offset int7cend - int7c
mov ax,cs
mov ds,ax
mov si,offset int7c
mov ax,0
mov es,ax
mov di,word ptr 200h
cld
rep movsb
;----显示data段中以0结尾的字符串----
mov bx,offset  s - offset  ok ;--int返回时的 跳转距离--
mov ax,data
mov ds,ax
sub si,si
mov di,offset byte ptr 160*11
s:
sub ch,ch
mov cl,[si]
jcxz ok
mov ax,0b800h
mov es,ax
mov es:[di],cl
inc si
add di,2
int 7ch
;jmp near ptr s
ok:
nop
mov ax,4c00h
int 21h
int7c:
push bp
mov bp,sp
add [bp+2],bx
;int7ci:
pop bp
iret
int7cend:
nop
code ends
end start

路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (2 个评论)

回复 erh 2017-6-19 19:40
子程序用到的数据段和偏移地址的设置尽量放的近一些,避免其他语句改变其值,不好查。
回复 erh 2017-6-19 19:44
答案用的
s:   cmp byte ptr [si],0
     je ok

感觉比sub ch,ch
mov cl,[s0]
jcxz s
简洁一些

facelist

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

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

GMT+8, 2024-4-28 22:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部