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

书中示例

assume cs:codecode segment
start:mov ax,csmov ds,axmov si,offset lpmov ax,0mov es,axmov di,200hmov cx,offset end0-offset lpcldrep movsb	;lp到end0的指令传送到0:200处mov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0	;设置7c表项的入口地址为0000:0200,也就是int 7ch时,执行lp到end0的指令mov ax,0b800hmov es,axmov di,160*12;设置bx的位移mov bx,do0-semov cx,80
do0:	mov byte ptr es:[di],'!'add di,2int 7ch	;中断,cs和ip入栈。cs为do0所在的段地址,ip为执行完int 7ch后下一条指令的偏移地址;此时栈顶是se的偏移地址		
se:	nopmov ax,4c00hint 21hlp:	push bp	;bp入栈,此时栈顶是bpmov bp,sp		;当前栈顶的偏移地址。dec cxjcxz lpret	;cx=0则转移到lpret,否则继续执行add [bp+2],bx	;bp+2为se的偏移地址;此时ip=se+bx=se+do0-se=do0lpret:pop bp	;bp出栈iret	;ip、cs、flag依次出栈,此时ip=d0的偏移地址;也就是回到do0标号处继续执行指令,直到cx=0,ip=se的偏移地址。
end0:nop mov ax,4c00hint 21hcode ends
end start 

可能还可以优化,这代码看着有点多。
在这里插入图片描述

检测点13.1

同上。

assume cs:code
data segmentdb 'conversation',0
data ends
code segment
start:mov ax,csmov ds,axmov si,offset lpmov ax,0mov es,axmov di,200hmov cx,offset end0-offset lpcldrep movsb	;lp到end0的指令传送到0:200处mov ax,0mov es,axmov word ptr es:[7ch*4],200hmov word ptr es:[7ch*4+2],0	;设置7c表项的入口地址为0000:0200,也就是int 7ch时,执行lp到end0的指令mov ax,0b800hmov es,axmov ax,datamov ds,axmov di,160*12mov si,0;设置bx的位移mov bx,offset s-offset ok
s:	cmp byte ptr [si],0je okmov al,[si]mov es:[di],almov byte ptr es:[di+1],2inc siadd di,2int 7ch	;中断,cs和ip入栈。cs为s所在的段地址,ip为执行完int 7ch后下一条指令的偏移地址;此时栈顶是ok的偏移地址		
ok:	mov ax,4c00hint 21hlp:	push bp	;bp入栈,此时栈顶是bpmov bp,sp		;当前栈顶的偏移地址。dec cxjcxz lpret	;cx=0则转移到lpret,否则继续执行add [bp+2],bx	;bp+2为ok的偏移地址;此时ip=ok+bx=ok+s-ok=slpret:pop bp	;bp出栈iret	;ip、cs、flag依次出栈,此时ip=s的偏移地址;也就是回到do0标号处继续执行指令,直到cx=0,ip=ok的偏移地址。
end0:nop mov ax,4c00hint 21hcode ends
end start 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/411958.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟实现简单的shell

目录 1.实现交互界面 2.子串分割的问题,解决命令行 3.指令的判断 1.实现交互界面 我们模仿打印出来就好了: 现在已经有初步的形状了。 2.子串分割的问题,解决命令行 3.指令的判断 看上面有一行内建命令中的export,其实不对的&a…

Redis在Windows10中安装和配置

1.首先去下载Redis 这里不给出下载地址,自己可以用去搜索一下地址 下载 下载完成后解压到D盘redis下,本人用的是3.2.100 D:\Redis\Redis-x64-3.2.100 2.解压完成后需要设置环境变量,这里新建一个系统环境变量中path 中添加一个文件所…

C++ 之LeetCode刷题记录(十二)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 69. x 的平方根 示例 1: 输入:x 4 输出:2 示例 2: 输入&#x…

jenkins-cl参数化构建

pipeline片段(对应jenkins-cli -p参数的BRANCHdevelop) parameters {string(name: BRANCH, defaultValue: master, description: Enter the branch name)}stages {stage(Get Code) {steps {script {def branch params.BRANCHcheckout scmGit(branches: …

HFSS笔记/信号完整性分析(二)——软件仿真设置大全

文章目录 1、多核运算设置1.1 如何设置1.2 如何查看自己电脑的core呢?1.3 查看求解的频点 2、求解模式设置Driven Terminal vs Driven modal 3、Design settings4、自适应网格划分5、更改字体设置 仅做笔记整理与分享。 1、多核运算设置 多核运算只对扫频才有效果&…

Python中使用HTTP代理进行网络请求

在Python中,HTTP代理是一种常用的技术,用于控制和修改HTTP请求和响应。通过使用HTTP代理,我们可以更好地控制网络请求的行为,提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中使用HTTP代理进行网络请求。 一、HTTP代…

互联网加竞赛 基于机器视觉的停车位识别检测

简介 你是不是经常在停车场周围转来转去寻找停车位。如果你的车辆能准确地告诉你最近的停车位在哪里,那是不是很爽?事实证明,基于深度学习和OpenCV解决这个问题相对容易,只需获取停车场的实时视频即可。 该项目较为新颖&#xf…

CSS 设置背景图片

文章目录 设置背景颜色设置背景图片背景图片偏移量计算原点背景图片尺寸设置背景图片位置设置背景图片重复方式设置背景范围设置背景图片是否跟随元素移动测试背景图片 本文概念部分参考:CSS背景background设置 设置背景颜色 background-color 设置背景颜色 设置…

C++ mapsetOJ

目录 1、138. 随机链表的复制 2、692. 前K个高频单词 3、349. 两个数组的交集 1、138. 随机链表的复制 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;random NULL;} }; */class Solution { pub…

网上订货管理系统功能列表|企业手机订单管理软件

网上订货管理系统功能列表|企业手机订单管理软件 后台功能列表 (后台支持手机版本 订货APP,管理订单的APP) 后台登陆 输入账号密码登录企业订货管理软件系统 后台首页 显示近日,月,年订单统计,和收款欠款等统计。 订单模块 新建订单 &am…

【Python】如何快速知道当前python所用库的路径

【背景】 项目一多,python环境就开始互相影响。有时需要快速知道当前的环境用的库,也就是site-pachage是哪个路径下的。 【方法】 打开相应的Python.exe,进入python命令行,输入: import sys print(sys.path)结果类…

【FPGA】Verilog描述电路的三种方式(结构化、数据流和行为化)

前言 众所周知,Verilog是作为一种HDL(Hardware Description Language,硬件描述语言)出现的,它的主要功能是在不同的抽象层级上描述电路,从而实现电路设计。那么到底该如何描述电路?Verilog提供…