http://www.cnblogs.com/del/archive/2010/04/16/1713886.html 跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. 根据标志位跳转的指令: JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 J…
AND: 逻辑与 ;该指令会置 CF=OF=; 其结果影响 SF.ZF.PF ;指令格式: AND r/m, r/m/i ; Test22_1.asm - 使用 AND 运算将一个数的第二.四位清零 .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib…
1. 跳转指令 [ b ] [ bl ]   指令格式:<opcode><cond> <address> 不带返回的跳转指令:b mov r0, #0x12 mov r1, #0x34 b fun_add @一条指令 , 有地址 mov r2, #0x56 @通过上面的跳转此处将不会得到执行 mov r3, #0x78 fun_add: @伪操作 标号类似 C语言中的一个函数体 , 此处只是一个局部 的标号 mov r4, #0x1 mov r5, #0x1 add r…
汇编指令的一般性要求: 1.两个操作数的尺寸必须一致; 2.操作数不能同为内存. MOV(Move): 最常用的数据传送指令 ;该指令不影响 EFlags ;指令格式: (其中的 r.m.i 分别表示: 寄存器.内存.立即数) MOV r/m, r/m/i ; Test21_1.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc in…
我觉得所谓的模块化有两种: "假模块化" 和 "真模块化". 所谓 "假模块化" 就是通过 include 指令把 *.inc 或 *.asm 文件的文本插入到当前位置.这样最后还是一个大的 asm 文件, 这适合小型的模块化设计. 所谓 "真模块化" 就是一个或几个源文件先通过 lib.exe 编译成 *.lib 文件, 然后通过 includelib 指令引入使用.这在 RadASM 环境中可通过建立 LIB Projec…
从接触 C 语言时, 我就不大喜欢宏; 但为了看懂别人的代码也不得不去了解. 宏可定义在源程序的任意位置, 但一般放在 .data 前面.有些简单的宏可以用 equ.textequ 或 = 来代替, 但宏有更复杂的功能. "宏" 的本质是 "替换", 但又像极了 "子过程";所以即有宏过程(macro procedure).也有宏函数(macro function).它既以有参数(可以是: 常数.变量.寄存器.指令.表达式), 有时也需要像子过程…
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NT IOPL OF DF IF TF SF ZF AF PF CF 未使用 嵌套标志 I/O权限标志占2位 溢出标志 方向标志 中断允许标志 单步标志 符号标志 零标志 未使用 辅助标志 未使用 奇偶标志 未使用 进位标志 上表是 32 位寄存器 EFLAGS 的低 16 位. 不能直接读写 EFLAGS, 但有些方便的指令, 如:LAHF: 读取EFLAGS 低 8 位到 AH; SAHF 是 LAHF 的反向操作.…
放假了,发现自己知识面窄,趁有时间就打算折腾下Win32汇编.其实在学校也上过汇编课,是基于dos的.那时老师不务正业,老跟我们讲政治经济文化,唯独不怎么讲课;再加上自己的问题,导致了dos汇编学得好烂(几乎没学),但发现dos汇编比较少用,所以直接学Win32汇编了,基础知识薄弱遇到再补上去.我只是多了解其他知识,不求精通.如果要学好还是应该先写好dos汇编的. 介绍 Win32可执行环境的开发过程如下图 常用的编译器有Microsoft的MASM系列和Borland的TASM系列.但都存在一…
助记方法: J:跳转C: 进位位置位N: 否S: 符号位置位o: 溢出位置位Z: 零标志位置位E: 等于P:奇偶位置位A: AboveB: BelowL: Less (Little的比较级)G: Greater (Great的比较级) (SF^OF)=1 --> SF=0, OF=1 --> a < b SF=1, OF=0 --> a < b (SF^OF)=0 --> SF=1, OF=1 --> a > b SF=0, OF=0--> a >…
二.SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二.CMP 和JZ 指令 比较指令CMP 格式: CMP A,B // A-B; 功能: 两个操作数的相减,即从A中减去B,其结果会影响标志位, 对标志位的影响与SUB指令相同.本条指令主要是用于配合条件转移指令使用.如JZ ZF=0时,跳转 条件转移指令 JE/JZ 格式: JE/JZ标号 //等于跳转 功能: ZF=,转到指定地址执行 说…
目前所知道的跳转指令有 b,bl,bep,bne.他们共同点是都是以b开头,首先从字面上分析:b:是Branch,表示分支.bl:是Branch Link表示带连接的分支.bep:Branch ,Equalbne:Branch ,Not Equal. B或BL指令引起处理器转移到"子程序名"处开始执行.两者的不同之处在于BL指令在转移到子程序执行之前将其下一条指令的地址拷贝到R14(LR,链接寄存器).由于BL指令保存了下条指令的地址因此使用指令"MOV PC,LR&qu…
这一次,我们将用汇编语言写一个 Windows 程序,程序运行时将弹出一个消息框并显示"你好,我的第一个Win32汇编程序". 理论知识 Windows 为编写应用程序提供了大量的资源.其中最重要的是Windows API (Application Programming Interface). Windows API是一大组功能强大的函数,它们本身驻扎在 Windows 中供人们随时调用.这些函数的大部分被包含在几个动态链接库(DLL)中,譬如:kernel32.dll. user3…
ARM 汇编指令条件执行 在ARM模式下,任何一条数据处理指令可以选择是否根据操作的结果来更新CPSR寄存器中的ALU状态标志位.在数据处理指令中使用S后缀来实现该功能. 不要在CMP,CMN,TST或者TEQ指令中使用S后缀.这些比较指令总是会更新标志位. 在Thumb模式下,所有数据处理指令都更新CPSR中的标志位.有一个例外就是:当一个或更多个高寄存器被用在MOV和ADD指令时,此时MOV和ADD不能更新状态标志. 几乎所有的ARM指令都可以根据CPSR中的ALU状态标志位来条件执行.参见…
背景知识 Windows 把每一个 Win32 应用程序放到分开的虚拟地址空间中去运行,也就是说每一个应用程序都拥有其相互独立的 4GB 地址空间,当然这倒不是说它们都拥有 4GB 的物理地址空间,而只是说能够在 4GB 的范围内寻址.操作系统将会在应用程序运行时完成 4GB 的虚拟地址和物理内存地址间的转换.这就要求编写应用程序时必须格守 Windows 的规范,否则极易引起内存的保护模式错误.而过去的 Win16 内存模式下,所有的应用程序都运行于同一个 4GB 地址空间,它们可以彼此"看&…
在主程序中用call指令来调用子程序. Win32汇编中的子程序也采用堆栈来传递参数,这样就可以用invoke伪指令来进行调用和语法检查工作. 一. 子程序的定义 子程序的定义方式如下所示. 子程序名  proc [距离][语言类型][可视区域][USES 寄存器列表][,参数:类型]...[VARARG]          local 局部变量列表          指令 子程序名  endp proc和endp伪指令定义了子程序开始和结束的位置, proc后面跟的参数是子程序的属性和输入参数…
[0]写在前面 0.1)我们讲 CPU的保护机制,它是可靠的多任务运行环境所必须的: 0.2) CPU保护机制:分为段级保护 + 页级保护: 0.2.1)段级保护分为:段限长 limit 检查.段类型 type 检查.特权级检查.等等-- 0.3)我们着重讲 段特权级检查(bit 6~5): 特权级检查又分为:访问数据段时的特权级检查 + 代码段之间转移控制时的特权级检查:(这里,我们着重讲 代码段间转移控制时的特权级检查) 0.4)版权声明:本文部分内容图片总结于李炯的"Linux内核完全剖析…
8086汇编是指在某环境下汇编编译产生的程序,用机器去执行每条指令的长度为16位(可小于16),如DOS操作系统:WIN32汇编是32位环境下的汇编,如Windows(Windows也有64位的,XP和VISTA都有相应的版本).大体是差不多,当然,各自也有些细微的差别,WIN32下多了一些寄存器的操作,简化了一些运算,还有就是Windows把一些关键的东东都封装起来了,所以在Windows下WIN32汇编的程序员一般都感到不能像在DOS下那样欢快的游弋了,因为WIN32汇编用户不可能像在以前对…
win32汇编基础知识 Debug 版本|Release 版本 Debug 是"调试"的意思,Debug 版本就是为调试而生的,编译器在生成 Debug 版本的程序时会加入调试辅助信息,并且很少会进行优化,程序还是"原汁原味"的. 你没听错,不是任何一个程序都可以调试的,程序中必须包含额外的辅助信息才能调试,否则调试器也无从下手. Release 是"发行"的意思,Release 版本就是最终交给用户的程序,编译器会使尽浑身解数对它进行优化,以提…
比较和条件跳转 CMP 比较两个操作数,相当于SUB指令,但是相减的结果不保存到第一个操作数,而是根据相减的结果来改变零标志位.当两个操作数相等时,零标志位Z置为1. 两个操作数不相等时,零标志位Z被置为0,而且如果第一个操作数大于第二个操作数,符号位S被置为0:如果第一个操作数小于第二个操作数,符号位S被置为1. TEST 两个操作数进行与操作,结果不保存,但是会改变标志位的结果. 可以用这个指令来判断eax是否等于0. JUMPS 所有的跳转指令都会指向程序将会跳转的地址 JMP跳转 无条件…
一.Arm指令条件码和条件助记符 二.跳转指令B 1.作用 跳转指令B使程序跳转到指定的地址执行程序(跳转范围是PC-32MB到PC+32MB) 2.指令格式(注:B后面如果有条件,条件就是紧跟在B后面,没有空格) B{<condition>} <target_address> 3.参数说明 3.1.<condition>:它指示指令在什么条件下执行,可省略 3.2.<target_address>:指令跳转的目标地址,指令通过下面的方法计算目标地址: A.…
今天开始学习Win32汇编 因为自己很多都是Windows方面 所以 接触一下Win32汇编 . ;.386指令集 .model flat,stdcall ;工作模式 option casemap:none ;关键字大小写不敏感 include Windows.inc include kernel32.inc includelib kernel32.lib include user32.inc includelib user32.lib .data MessageBoxText db Messa…
带参数的跳转指令: <jsp:forward page="{路径|<%=表达式%>}"/> <jsp:param name="参数名称" value="参数内容"/> </jsp:forward> 实际生活中,很多人有email邮箱,如果成功的话,跳转到邮箱的首页,失败的话,重新登录 跳转之后的页面: <%@ page contentType="text/html" pag…
今天调试程序,发现在windows和Linux下,diab编译的结果不一样,一个能跑一个不能跑.最后定位到了函数跳转上. 程序代码里的函数跳转写的是BAL,在windows下编译结果正常,在Linux下不正常. 在Linux下,把跳转指令改成了JAL,程序执行就对了. 从网上找了找相关资料,有说看See Mips Run的.在里面找到了一句话:“跳转调用指令,即JAL,注意不是BAL,后者属于分支调用.“ 可以看出来,如果跳函数的话,还是要用JAL比较对.…
这次我们将学习有关文本的诸多属性如字体和颜色等. 理论: Windows 的颜色系统是用RGB值来表示的,R 代表红色,G 代表绿色,B 代表蓝色.如果您想指定一种颜色就必须给该颜色赋相关的 RGB 值,RGB 的取值范围都是从 0 到 255,譬如您想要得到纯红色,就必须对RGB赋值(255,0,0),纯白色是 (255,255,255). 您可以用函数 SetTextColor 和 SetBkColor 来"绘制"字符颜色和背景色,但是必须传递一个"设备环境"的…
这次,我们将学习如何在窗口的客户区"绘制"字符串.我们还将学习关于"设备环境"的概念. 理论: "绘制"字符串 Windows 中的文本是一个GUI(图形用户界面)对象.每一个字符实际上是由许多的像素点组成,这些点在有笔画的地方显示出来,这样就会出现字符.这也是为什么我说"绘制"字符,而不是写字符.通常您都是在您应用程序的客户区"绘制"字符串(尽管您也可以在客户区外"绘制").Windo…
  如何构建Win32汇编的编程环境(ONEPROBLEM个人推荐)1.首先要下载我提供的软件包(里面已经包含所有所需软件); 2.把它解压到D盘根目录下(如果需要安装在其它的地方,请注意设好路径); 3.解压后,里面有:idesetup.exe ,MASMv8.exe ,NMAKE.EXE,Var.txt和资源编辑器,Makefile.txt,Readme.txt,总共7个文件.步骤: 1.首先,双击MASMv8.exe,安装MASM32.注意,就直接安装在D盘根目录下; 2.把Var.txt…
