汇编 LOOP,LOOPD指令】的更多相关文章

一.LOOP指令 循环控制指令LOOP 格式: LOOP 标号 loopd 功能: 1.ECX=ECX-1 2.(ECX)<>0,则转移至标号处循环执行 3.直至(ECX)=0,继续执行后继指令. int iecx=900; __asm mov ecx,iecx start: __asm mov iecx,ecx printf("%d,",iecx); __asm { mov ecx,iecx mov eax,eax loop start } // 本指令是用ECX寄存器作…
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令,普遍地说,特定的汇编语言和特定的机器语言指令集是相互对应的,不同平台之间不可直接移植. 字串操作指令 移动串指令: MOVSB.MOVSW.MOVSD ;…
一. 单个寄存器操作读写内存 内存访问指令格式:<opcode><cond> Rd, [Rn] Rn 中保存的是一个内存的地址值 1. 内存写指令  [ str,strb,strh ]单个寄存器 1) [ str ]写 4 个字节 ldr r0, =0x12345678 @ mov r1, #0x40000000 str r0, [r1] @ 将r0中的数据写入 r1 指向的内存中; str写4个字节 2)[ strb ]写 1 个字节 strh r0, [r1] @ 把 r0 中…
mov指令的作用: mov指令可能是汇编里用的最多的指令了,完成c语言里的赋值. mov指令种类: 1.普通的mov指令 2.做符号扩展的movs 3.做零扩展的movz 1.普通mov的种类有: movb #完成1个字节的复制 movw #完成2个字节的复制 movl #完成4个字节的复制 movq #完成8个字节的复制 2.movs的种类以及为什么要符号扩展指令? 1.为什么要用符号扩展指令 如果要完成下面的c语言代码 char c = -1; int i = c; 如果翻译成下面的汇编代码…
1.int指令 int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程. 执行int n指令,相当于引发一个中断号为n的中断过程. (1).取中断类型码n: (2).标志寄存器入栈,IF=0,TF=0: (3).CS.IP入栈: (4).(IP)=(n*4),(CS)=(n*4+2). int指令的最终功能是和call指令相似,都是调用子程序. 2.编写应用程序调用的中断例程 (1). 功能:求一word型数据的平方. 参数:(ax)= 要计算的数据. 返回值:dx.ax中存放结…
关于EQU汇编指令 EQU是英文单词equal的缩写,因此我们也能对EQU指令有一个初步的认识:做等价替换使用. 在8051汇编语言中,EQU用于定义一个符号常量,其效果不会带来存储空间的占用(这和C语言中定义变量有区别).它仅仅是将一个常量(立即数)用一个符号来表示,即实现常量符号化的效果.汇编编译器在编译时会将这个符号替换为对应的常量.所以,EQU的作用和C语言中的宏常量十分类似. 其格式一般如下: IDATALEN EQU 80H COUNT EQU 在8051的启动代码中我们也可以发现许…
知识点: REPE/REPZ 指令 CMPSB 指令 一.CMPSB //cmp //sub //SCASB//scasw//scasd cmp byte ptr [edi],al //对标志位的影响相当于sub指令 word,dword //同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI:如果DF为1,则 dec EDI. //CMPSB cmps byte ptr [edi],byte ptr [esi]//对标志位的影响相当于sub指令 cmps word ptr…
版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明.2019-09-06,21:59:16.作者By-----溺心与沉浮----博客园 JCC指令决定它跳不跳转跟别的没关系,只跟EFLAG标志寄存器有关系!!! 1.JE, JZ 结果为零则跳转(相等时跳转) ZF=1 2.JNE, JNZ    结果不为零则跳转(不相等时跳转)  ZF=0 3.JS   结果为负则跳转 SF=1 4.JNS    结果为非负则跳转 SF=0 5.JP, JPE 结果中1的个数为偶数则跳转   PF=1…
汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令,普遍地说,特定的汇编语言和特定的机器语言指令集是相互对应的,不同平台之间不可直接移植. 移位相关指令 每种汇编语言都有进行操作数移位的指令,移位和循环移位…
汇编指令的一般性要求: 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…
刚刚看到了cmp指令,一开始有点晕.后来上网找了些资料,终于看明白了,为了方便初学者,我就简单写下我的思路吧.高手绕过,谢谢! cmp(compare)指令进行比较两个操作数的大小 例:cmp oprd1,oprd2 为第一个操作减去第二个操作数, 但不影响第两个操作数的值 它影响flag的CF,ZF,OF,AF,PF 我们怎么判断大小呢? 若执行指令后 ZF=1 这个简单,则说明两个数相等,因为zero为1说明结果为0 当无符号时: 若CF=1 则说明了有进位或借位,cmp是进行的减操作,故可…
1. CALL指令: CALL指令可不是如唤指令,而是子程序调用指令.那么汇编语言中的子程序是什么呢?子程序能被其它程序调用,在实现某种功能后能自动返回到调用程序去的程序.其最后一条指令一定是返回指令,故能保证得新返回到调用它的程序中去.也可调用其它子程序,甚至可自身调用. 我们可以暂时把子程序理解为一个代码段,是一个模块化的代码面.这个代码段可以完成某一特定功能,当程序在执行过程中需要用到这一功能,将会进入这个代码段.这块代码段执行完毕后,会跳出这块代码段.而进入代码段这一过程就是子程序的调用…
1. ldr 和 str : (1) ldr 作为指令,叫做寄存器加载指令.将内存中的值加载到寄存器中. (2) ldr 作为伪指令,实现一个32位常数或地址值加载到寄存器中.后面加载的常量或地址值标号前面必须有一个 “=” ,编译器会将伪指令替换成指令实现. (3) str 将寄存器中的值保存到内存单元中. 2. .long 伪操作,给数值分配内存单元. start: virable: .long start 如上,表示将start表示的值存到virable所代表的内存中. virable:…
目前所知道的跳转指令有 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…
知识点: REPNE/REPNZ 指令 SCASW 指令 SCASD 指令 SCAS 指令 一.SCASW 指令 //SCASB cmp word ptr [edi],al //对标志位的影响相当于sub指令 //同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI:如果DF为1,则 dec EDI. 二.SCASD 指令 SCAS BYTE PTR ES:[EDI] // 当ECX!=0并且ZF==0时 重复执行后边的指令 每执行一次EDI的值加 1 SCAS WORD…
知识点: REPNE/REPNZ 指令 SCASB 指令 一.SCASB 指令 cmp byte ptr [edi],al //对标志位的影响相当于sub指令 //同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI:如果DF为1,则 dec EDI. 二.REPNE 指令 REPNE SCAS BYTE PTR ES:[EDI] // 当ECX!=0并且ZF==0时 重复执行后边的指令 每执行一次ECX的值减1 REPNE 和REPNZ 是同一条指令的不同助记符 三.实例运用…
知识点:  PUSH  POP  CALL堆栈平衡  RETN指令 一.PUSH入栈指令 (压栈指令): 格式: PUSH 操作数 //sub esp,4 ;mov [esp],EBP 操作数可以是寄存器,存储器,或者立即数 二.POP出栈指令 (弹栈指令) 格式:POP 操作数 //mov EBP,[esp] ;add esp,4 操作数是寄存器,或者存储器,不能是立即数 三.代码分析 .测试PUSH和POP 与ESP栈顶指针的关系 .CALL与ESP的关系 .总结栈的特点(后进先出)…
二.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=,转到指定地址执行 说…
http://blog.csdn.net/lsywk/article/details/8799837 一.指令格式 MOV{条件}{S}  目的寄存器,源操作数 二.指令详解 MOV指令可完成从另一个寄存器.被移位的寄存器或立即数赋值到目的寄存器.其中S选项为指令的操作结果是否操作CPSR中的条件标志位,当没有S选项时指令不更新CPSR中的条件标志位结果. 三.指令实例 MOV   R0,R1 ; R0 = R1; MOV  PC,R14 ;PC = R14; MOV   R0,R1,LSL#3…
lea 是机器指令,offset 是伪指令. LEA BX, BUFFER ;在实际执行时才会将变量buffer的地址放入bx MOV BX, OFFSET BUFFER ;在编译时就已经计算出buffer的地址为4300(假设),然后将上句替换为: mov bx,4300 lea可以进行比较复杂的计算,比如lea eax,[esi+ebx*4],把ebx的值*4,加上esi的值,存入eax中. mov就不行了. OFFSET只能取得用"数据定义伪指令"定义的变量的有效地址,不能取得一…
.text .global  _start _start: mov r0,#0xff str r0,[r1] ldr r2,[r1]…
转自:http://blog.pfan.cn/feling/16292.html 功能号:00H和10H 功能:从键盘读入字符 入口参数:AH          =00H—读键盘           =10H—读扩展键盘,可根据0000:0496H单元的内容判断:            扩展键盘是否有效  出口参数: AH=键盘的扫描码AL=字符的ASCII码 功能号:01H和11H 功能:读取键盘状态 入口参数:AH =01H—检查普通键盘              =11H—检查扩展键盘  …
由8086/8088.x86.Pentium发展到core系列短短40多年间,处理器的时钟频率差点儿已接近极限.尽管如此,自从86年Intel推出386至今除了添加一些有关流媒体的指令如mmx/sse之外.其它新增的大多数指令都能够从最初的指令集中组合实现相同的功能,整个编程模型维持了约有20多年. 1. 处理器体系结构 1.1. 处理器简要结构 我们都知道CPU的根本任务就是运行指令,对计算机来说终于都是一串由"0"和"1"组成的序列. CPU从逻辑上能够划分成3…
80806汇编(5)--[BX]和Loop指令 已经好久没写点东西了,国庆节就一直想弄个个人网站,这段时间一直在弄那个,虽然有现成的框架(Hexo),但是总想弄出自己的效果来,但是最后还是有些差强人意,只好打翻了有重来(强迫症表示难受),也懒得弄那么多了.好在最近差不多事情也理顺了,今天强迫自己静下来写了点东西. [TOC] 简述 今天看了下汇编中的[BX]和Loop指令,Loop指令容易知道,一看就是用来做循环的指令,那么[BX]又是什么呢? 首先我们知道,要完整的描述一个内存单元,需要两种信…
简介 这两个都是伪指令:ADR 是小范围的地址读取伪指令,LDR 是大范围的读取地址伪指令.可实际使用的区别是: ADR 是将基于 PC 相对偏移的地址值或基于寄存器相对地址值读取的伪指令,而 LDR 用于加载 32 位立即数或一个地址到指定的寄存器中. 以下面的汇编代码为例: .global _start _start: ldr r0, loop adr r0, loop ldr r0, =loop loop: nop 用以下命令完成汇编.链接操作,并输出反汇编文件 [root@localho…
5.1 [bx] [bx]是什么 和 [0] 有些类似,[0] 表示内存单元,它的偏移地址是 0. 例如: mov ax, [0] 内存以字节为单位:ax以字(16bit = 2Byte)为单位:al以字节为单位.所以,mov ax, [0] 解读为把偏移地址为 0 的内存单元处的一个字对应的内容复制到 ax 寄存器中.mov al, [0] 解读为把偏移地址为 0 的内存单元处的一个字节对应的内容复制到 ax 寄存器中,因为 al 寄存器的长度为一个字节. [bx]和内存单元的描述 我们要完整…
jcxz   有条件跳转指令,cx为跳转条件.如果(cx)==0则跳转到指定标号处.跳转地址在机器码中已相对位置(-128~127)给出. 相当于                if((cx)==0) jump short 标号 用法: jcxz 标号 loop  循环指令,循环条件同样以cx给出,(cx)!=0时跳转到指定标号处,(cx)==0不跳转,继续执行下一条指令. 用法: loop   标号 例如:                       -- s  -- -- loop s ca…
第一节 可编程器件的编程原理 1. 可编程器件的特点 1 . CPU在固定频率的时钟控制下节奏运行 2 . CPU可以通过总线读取外部存储设备中的二进制指令集,然后解码执行 3 . 这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者(ARM公司)定义的,本质上是一串由1和0组成的数字.这就是CPU的汇编指令集 2. 从源代码到cpu执行过程 第二节 指令集对cpu的意义 1. 汇编语言与C等高级语言的差异 汇编无移植性,c语言有一定可移植性,jave等更高级的语言移…
根据朱有鹏老师课程笔记整理而来: (汇编)指令是CPU机器指令的助记符,经过编译后会得到一串1 0组成的机器码,由CPU读取执行. (汇编)伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供的,目的是用来指导编译过程,经过编译后伪指令最终不会生成机器码. 两种不同风格的ARM指令 ARM官方的ARM汇编风格:指令一般用大写.Windows中IDE开发环境(如ADS.MDK等)常用.如: LDR R0, [R1] GNU风格的ARM汇编:指令一般用小写字母.linux中常用.如:…
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…