随笔分类 - 汇编语言
汇编中Enter与Leave指令
摘要:Enter的作用相当==push ebp和mov ebp,esp这后面两句大家很熟悉吧?函数开始一般都是这两句Leave的作用相当==mov esp,ebp和pop ebp而这后面这两句也很常见,函数调用完后一般的用到以上的Enter和leave的作用分别函数开始和结束Win32汇编中局部变量的使用...
阅读全文
汇编语言中"[]"的用法
摘要:"[]"的用法在"常见问题"已经有所说明,引用如下:1、push dword ptr [024c1100] 压栈024c1100值的双字 2、cmp eax,[ebp+14] eax-ebp+14的有效值,不保留值,主要看标志位 3、cmp byte ptr [eax],46 字节型ea...
阅读全文
补码的运算
摘要:在计算机系统中,数据的表示与存储都是以0或1的形式,而表示这些0或1,我们可以将外部数据通过数字电路进行编码,对于有符号数,在计算机系统中有三种编码,即我们通常所了解的编码:原码,反码,补码,而无符号数没有原码,反码,补码之分,况且,我觉得在计算机存储系统领域讨论无符号数是没什么意义的原码:正数原码...
阅读全文
二补数
摘要:二补数二补数(2's complement)是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。在中国大陆称作补码,台湾和香港称为二补数。一个数字的二补数就是将该数字作比特反相运算(即一补数或反码),再将结果加 1。在二补数系统中,一个负数就是用其对应正数的二补数...
阅读全文
原码 & 反码 & 补码 & 详解
摘要:本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助!一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器...
阅读全文
LEA指令
摘要:LEA是微机8086/8088系列的一条指令,取自英语Load effect address——取有效地址,也就是取偏移地址。在微机8086/8088中有20位物理地址,由16位段基址向左偏移4位再与偏移地址之和得到。地址传送指令之一。取偏移地址指令指令格式如下:LEA reg16,memLEA指令...
阅读全文
逻辑地址与物理地址
摘要:逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分...
阅读全文
物理地址 = 段地址*10H + 偏移地址
摘要:程序如何执行: CPU先找到程序在内存中的入口地址 -- 地址总线 (8086有20根地址总线,每一根可以某一时传0或1, 20位的二进制数字可以表示的不同的数字的个数是2^20=1048576 1048576 byte/1024=1024 KB (注:8bit(位)=1Byte(字节)1024By...
阅读全文
堆栈与内存
摘要:堆 & 栈的区别一 英文名称堆和栈是C/C++编程中经常遇到的两个基本概念。先看一下它们的英文表示:堆――heap栈――stack二 从数据结构和系统两个层次理解在具体的C/C++编程框架中,这两个概念并不是并行的。深入到汇编级进行研究就会发现,栈是机器系统提供的数据结构,而堆是由C/C++函数库提...
阅读全文
大端序与小端序
摘要:何为大端序,小端序?简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序 了。注意字节序是硬件层面的东西,对于软件来说通常是透明的。再说白一点,字节序通常只和你使用的处理器架构有关,而和编程语言无关,比如常见的 I...
阅读全文
中断分类
摘要:中断是处理器处理外部突发事件的一个重要技术。它能使处理器在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回断点,继续进行处理器原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内...
阅读全文
汇编指令CLI/STI
摘要:CLI 禁止中断发生STI 允许中断发生 这两个指令只能在内核模式下执行,不可以在用户模式下执行;而且在内核模式下执行时,应该尽可能快的恢复中断,因为CLI会禁用硬件中断,若长时间禁止中断会影响其他动作的执行(如移动鼠标等等),系统就会变得不稳定。在标志寄存器中中断标志清零的情况下,可以以“int ...
阅读全文
汇编之FS段寄存器
摘要:FS寄存器指向当前活动线程的TEB结构(线程结构)偏移 说明000 指向SEH链指针004 线程堆栈顶部008 线程堆栈底部00C SubSystemTib010 FiberData014 ArbitraryUserPointer018 FS段寄存器在内存中的镜像地址020 进程PID024 线程...
阅读全文
汇编指令速查表
摘要:一、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆...
阅读全文
汇编invoke和call的关系
摘要:win32汇编里面,我们既可以用invoke也可以用call调用子程序/函数,不过invoke使用简单方便,所以绝大多数情况我们都用invoke。但是很多人只是知道使用它,对它却不是很了解。我以前对这个问题也是一直没搞透彻,说实话,之前借的汇编书讲解的实在有些烂,NND连个上机调试的方法都没有。学东...
阅读全文
十进制到十六进制转换程序
摘要:源代码:dectohex segmentassume cs:dectohexmain proc farrepeat:call dectobincall crlfcall bintohexcall crlfjmp repeatmain endpdectobin proc nearmov bx,0newchar:mov ah,1int 21hsub al,30hjl exitcmp al,9djg exitcbwxchg ax,bxmov cx,10dmul cxxchg ax,bxadd bx,axjmp newcharexit:retdectobin endpbintohex proc nea
阅读全文
二进制到十六进制转换程序
摘要:源代码:program segmentmain proc farassume cs:programstart:push dssub ax,axpush axmov ch,4roate:mov cl,4rol bx,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printitadd al,7hprintit:mov dl,almov ah,2int 21hdec chjnz roateretmain endpprogram endsend
阅读全文