.text:00001260 A3 04 00 EB                             BL      sub_24F4 当前地址+ (偏移 << 2 + 8) = 目标地址 0x1260 + 0x4A3 * 4 + 8 = 24F4 偏移 = (目标地址 - 当前地址 - 8) >> 2 偏移 = (0x24F4 - 0x1260 - 8) / 4 = 0x4A3 假设跳转指令处的地址是A,跳转目标处的地址是B.B,BL指令保存的是偏移地址,这个地址的计算方…
开始学习[Win32汇编],编译过程较为繁琐,做个记录. 使用 MASM32 提供的 ml.exe 和 link.exe,以及 VS2013 中的 nmake.exe 和资源编辑器. ml.exe: ml  [选项]  文件列表  [/link] link.exe: link  [选项]  文件列表 nmake.exe: nmake  [选项]  [描述文件名]  [宏定义]  [目标文件] /f 描述文件名:指定其他的描述文件名,而不是默认的 makefile 宏定义:指定新的定义,覆盖描述文…
打开语句表程序状态监控 发现 被跳过的指令用普通字体显示 被执行的指令用加粗的字体表示 录制成视频 如果除数是0 发生了溢出 用 JUO 跳转指令,跳转到 M001 例程已经录制成视频 上传到百度网盘上 注意 注意观察学习.…
条件跳转表 汇编语言-条件跳转指令 直接转移指令 指令格式 机器码 测试标志 条件说明 符号  JO       OPR 70  OF=1  结果有溢出    JNO      OPR 71  OF=0  结果无溢出    JC       OPR 72  CF=1  小于  <  JNC      OPR 73  CF=0  大于或等于  >=  JZ/JE    OPR 74  ZF=1  结果为0  ==  JNZ/JNE  OPR 75  ZF=0  结果非0  !=  JS     …