随笔分类 -  汇编基础

摘要:从本篇文章开始,将全面阐述__try,__except,__finally,__leave异常模型机制,它也即是Windows系列操作系统平台上提供的SEH模型。将在这里与大家分享SEH( 结构化异常处理)的学习过程和经验总结。 深入理解请参阅<<windows 核心编程>>第23, 24章. SE 阅读全文
posted @ 2019-05-07 17:11 鑫鑫1 阅读(819) 评论(1) 推荐(1)
摘要:汇编32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、 阅读全文
posted @ 2018-03-25 23:15 鑫鑫1 阅读(2424) 评论(0) 推荐(0)
摘要:debug版本 esp 栈顶指针 ebp 存放堆栈指针 空程序:int main(){00411360 push ebp ;压入ebp00411361 mov ebp,esp ;ebp = esp,保留esp,待函数调用完再恢复,因为函数调用中肯定会用到esp.00411363 sub esp,0C 阅读全文
posted @ 2016-06-25 02:27 鑫鑫1 阅读(412) 评论(0) 推荐(0)
摘要:1.下面这段代码运行的结果是什么?#include #include DWORD dz=0;DWORD dz1=0;void fun1(){ __asm { mov eax, dz push eax ret }}void main(){ HMODULE h = GetModuleHan... 阅读全文
posted @ 2015-07-14 15:25 鑫鑫1 阅读(420) 评论(0) 推荐(0)
摘要:#include #include //堆栈平衡原理//如果要返回父程序,则当我们在堆栈中进行堆栈的操作的时候,一定要保证在RET这条指令之前,ESP指向的是我们压入栈中的地址。//当执行call dword ptr[fun1]语句, esp=esp-4, push eip到堆栈void f... 阅读全文
posted @ 2015-07-09 17:06 鑫鑫1 阅读(843) 评论(0) 推荐(0)
摘要:C语言 内嵌汇编void main(){char ps[20] = "aaaaaaaaaa\n";char *p1 =ps;//用汇编语句改写下面2句代码ps[3]='b';printf(ps);}//等价的写法1:void main(){char ps[20] = "aaaaaaaaaa\n";c... 阅读全文
posted @ 2015-07-09 16:57 鑫鑫1 阅读(242) 评论(0) 推荐(0)
摘要:分析程序1:C语言代码如下#include void fun(int na, int nb){int nc = na+nb;printf("one\n");}void fun1(){printf("two\n");}void main(){fun(55,66);fun1();}汇编代码. 详细标出e... 阅读全文
posted @ 2015-07-06 18:32 鑫鑫1 阅读(1422) 评论(0) 推荐(0)
摘要:用法1:: jmp short 标号(转到标号处执行指令)这种格式的 jmp 指令实现的是段内短转移,它对IP的修改范围为 -128~127,也就是说,它向前转移时可以最多越过128个字节,向后转移可以最多越过127个字节。段内转移,只修改IP,比如jmp ax段间转移,同时修改CS和IP,比如jm... 阅读全文
posted @ 2015-06-03 17:57 鑫鑫1 阅读(2042) 评论(0) 推荐(1)
摘要:计算机的最高位为符号位 1表示负数, 0表示正数8位,最多表示256个数, 范围 -128-1270111 1111 1271000 0001 -127规定 1000 0000 定为 -128的补码,就是-0, 也就是016位,最多表示65536个数, 范围 -32768-327670111 111... 阅读全文
posted @ 2015-06-03 15:18 鑫鑫1 阅读(365) 评论(0) 推荐(0)
摘要:div指令1.除数:有8位和16位两种,在一个寄存器或者内存中。2、被除数:默认放在AX或(DX和AX)中,如果除数为8位,被除数为16位,被除数默认在AX中存放,如果除数为16位,被除数为32位,被 除数则在(DX和AX)中存放,DX存放高16位,AX存放低16位。题目1assume cs:cod... 阅读全文
posted @ 2015-05-29 17:58 鑫鑫1 阅读(279) 评论(0) 推荐(0)
摘要:一.8086 16位CPU寄存器16个寄存器:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di通用寄存器:ax,bx,cx,dx 8位寄存器: ah,al,bh,bl,ch,cl,dh,dl,兼容8位cpu。sp:堆栈指针寄存器,指向栈顶bp:指针寄存器... 阅读全文
posted @ 2015-05-27 15:05 鑫鑫1 阅读(486) 评论(0) 推荐(0)
摘要:程序0:把字符串 "adcdef"转换成大写, 把字符串 "FGHJK"转换成小写data segmentdb 'adcdef'db 'XCVBNM'data endscode segmentstart:mov ax,datamov ds,axmov bx,0mov cx,6mov di,0s:mo... 阅读全文
posted @ 2015-05-25 16:16 鑫鑫1 阅读(388) 评论(0) 推荐(0)
摘要:8086CPU的指令,可以处理两种尺寸的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。对于这个问题,汇编语言中用一下方法处理。(1)通过寄存器名指明要处理的数据的尺寸。例如:下面的指令中,寄存器指明了指令进行的是字操作:mov ax,1mov bx,ds:[0]m... 阅读全文
posted @ 2015-01-21 11:30 鑫鑫1 阅读(370) 评论(0) 推荐(0)
摘要:基本概念1: 1.CPU中 用16位寄存器存放一个字, 高8位存放高位字节,低8位存在低位字节如图可以如下理解概念1. 0 1 两个内存单元存到的是4E20H, 0低地址, 1高地址, 0 1可以看出1个起始地址为0的字单元,存放4E20H(20000)2. 2 3 两个内存单元存到的是0012H,... 阅读全文
posted @ 2015-01-12 09:46 鑫鑫1 阅读(246) 评论(0) 推荐(0)
摘要:8086CPU特性:1.运算器一次最多可以处理16位数据,寄存器最大宽度为16位,寄存器和运算器之间的通路为16位2.8086CPU有20位地址总线,1M寻址能力,086CPU又是16位结构,64KM寻址能力1M寻址能力: 11111111111111111111 10485751024*10236... 阅读全文
posted @ 2015-01-06 15:42 鑫鑫1 阅读(639) 评论(0) 推荐(0)
摘要:一、数据传输指令─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. ... 阅读全文
posted @ 2014-12-21 22:47 鑫鑫1 阅读(634) 评论(0) 推荐(0)