汇编小记16/3/23

最后一次更新:2016-03-23 19:51:12



寄存器(内存访问)

字单元:字型数据在地址连续的两个内存单元中存储,比如2 3内存单元,2为该字型起始单元,则称该字单元为2地址地址单元



用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时段地址默认在DS寄存器中

[address]表示偏移地址为address的内存单元

内存和寄存器中传送字型数据是,高地址单元和高8位寄存器,低地址单元和低8为寄存器



任意时刻,SS:SP指向栈顶元素

和mov不同的是,pop和push不需要给出内存的偏移地址,ss:sp就能确定当前栈顶

cpu的栈机制:先改变sp后写内存的push指令,读内存后改变sp的pop指令

cpu只知道当前执行的指令和当前的栈顶元素,没有overflow的机制

需要自己判断栈有没有出界,需要自己管理栈空间的大小,比如我们人为设定10000H~1FFFFH为栈段

pop和push只是指令,需要我们先定义SS,SP指向栈段(初始化栈顶)

pop和push实质上是一种内存访问指令

比如 1000H~1FFFFH这段空间设定为栈段,初始状态栈是空的,此时SS=1000H?(感觉是2000H),SP=0000H

分析:栈为有唯一一个元素时,sp的内容是fffe,则这个元素出栈,sp=sp+2

分析:ss当前栈段地址,是不会改变的,push、pop只改变sp,所以栈顶的变化范围是0~FFFFFH,从栈空的时候的sp=0,一直压栈,直到栈满是sp=0,如果再次压栈,栈顶将环绕,覆盖掉原来的内容,所以一个栈段的最大容量为64KB



汇编小记16/3/23

时间: 2024-10-11 22:27:43

汇编小记16/3/23的相关文章

汇编小记16/3/15

最后一次更新 2016-03-16 00:08:34 学习汇编之前应该明白,汇编其实依托具体的硬件的语言,不同的硬件可能会有不同的语言形式,我们一般学习intel8086cpu为中央处理器的pc机 cpu和存储器的关系: cpu从存储器读取指令和数据 在内存和磁盘上指令和数据其实没有任何区别,都以二进制的形式存在,就像围棋中的棋盒中的棋子,本身没有任何意义,只有在具体的情形中才会发挥作用 cpu通过数据总线读取指令和数据(二进制流) 存储器: 存储器被划分为若干个点单元,每个单元的大小为1Byt

12.16~12.23工作日志

12.16~12.23工作日志 2016.12.16 1.cick事件调用的函数中加入touchmove等事件会发生事件穿透,详情(http://www.tuicool.com/articles/6NfaUnM) 移动设备的click事件有300ms延迟,用于判断是否双击 2.ios设备会有一个默认的css样式,如input按钮在电脑上默认为方形,而在iPhone上默认为圆形,清除ipone默认样式方法: Input{-webkit-appearance:none;} 3.border-radi

PSP(11.16~11.23)

18号 类别c 内容c 开始时间s 结束e 中断I 净时间T 看书 构建之法 9:00 10:00 0 60m 看书 查资料 10:00 11:15 5 70m 个人 写博客 13:30 14:55 15 70m 23号 类别c 内容c 开始时间s 结束e 中断I 净时间T 看书 看博客 19:00 19:40 0m 40m 个人 写博客 19:40 21:50 10m 120m 代码行 博客字数 知识点 0 1548 设计模式.规格说明书

转载 (16/05/23)基于ThinkPHP用户行为记录.

<?php // +---------------------------------------------------------------------- // | [email protected]妖孽 [三十年河东三十年河西,莫欺少年穷.!] // +---------------------------------------------------------------------- // | Copyright (c) 2014 http://www.yaonies.com A

C编译器剖析_1.5 结合C语言来学汇编_指针、数组和结构体

让我们再来看一份C代码,及其经UCC编译器编译后产生的主要汇编代码,如图1.33所示,其中包含了数组.指针和结构体. 图1.33 数组.指针和结构体 按照C的语义,图1.33第9行的C代码是对局部数组number的初始化,需要把number[0]初始化为2015,而数组中的其他元素皆被初始化为0.UCC编译器采取的翻译方法是:先调用memset函数来把数组number所占的内存空间清0,然后再把number[0]设为2015,如图1.33的第17至24行所示.C库函数memset的API如下所示

mipsel汇编指令学习

MIPS汇编语言基础 MIPS的系统结构及设计理念比较先进,其指令系统经过通用处理器指令体系MIPS I.MIPS II.MIPS III.MIPS IV.MIPS V,以及嵌入式指令体系MIPS16.MIPS32到MIPS64的发展. MIPS32的架构是一种基于固定长度的定期编码指令集,并采用导入/存储(load/store)数据模型.经改进,这种架构可支持高级语言的优化执行.在路由器中,经常使用的一种MIPS架构就是MIPS32. MIPS寄存器 RISC的一个显著特点就是大量使用寄存器.

Linux内核分析——汇编代码执行及堆栈变化

张潇月<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验步骤 首先借助实验楼这个平台进入Linux系统,打开了Xfce终端将代码写入. 通过cd Code命令打开Code文件夹,将后面录入的代码放在文件夹中,便于下载代码,有利于后面的详细分析. 其中通过命令gcc  main.c命令来编译代码:通过gcc  -S  -o  main.s  main.c  –m32来反汇编代码.-m32代表的是32位系统.

《80X86汇编语言程序设计教程》十一 32位代码段和16位代码段切换实例

1.  演示32位代码段与16位代码段之间的切换.实现的功能是以十六进制和ASCII码字符两种形式显示从内存地址100000H开始的16个字节的内容. 2.  源代码如下: 1 ;DosTest.Asm 2 ;16位偏移的段间转移指令的宏定义 3 ;使用于16位段,用于跳转到32位目的段 4 ;注意:标号偏移必须在16位二进制符号数数能表示的范围之内 5 JUMP16 macro selector,offsetv 6 db 0eah ;操作码 7 dw offsetv ;16位偏移 8 dw s

[Java Performance] JIT编译器简介

使用JIT(Just-In-Time)编译器 JIT编译器概览 JIT编译器是JVM的核心.它对于程序性能的影响最大. CPU只能执行汇编代码或者二进制代码,所有程序都需要被翻译成它们,然后才能被CPU执行. C++以及Fortran这类编译型语言都会通过一个静态的编译器将程序编译成CPU相关的二进制代码. PHP以及Perl这列语言则是解释型语言,只需要安装正确的解释器,它们就能运行在任何CPU之上.当程序被执行的时候,程序代码会被逐行解释并执行. 编译型语言的优缺点: 速度快:因为在编译的时