随笔分类 -  汇编

摘要:知识点: l 标志位 置位相关指令 l 标志寄存器PSW 标志寄存器PSW(程序状态字寄存器PSW) 标志寄存器PSW是一个16为的寄存器。它反映了CPU运算的状态特征并且存放某些控制标志。8086使用了16位中的9位,包括6个状态标志位和3个控制标志位。 15 14 13 12 11 10 9 8 阅读全文
posted @ 2017-02-07 16:45 whzym111 阅读(2483) 评论(0) 推荐(0)
摘要:一、SETG SETZ(SETE) //取ZF标志位值 放到寄存器里 SETNZ(SETNE) == > SETG //setg cl//ZF==0 并 SF==0 并 OF==0 时 cl=1; //> =时设定操作数值1 ,否则为0 //一般与cmp指令组合使用 标志位: JGE对标志位的需求 SF=OF 时 操作的值=1 二、SETLE指令 SE... 阅读全文
posted @ 2017-02-07 15:55 whzym111 阅读(11845) 评论(0) 推荐(0)
摘要:知识点: 汇编指令 lodsb,lodsw,lodsd 一、汇编指令LODSB //scasb scasw scasd //stosb stosw stosd 1、 __asm lodsb //作用 mov al,byte ptr [esi] ; esi=esi+sizeof( byte); 2、 __asm rep lodsb // //取字符串元素到... 阅读全文
posted @ 2017-02-07 15:33 whzym111 阅读(1832) 评论(0) 推荐(1)
摘要:知识点: 汇编指令 STOSB STOSW STOSD 一、汇编指令STOSB 004113AC 8DBD B4FEFFFF LEA EDI,DWORD PTR SS:[EBP-14C] 004113B2 B9 53000000 MOV ECX,53 004113B7 B8 CCCCCCCC MOV EAX,CCCCCCCC 004113... 阅读全文
posted @ 2017-02-07 15:12 whzym111 阅读(3418) 评论(0) 推荐(0)
摘要:一、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); ... 阅读全文
posted @ 2017-02-07 14:45 whzym111 阅读(3678) 评论(0) 推荐(0)
摘要:一、用纯汇编封装函数strcmpW 1、用repnz scasw计算字串长度 2、用repz cmpsw比较字串内容 3、把比较的结果存放在EAX里边返回 __declspec(naked) int strcmpw(WCHAR* s1,WCHAR *s2)// scasw strcmpW { __asm { push ebp mov ebp,esp ... 阅读全文
posted @ 2017-02-07 14:32 whzym111 阅读(1733) 评论(0) 推荐(0)
摘要:知识点: REPE/REPZ 指令 CMPSB 指令 一、CMPSB //cmp //sub //SCASB//scasw//scasd cmp byte ptr [edi],al //对标志位的影响相当于sub指令 word,dword //同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI;如果DF... 阅读全文
posted @ 2017-02-07 10:47 whzym111 阅读(13294) 评论(0) 推荐(0)
摘要:知识点: REPNE/REPNZ 指令 SCASW 指令 SCASD 指令 SCAS 指令 一、SCASW 指令 //SCASB cmp word ptr [edi],al //对标志位的影响相当于sub指令 //同时还会修改寄存器EDI的值:如果标志DF为0,则 inc EDI;如果DF为1,则 dec EDI。 二、SCA... 阅读全文
posted @ 2017-02-07 10:39 whzym111 阅读(8725) 评论(0) 推荐(0)
摘要:知识点: 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]... 阅读全文
posted @ 2017-02-07 10:11 whzym111 阅读(5777) 评论(0) 推荐(0)
摘要: XOR运算  按位异或^ 一、按位异或^ 运算符^ 1^1=0;0^0=0; //相同则为0 0^1=1;1^0=1; //不相同为1 1101^0110=1011; // asm_XOR.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { uns... 阅读全文
posted @ 2017-02-07 09:49 whzym111 阅读(3298) 评论(0) 推荐(0)
摘要:知识点:  (NOT)按位取反指令  逻辑取反(!)  按位取反(~)  SETZ(SETE) 取ZF位值保存  SETNZ(SETNE)将ZF位值取反后保存 一、逻辑取反(!) !111 =0; !0=1; SETZ(SETE) //取ZF标志位值 放到寄存器里 SETNZ(SETNE) 二、按位取反NOT指令 VC中提供运算符为(~) 1... 阅读全文
posted @ 2017-02-07 09:29 whzym111 阅读(19014) 评论(0) 推荐(0)
摘要: AND运算  逻辑与&&  按位与& 一、AND运算 1&&12=1; 12&&0=0; 0&&1=0; 00401000 /$ 55 PUSH EBP 00401001 |. 8BEC MOV EBP,ESP 00401003 |. 83EC 10 SUB ESP,10 00401006 |. C7... 阅读全文
posted @ 2017-02-07 09:15 whzym111 阅读(1308) 评论(0) 推荐(0)
摘要:知识点:  OR运算  逻辑或  按位或 一、OR运算 12||1=1; 1||01=1; 0||0=0; || //逻辑或 | //按位或 int _tmain(int argc, _TCHAR* argv[]) { int i,j,k; /*i=21; j=65;*/ i=0x33; //0110011 j=0x66; //11001... 阅读全文
posted @ 2017-02-06 17:55 whzym111 阅读(804) 评论(0) 推荐(0)
摘要:知识点:  循环位移指令 ROL  循环位移指令 ROR 一、循环位移指令 ROL ROR int i=0x77886611;//01110111100010000110011000010001 _asm { //01110111100010000110011000010001 ->1 //10111011110001000011001100001000 //... 阅读全文
posted @ 2017-02-06 17:36 whzym111 阅读(3507) 评论(0) 推荐(0)
摘要:知识点: shr 逻辑右移指令 shl 逻辑左移指令 一、SHL 逻辑左移指令测试 shr 逻辑右移指令 右移一位相当于整除2 shl 逻辑左移指令 左移一位相当于乘2 //很多时候会溢出 //>> 右移 //<< 左移 unsigned int i=0x66332211; unsigned int j=0; j=i<<1; j=i<<2; j=i<<8;//左移... 阅读全文
posted @ 2017-02-06 16:59 whzym111 阅读(4958) 评论(0) 推荐(0)
摘要:知识点:  浮点指令 fsub 一、浮点指令fsub 格式 fsub memvar // st0=st0-memvar 知识点:  浮点指令 fmul 一、浮点指令fmul 格式 fmul memvar // st0=st0*memvar int _tmain(int argc, _TCHAR* argv[]) { double f1,f2;... 阅读全文
posted @ 2017-02-06 15:48 whzym111 阅读(7924) 评论(0) 推荐(0)
摘要:知识点:  浮点数的存放方式  st0至st7  FLD,FST,FADD指令 一、浮点数的存放方式 00401000 /$ 55 PUSH EBP 00401001 |. 8BEC MOV EBP,ESP 00401003 |. 51 PUSH ECX ... 阅读全文
posted @ 2017-02-06 15:34 whzym111 阅读(10472) 评论(0) 推荐(0)
摘要:do while生成的汇编代码  do while汇编还原成C++代码 一、 do while成生的汇编代码 // int i=0; // do // { // i++; // } while (iMOV DWORD PTR SS:[EBP-4],0 ; i=0; //0040100B |> 8B45 FC /MOV EAX,DWOR... 阅读全文
posted @ 2017-02-06 14:37 whzym111 阅读(925) 评论(0) 推荐(0)
摘要:知识点: inc 加1指令 dec 减1指令 一、加一指令inc inc a 相当于 add a,1 //i++ 优点 速度比sub指令快,占用空间小 这条指令执行结果影响AF、OF、PF、SF、ZF标志位,但不影响CF进位标志位. 二、减一指令dec dec a 相当于 sub a,1 004012D7 > 83E8 01 SUB EAX,1 004012DA... 阅读全文
posted @ 2017-02-06 14:23 whzym111 阅读(36814) 评论(0) 推荐(0)
摘要:知识点: for循环生成代码1 for循环生成代码2 inc指令 一、一般情况下的for循环汇编代码分析 for (int i=1;iMOV DWORD PTR SS:[EBP-4],1 ; i=1; //0040100B |. EB 09 JMP SHORT for.00401016 //0040100D |> 8B45 ... 阅读全文
posted @ 2017-02-06 14:04 whzym111 阅读(3172) 评论(0) 推荐(0)