汇编语言程序设计(二)十六位汇编框架、子程序与堆栈
寄存器
如下是16位通用寄存器,存储在cpu硬件中
AX 返回值
AX寄存器分为两部分 AH和AL
AH 高8位 存储功能号
AL 低8位 存储返回码
以下是一个AX寄存器应用:
mov ax,4c00h 4c给高位AL,00低位AL,16进制要以h结尾
BX
CX 计数器
DX
SI 目标寄存器
DI 源寄存器
SP 栈顶指针寄存器
BP 栈底指针寄存器
16位堆栈每单元占2字节
常见编译器指令
r 查看寄存器及下一行的指令
u 查看汇编代码
t 单步步入 遇见子程序进入内部 遇到int 21h指令时不要用t
p 单步步过 遇见子程序执行到子程序的下一行,忽略子程序的内部实现
g 运行
q 退出
d 读内存
d ss:fffe 0700 0007
常见汇编指令
MOV 数据传送指令 :
格式:MOV OPRD1,OPRD2 用处是将操作数2的值放到操作数1中
OPRD1指寄存器,内存
OPRD2指寄存器,内存,立即数即12345
内存(即变量)存储在内存中
以下是一个该指令应用例子:
MOV ax,1 将立即数1传入寄存器ax中
start 指定主程序起始位置
end start 指定主程序结束位置
proc 函数头
endp 函数尾
ret 函数返回:
在堆栈顶部取出返回地址,并且放置到IP寄存器
跳转到IP寄存器所在位置
jmp 无条件跳转指令:
jmp addr addr是地址,地址指哪跳转哪
call 子程序调用:
保存返回地址到堆栈
跳转到子程序中
int (中断指令):
最常见的中断指令 int 3,硬编码0xcc,称作软件中断
结束汇编程序需要DOS系统中int 21h指令,也叫21号中断,它具有很多功能。其中一个功能4C,
用来实现程序退出、并返回DOS。使用方法如下:
mov ah, 4ch
int 21h 此时中断程序
函数调用实现
参数:可以用内存,堆栈,寄存器传递参数
16位堆栈每单元占2字节,32位堆栈每单元占4字节,64位堆栈每单元占8字节
程序要时刻保持堆栈平衡
在传参时:
push 将一个值或者地址压入栈中,之后sp-2(如果是32位处理器-4)
pop 将一个值或者地址弹出栈中,之后sp+2(如果是32位处理器+4)
pop也可以换成add sp,2,意思是将栈屏掉2个字节,此时不需要管栈中的数据
返回值默认放在ax,eax,rax里
一个汇编程序
assume cs:code code表示cs段的起始位置,cs段就是代码段
code segment 代码段开始
setAx proc 函数开头
push bp
mov bp,sp
mov si,[bp+4]
mov di,[bp+6] 利用bp寻址
mov ax,0ffffh 如果数据都是字母时, 开头0声明他是一个数字,h结尾表示他是一个十六进制数字
pop bp
ret 函数返回
setAx endp 函数结束
start: 程序开始
mov ax,4
mov bx,5
push ax
push bx 将寄存器中数据压入栈中
call setAx 调用子程序即函数
add sp,4 将栈屏掉4个字节用于平栈
mov ax,1 将1放到ax寄存器保存
mov bx,2
mov ax,4c00h 将4c00传给ax寄存器
int 21h 触发中断
code ends 代码段的结束位置
end start 结束程序
相关文章:
汇编语言程序设计(二)十六位汇编框架、子程序与堆栈
寄存器 如下是16位通用寄存器,存储在cpu硬件中 AX 返回值 AX寄存器分为两部分 AH和AL AH 高8位 存储功能号 AL 低8位 存储返回码 以下是一个AX寄存器应用: mov ax,4c00h 4c给高位AL,00低位AL,16进制要以h结尾 BX CX 计数…...
K8S之标签的介绍和使用
标签 标签定义标签实操1、对Node节点打标签2、对Pod资源打标签查看资源标签删除资源标签 标签定义 标签就是一对 key/value ,被关联到对象上。 标签的使用让我们能够表示出对象的特点,比如使用在Pod上,能一眼看出这个Pod是干什么的。也可以用…...
网络请求库axios
一、认识Axios库 为什么选择axios? 功能特点: 在浏览器中发送 XMLHttpRequests 请求在 node.js 中发送 http请求支持 Promise API拦截请求和响应转换请求和响应数据 补充: axios名称的由来? 个人理解没有具体的翻译. axios: ajax i/o system 二、axios发送请求 1.axios请求…...
程序设计语言的组成
程序设计语言的组成 程序设计语言基本上由数据、运算、控制、传输组成 数据成分 数据是程序操作的对象,具有存储类别、类型、名称、作用域和生存期等属性 从不同角度可将数据进行不同的划分。 数据类型的分类如下: 按程序运行过程中数据的值能否改…...
论文精读的markdown模板——以及用obsidian阅读网页资料做笔记
# The Investigation of S-P Chart Analysis on the Test Evaluations of Equality Axiom Concepts for Sixth Graders Tags: #/unread 本体论: 背景起源和发展 包含要素 # # # 可关联要素 # # # 逻辑 意义: 方法论: 方法论是一…...
LCP 30. 魔塔游戏
LCP 30. 魔塔游戏 难度: 中等 题目: 小扣当前位于魔塔游戏第一层,共有 N 个房间,编号为 0 ~ N-1。每个房间的补血道具/怪物对于血量影响记于数组 nums,其中正数表示道具补血数值,即血量增加对应数值;负数表示怪物造…...
RCE(命令执行)知识点总结最详细
description: 这里是CTF做题时常见的会遇见的RCE的漏洞知识点总结。 如果你觉得写得好并且想看更多web知识的话可以去gitbook.22kaka.fun去看,上面是我写的一本关于web学习的一个gitbook,当然如果你能去我的github为我的这个项目点亮星星我会感激不尽htt…...
[英语学习][27][Word Power Made Easy]的精读与翻译优化
[序言] 译者的这次翻译非常好. 对what与从句的嵌套用法, 进行了精准的翻译. 这次的记录, 也是对我自己的一次翻译经验的提升. 但是唯一遗憾的是"derivation"没有翻译好. [英文学习的目标] 提升自身的英语水平, 对日后编程技能的提升有很大帮助. 希望大家…...
Jupyter Notebook如何在E盘打开
Jupyter Notebook如何在E盘打开 方法1:方法2: 首先打开Anaconda Powershell Prompt, 可以看到默认是C盘。 可以对应着自己的界面输入: 方法1: (base) PS C:\Users\bella> E: (base) PS E:\> jupyter notebook方法2&#x…...
显示器校准软件:BetterDisplay Pro for Mac v2.0.11激活版下载
BetterDisplay Pro是一款由waydabber开发的Mac平台上的显示器校准软件,可以帮助用户调整显示器的颜色和亮度,以获得更加真实、清晰和舒适的视觉体验。 软件下载: BetterDisplay Pro for Mac v2.0.11激活版下载 以下是BetterDisplay Pro的主要…...
【第六天】c++虚函数多态
一、多态的概述 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联(父类与子类)时,就会用到多态。 C 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 静态多态&…...
CGAL::2D Arrangements-3
3.Arrangement查询 Arrangement里面最重要的查询操作是point-location,给定一个点,查找到包含这个点的Arrangement。通常情况下,point-location查询得到的结果是Arrangement的一个face,退化情况下会是一个edge,查一个…...
机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧
文章目录 1.K-近邻算法思想2.K-近邻算法(KNN)概念3.电影类型分析4.KNN算法流程总结5.k近邻算法api初步使用机器学习库scikit-learn1 Scikit-learn工具介绍2.安装3.Scikit-learn包含的内容4.K-近邻算法API5.案例5.1 步骤分析5.2 代码过程 1.K-近邻算法思想 假如你有一天来到北京…...
Redis 使用 RDB 持久化方式的过程
定时触发: RDB 持久化是通过设置一个定时触发的机制来进行的。管理员可以配置 Redis 在经过一定时间间隔或执行了一定数量的写操作后触发 RDB 持久化。这个配置通常在 Redis 的配置文件中进行,可以通过 save 或 save 900 1 这样的配置项来设定。 save 90…...
仰暮计划|“我非常感谢党的领导,作为一名普通百姓,我也愿意为国家的发展继续贡献微薄的力量”
她出生于1945年,现居河南省平顶山市宝丰县城关镇东街社区,是一位和蔼可亲的老人。 孙奶奶回忆,在学生时期,是点蜡烛照明的,打瞌睡或者离作业本近的时候,就会烧到头发,当时的作业量不大ÿ…...
【思科ssh】思科模拟器配置ssh登录
配置路由器的名称为R1 配置路由器的域名为aaa.com 使用rsa来加密传输数据,密钥位数为2048 配置登录用户名为cj,密码为123456 只允许ssh登录,不能以其他方式登录 本地验证...
python创建pdf文件
目录 一:使用reportlab库 二:使用使pdf库 在Python中生成PDF文件可以使用多种库,其中最常用的是reportlab和fpdf。以下是使用这两个库生成PDF文件的示例代码: 一:使用reportlab库 1:写入文字信息 from r…...
ubuntu开机报错/dev/nume0n1p2:clean
TOC 一、前提 1、当你平时用的图站或者linux系统出现这个问题,首先看看你的显卡有没有换位置。 我的就是项目电脑,同事换了显卡位置,我不知道,当我在这个基础上继续做的时候,出了问题。 2、当你是第一次装显卡&…...
openstack(T版)公有云--Dashboard服务
公有云上OpenStack Train最小化安装_openstack最小化部署-CSDN博客 我的opensatck(T)是参考上面链接去部署完成的,在部署完Dashboard服务后,将要用浏览器访问的时候出现了404 500 Internal Server Error 等各种各样的问题,以下是我排查问题…...
Vue ElementUI中el-table表格嵌套样式问题
一、表格嵌套要求: 两个表格嵌套,当父表格有children数组时子表格才展示;子表格数据少于父表格展示字段,且对应固定操作列不同; 二、嵌套问题: 当使用el-table的typeexpand实现表格嵌套时,样…...
用Matlab的ode45求解器,手把手教你搭建传染病SEID模型(附完整代码)
基于Matlab的SEIR模型构建与传染病动力学仿真实战指南 在当今数据驱动的时代,数学建模已成为研究传染病传播规律不可或缺的工具。本文将带您深入探索如何利用Matlab这一强大的工程计算平台,从零开始构建专业的传染病动力学模型。不同于简单的教程式教学&…...
告别Keil!用Clion+STM32CubeMX搭建C++开发环境(附LED闪烁实战)
告别Keil!用ClionSTM32CubeMX搭建C开发环境(附LED闪烁实战) 嵌入式开发领域正经历一场工具链的现代化变革。对于习惯了Keil这类传统IDE的STM32开发者而言,JetBrains推出的Clion无疑是一股清新之风——它不仅具备智能代码补全、重…...
手把手教你用Vivado配置Xilinx SEM IP 3.1:从IP Catalog到Tera Term串口调试全流程
手把手教你用Vivado配置Xilinx SEM IP 3.1:从IP Catalog到Tera Term串口调试全流程 在FPGA开发中,软错误缓解(SEM)IP核是确保设计可靠性的关键组件。对于使用Xilinx Artix-7系列芯片的工程师来说,掌握SEM IP的完整配置…...
3分钟掌握京东自动抢购神器:告别“手慢无“的终极指南
3分钟掌握京东自动抢购神器:告别"手慢无"的终极指南 【免费下载链接】autobuy-jd 使用python语言的京东平台抢购脚本 项目地址: https://gitcode.com/gh_mirrors/au/autobuy-jd 还在为京东限时秒杀商品总是抢不到而烦恼吗?面对心仪的热…...
5分钟掌握碧蓝航线自动化脚本:解放双手的智能游戏助手终极指南
5分钟掌握碧蓝航线自动化脚本:解放双手的智能游戏助手终极指南 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 你…...
CGI Studio 3.11:AI驱动与安全合规的嵌入式HMI开发平台解析
1. 项目概述:为什么我们需要CGI Studio这样的HMI设计工具?在嵌入式系统开发领域,尤其是在汽车、工业和高端家电行业,图形用户界面的复杂度和美观度要求正以前所未有的速度提升。十年前,一个简单的单色LCD屏幕配上几个按…...
同步、异步与互斥:从通用OS到RTOS的全面解析
一、基础概念:进程与线程1.1 什么是进程?进程是操作系统进行资源分配和调度的基本单位,是一个正在运行的程序实例。1.2 什么是线程?线程是操作系统进行CPU调度的基本单位,是进程内部的一条执行路径(轻量级进…...
PHP SimpleXML:深入解析与高效使用
PHP SimpleXML:深入解析与高效使用 引言 PHP 是一种广泛使用的服务器端脚本语言,它以其灵活性和强大的功能而闻名。在处理 XML 数据时,PHP 提供了多种方法,其中 SimpleXML 是一个简单且强大的库,它允许开发者轻松地解析和操作 XML 数据。本文将深入探讨 PHP SimpleXML 的…...
国产高性能MCU如何破局?拆解先楫半导体RISC-V芯片的落地逻辑
1. 从展会到产线:拆解先楫半导体高性能MCU的落地逻辑前几天在深圳的Elexcon电子展上逛了一圈,最大的感触是,国产芯片的“高性能”这三个字,终于不再是PPT上的口号,而是能实实在在摸到、测到、甚至直接拿来设计产品的硬…...
高光谱图像处理入门避坑指南:数据冗余、小样本和‘维数灾难’怎么破?
高光谱图像处理实战:破解数据冗余与小样本困境的技术路线 当第一次接触高光谱图像时,大多数研究者都会被其数据立方体的三维结构所震撼——数百个连续光谱波段构成的"超视觉"信息库,理论上能捕捉到人眼无法感知的物质指纹特征。但随…...
