【汇编】 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 
相关推荐
Ayanami_Reii2 天前
汇编和C语言结构
c语言·汇编·笔记
脑子慢且灵4 天前
C语言与Java语言编译过程及文件类型
java·c语言·开发语言·汇编·编辑器
日更嵌入式的打工仔7 天前
汇编与反汇编
汇编
oioihoii13 天前
从汇编角度看C++优化:编译器真正做了什么
java·汇编·c++
CHANG_THE_WORLD13 天前
函数简单传入参数的汇编分析
汇编·c++·算法
GHL28427109013 天前
i++汇编学习
汇编·学习
iCxhust13 天前
Intel8259汇编串口接收转C语言
c语言·开发语言·汇编
东亚_劲夫13 天前
汇编和反汇编
汇编
无名J0kзr17 天前
汇编:语法速通
汇编
月盈缺20 天前
学习嵌入式的第三十九天——ARM——汇编
汇编·arm开发·学习