汇编学习历程(int中断学习)

本文详细介绍了如何通过汇编语言实现中断处理,劫持除法溢出中断,并进行内存数据的高效传输。通过设置相关寄存器,保存与恢复段寄存器,以及使用repmovsb指令进行数据复制,展示了中断处理与内存操作的核心技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

            以下是我学习int中断的一个历程,劫持除法溢出中断!

assume cs:code,ds:data,ss:stack

code segment
start:
	mov ax,data
	mov ds,ax
	mov ax,stack
	mov ss,ax
	mov sp,32										;设置相关寄存器
	
	push ds											;保存DS段寄存器数据
	
	mov ax,cs
	mov ds,ax										
	mov si,offset _subStart							;设置起始数据传输地址为cs:_subStart
	
	mov ax,0h
	mov es,ax
	mov di,200h										;设置目的传送地址为0:200
	
	mov cx,offset _subEnd - offset _subStart		;设置传送长度
	
	cld												;设置传送方向		
	rep movsb										;开始传送
	pop ds
	
	mov ax,0
	mov es,ax
	mov word ptr es:[0*4],200h
	mov word ptr es:[0*4+2],0						;修改中断向量表
	
	mov ax,4c00h
	int 21h
	
	_subStart:										;中断处理开始
	jmp ok
	db 'This Is A Test!','$'						;定义输出数据
	ok:
	push ax
	push bx
	push ds											;保存相关寄存器
	
	mov ax,0
	mov ds,ax
	mov dx,202h
	mov ah,9
	int 21h											;调用21中断显示字符串
	
	pop ds
	pop bx
	pop ax											;恢复堆栈
	
	mov ax,4c00h
	int 21h											;程序退出
	_subEnd:nop
	
code ends

stack segment
dw 16 dup(0)
stack ends

data segment
db 'this is a sssdfasd$'
data ends

end start


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值