首页 > 编程语言 >Intel汇编语言程序设计笔记

Intel汇编语言程序设计笔记

时间:2023-02-20 19:12:17浏览次数:32  
标签:标号 操作数 Intel 汇编语言 ZF 跳转 内存 寄存器 程序设计

⦁ 2^8=256 2^10=1024 2^16=65536[二进制]1111=F[16进制]
⦁ 有符号二进制整数的最高有效位[MSB]表示数的符号,0=正数 1=负数
⦁ 数据的意义,由其数据类型决定,单纯的数字没有意义.比如11111111,如果数据类型是无符号整数,代表十进制255,如果是有符号整数,代表-1.
⦁ 负整数用其绝对值的补码表示,也就是对应的正数取反加1
⦁ IA32处理器基本寄存器包括8个32位通用寄存器[EAX EBX ECX EDX EBP ESP ESI EDI],6个16位段寄存器[CS SS DS ES FS GS],一个处理器状态标志寄存器[EFLAGS]和一个指令指针寄存器[EIP].
⦁ EFLAGS寄存器,当某标志等于1被称为置位,等于零为复位.
⦁ 整数常量后可接数字基数,大小写均可: H:十六进制 B:二进制 D:十进制 R:编码实数,字母开头的十六进制数前面加零
⦁ 汇编语言大小写不敏感
⦁ 伪指令定义程序的节.data:变量区 .code:指令区 .stack:栈
⦁ move count, ebx 等同于 count = ebx
⦁ Intel CPU使用小尾顺序的方案存取内存数据,变量的最低有效字节存储在地址值最小的内存单元中.如果内存地址从左到右递增的话,BYTE型数据1在内存中存储为1000 0000
⦁ $运算符返回当前语句的地址偏移值
⦁ 在几乎所有汇编指令中,左边的操作数都是目的操作数,右边的操作数是源操作数.
⦁ movzx:零扩展传送 movsx:符号扩展传送
⦁ xchg:交换两个操作数的内容
⦁ 方括号表示提权内存内容,括号中是内存地址
⦁ inc dec:从操作数中加1或减1
⦁ offset操作符返回数据标号相对数据段起点的偏移,单位字节
⦁ align 4: 之后的变量4字节对齐
⦁ type:返回按字节计算的变量单个元素的大小
⦁ lengthof:返回数组元素的数目
⦁ sizeof:type*lengthof
⦁ 间接操作数:通用寄存器用方括号括起来,寄存器里存放数据的偏移.
⦁ PTR:指明操作数的尺寸大小.inc byte ptr [esi]
⦁ TYPEDEF:创建用户自定义数据类型.PBYTE TYPEDEF PTR BYTE
⦁ JMP 标号:无条件转移指令,标号将由汇编器翻译成偏移地址
⦁ LOOP指令的执行分两步:1.ECX减1,接着与0作比较,如果不等于0,则JMP到目的地址,如果ECX等于0,则继续执行LOOP下一行指令.
⦁ ESP:extended stack pointer 堆栈指针寄存器
⦁ 32位压栈PUSH操作,首先将栈指针减4,然后把值复制到栈指针指向的位置
⦁ 32位出栈POP操作,首先从堆栈顶端移走一个值,将其复制到寄存器或内存,栈指针增加4
⦁ 过程:PROC与ENDP之间的代码构成一个过程,关键字之前的是过程的标识符,过程结束前必须返回ret
⦁ 标号 PROC [属性] [USES 寄存器列表],参数列表
⦁ USES:列出被过程修改的所有寄存器
⦁ cmp 目的操作数,源操作数,cmp操作改变ZF CF标志
⦁ jz:如果比较操作后,ZF置位,ZF=1,则跳转
⦁ jnz:如果比较操作后,ZF清零,ZF=0,则跳转
⦁ 全局标号:标号后跟::,跳转指令可以突破过程的限制,跳转到全局标号行
⦁ JE=JZ[相等则跳转] JNE=JNZ[不相等则跳转]
⦁ 决策伪指令:.IF .ELSE .ELSEIF .ENDIF
⦁ .MODEL 内存模式 [,模式选项] .model flat,STDCALL
⦁ STDCALL把要导出的过程名修改为:_name@nn,过程名开头加一条下划线,@符号后加了表示参数使用字节数的整数.[向上取整为4的倍数]
⦁ INVOKE是CALL指令的增强替代品,允许在一行代码中传递多个参数,INVOKE 过程名[,参数列表]
⦁ PROTO为一个已存在的过程创建一个原型
⦁ 联合union与结构类似,把多个标识符组合在一起,不过这些标识符共用同一块内存内存
⦁ 宏定义: Name MACRO para1,para2... statement-list ENDM
⦁ C++中使用__asm{}内联汇编代码

标签:标号,操作数,Intel,汇编语言,ZF,跳转,内存,寄存器,程序设计
From: https://www.cnblogs.com/kaling/p/17138530.html

相关文章

  • 第十五章 面向对象程序设计
    第十五章面向对象程序设计OOP:概述面向对象程序设计(object-orientedprogramming)的核心思想是数据抽象、继承和动态绑定。继承(inheritance):通过继承联系在一起的类构......
  • Wintel联盟:Windows+Intel  PC时代的“双霸主神话”
     正所谓,时势造英雄。 1981年8月12日,IBM公司正式推出全球第一台个人电脑IBM5150。当时,IBM为了加速研发进度一改公司传统,IBM5150采用通用标准部件,开放除BIOS以外的......
  • Intel CPU发展简史
    1971年:40041971年11月15日,Intel公司的工程师霍夫发明了世界上第一个商用微处理器—4004,从此这一天被当作具有全球IT界里程碑意义的日子而被永远的载入了史册。这款4位微......
  • 《程序是怎样跑起来的》·第十章 通过汇编语言了解程序的实际构成
    阅读正文前,让我们先回答下面的问题来热热身吧:本地代码的指令中,表示其功能的英语缩写称为什么汇编语言的源代码转换成本地代码的方式称为什么?本地代码转换成汇编语言的......
  • 顺序程序设计实验报告
    题目一:编程输入任意两个数,将较小者输出程序代码:#include<stdio.h>main(){  inta,b,min;  scanf("%d,%d",&a,&b);  if(a>b)    min=b;  else   ......
  • 部分信创CPU算力与IntelCPU的简单比较
    部分信创CPU算力与IntelCPU的简单比较摘要最近一直想查看一下国产和非国产的CPU的性能比较从最开始学习研究sysbench到周五晚上开始学习stress-ng今天查看github上......
  • 选择程序设计2
      A  B  D注意switch(x)的case1后没有break,所以会执行到case2   Dbreak语句也在可以在循环语句中使用;可以在case之后的语句最后加上break语句在swit......
  • 选择程序设计1
      B选项a判断kk的值是否在A到Z之间b逻辑不正确,无法判断kk是否为大写字母c是将kk转化为小写字母再判断大写字母的ASCII码范围为65-90.如果一个字母的ASCII码小于91,......
  • 微机原理与系统设计笔记4 | 汇编语言程序设计与其他指令
    打算整理汇编语言与接口微机这方面的学习记录。本部分介绍汇编语言程序设计以及一些跟程序设计密切相关的指令类。参考资料西电《微机原理与系统设计》周佳社西交......
  • Java开发工具IntelliJ IDEA 2020.2完整授权流程
    最近几年,Java的技术栈发展的非常快,Java作为一门十分流行的面向对象编程语言,其开发工具也是非常多的,当然因为接触时间长短以及个人喜好,每个人都有自己的选择。对此,我对目前......