【汇编】 13.3 对int iret和栈的深入理解

书中示例

复制代码
assume cs:code

code segment
start:
	mov ax,cs
	mov ds,ax
	mov si,offset lp
	mov ax,0
	mov es,ax
	mov di,200h
	mov cx,offset end0-offset lp
	cld
	rep movsb	;lp到end0的指令传送到0:200处
	mov ax,0
	mov es,ax
	mov word ptr es:[7ch*4],200h
	mov word ptr es:[7ch*4+2],0	
	;设置7c表项的入口地址为0000:0200,也就是int 7ch时,执行lp到end0的指令

	mov ax,0b800h
	mov es,ax
	mov di,160*12
	;设置bx的位移
	mov bx,do0-se
	mov cx,80
do0:	
	
	mov byte ptr es:[di],'!'
	add di,2
	int 7ch	;中断,cs和ip入栈。cs为do0所在的段地址,ip为执行完int 7ch后下一条指令的偏移地址
	;此时栈顶是se的偏移地址		
se:	
	nop
	mov ax,4c00h
	int 21h

lp:	push bp	;bp入栈,此时栈顶是bp
	mov bp,sp		;当前栈顶的偏移地址。
	dec cx
	jcxz lpret	;cx=0则转移到lpret,否则继续执行
	add [bp+2],bx	;bp+2为se的偏移地址
	;此时ip=se+bx=se+do0-se=do0

lpret:
	pop bp	;bp出栈
	iret	;ip、cs、flag依次出栈,此时ip=d0的偏移地址
	;也就是回到do0标号处继续执行指令,直到cx=0,ip=se的偏移地址。
end0:
	nop 
	mov ax,4c00h
	int 21h

code ends
end start 

可能还可以优化,这代码看着有点多。

检测点13.1

同上。

复制代码
assume cs:code
data segment
	db 'conversation',0
data ends
code segment
start:
	mov ax,cs
	mov ds,ax
	mov si,offset lp
	mov ax,0
	mov es,ax
	mov di,200h
	mov cx,offset end0-offset lp
	cld
	rep movsb	;lp到end0的指令传送到0:200处
	mov ax,0
	mov es,ax
	mov word ptr es:[7ch*4],200h
	mov word ptr es:[7ch*4+2],0	
	;设置7c表项的入口地址为0000:0200,也就是int 7ch时,执行lp到end0的指令

	mov ax,0b800h
	mov es,ax
	mov ax,data
	mov ds,ax
	mov di,160*12
	mov si,0
	;设置bx的位移
	mov bx,offset s-offset ok
s:	
	cmp byte ptr [si],0
	je ok
	mov al,[si]
	mov es:[di],al
	mov byte ptr es:[di+1],2
	inc si
	add di,2
	int 7ch	;中断,cs和ip入栈。cs为s所在的段地址,ip为执行完int 7ch后下一条指令的偏移地址
	;此时栈顶是ok的偏移地址		
ok:	
	mov ax,4c00h
	int 21h

lp:	push bp	;bp入栈,此时栈顶是bp
	mov bp,sp		;当前栈顶的偏移地址。
	dec cx
	jcxz lpret	;cx=0则转移到lpret,否则继续执行
	add [bp+2],bx	;bp+2为ok的偏移地址
	;此时ip=ok+bx=ok+s-ok=s

lpret:
	pop bp	;bp出栈
	iret	;ip、cs、flag依次出栈,此时ip=s的偏移地址
	;也就是回到do0标号处继续执行指令,直到cx=0,ip=ok的偏移地址。
end0:
	nop 
	mov ax,4c00h
	int 21h

code ends
end start 
相关推荐
武文斌7715 小时前
ARM工作模式、汇编学习
汇编·嵌入式硬件·学习·arm
mysla20 小时前
嵌入式学习day45-硬件—汇编
汇编·学习
DebugKitty1 天前
硬件开发2-汇编2(ARMv7-A)
汇编·bx·stmdb
Aczone281 天前
硬件(六)arm指令
开发语言·汇编·arm开发·嵌入式硬件·算法
Skylar_.2 天前
嵌入式 - ARM(2)汇编
汇编·arm开发
10岁的博客4 天前
深入解析汇编语言的奥秘
汇编
阿发君13 天前
ARMCC和gcc汇编文件互相转换的高效方法
汇编
JCBP_15 天前
QT(1)
开发语言·汇编·c++·qt
浩浩测试一下17 天前
06高级语言逻辑结构到汇编语言之逻辑结构转换 for (...; ...; ...)
汇编·数据结构·算法·安全·web安全·网络安全·安全架构
weixin_4707403618 天前
某算法的python执行汇编
汇编·python·算法