汇编
liaomin416100569
这个作者很懒,什么都没留下…
展开
-
进制转换
十进制表示方法:101D或者101二进制表示方法:1011B八进制表示方法:14533O十六进制表示方法:222ABCDEFHn进制转换成10进制2进制转换成10进制Math.pow(a, b) 表示求a的b次幂位置:76543210数值:110011011*Math.pow(2, 7) +1*Math.pow(2,原创 2012-03-08 11:14:07 · 1220 阅读 · 1 评论 -
寄存器和立即数和内存单元
所有对寄存器的指令操作 都是操作寄存器中的值 比如 mov ax,3 将 立即数3 赋值给ax 而不是将3写入了某个内存 只是写入了ax这个寄存器中 只有通用寄存器才能操作立即数 其他断寄存器 以及内存单元都要通过通用寄存器来中转比如 mov ax,4mov ds,3 --错误的mov ds,ax --正确的 如果要操作内存中的数据 必须操作 ds 数据的寄原创 2013-06-30 10:59:18 · 2465 阅读 · 0 评论 -
debug命令的使用
cmd命令中敲入 debug弹出debug命令窗口命令简介:r命令用于查看和修改寄存器的内容 这里只是修改基地址和偏移地址而已d命令查看内存中的内存 例如:d CS:0160 这里的结果使用16进制表示u命令查看内存中的汇编代码 u CS:0160 这里的结果使用汇编指令表示t命令用于单步执行汇编代码a命令用于原创 2012-03-09 10:54:03 · 900 阅读 · 0 评论 -
什么是原码反码补码 计算机中负数的表示
原码:将一个整数,转换成二进制,就是其原码。如单字节的5的原码为:0000 0101;-5的原码为1000 0101。反码:正数的反码就是其原码;负数的反码是将原码中,除符号位以外,每一位取反。如单字节的5的反码为:0000 0101;-5的原码为1111 1010。补码:正数的补码就是其原码;负数的反码+1就是补码。如单字节的5的补码为:0000 0101;-5的原码为1111 1011转载 2012-03-08 14:53:42 · 1372 阅读 · 3 评论 -
寄存器的英文全称
AH&AL=AX(accumulator):累加寄存器 BH&BL=BX(base):基址寄存器 CH&CL=CX(count):计数寄存器 DH&DL=DX(data):数据寄存器 SP(Stack Pointer):堆栈指针寄存器 BP(Base Pointer):基址指针寄存器 SI(Source Index):源变址寄存器 DI(Destination Index):目的变址转载 2015-04-15 16:47:35 · 9282 阅读 · 1 评论 -
汇编helloword代码
ASSUME CS:CODES,DS:DATAS,SS:STACKSDATAS SEGMENT ;此处输入数据段代码 msg db "first","k111",112DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码STACKS ENDSCODES SEGMENT ;这里表示告诉汇编编译器 这原创 2012-03-10 12:24:13 · 975 阅读 · 0 评论 -
指令和伪指令和宏指令区别
指令:编译软件最终编译成机器码伪指令:不编译成机器码 只是告诉编译器应该怎么做宏指令 : 将一堆指令合并编写 完成一个特定的任务 这里要让编译器知道是否是宏指令就需要伪指令声明这里比如 lea命令和offset命令lea为机器指令 offset为伪指令比如lea ax,[1] 就是一条机器指令 在执行时将ds的第一个字节的偏移地址写给ax也就是 1mov原创 2015-04-16 11:21:27 · 4141 阅读 · 0 评论 -
EVEN,ALIGN,ORG,dup指令的理解
因为在汇编机器语言中存在 ds ds是连续的数据段 直接使用ds写入 过程麻烦masm使用伪指令 来定义数据类型 并且自动写入ds段安装 winmasm v2.2 调试如下例子 学习4个指令的区别data segment a1 db 12H ;这里表示下一个数据的存放位置为 偶数位的地址 如果下一位 ;是奇数则空出来一位 找到偶数为 才存数据原创 2015-04-16 19:36:28 · 1095 阅读 · 0 评论 -
进位与溢出
Cy位是进位位,用来表示本次无符号数运算结果的溢出溢出。由于无符号数的最高有效位只有数位意义而无符号意义,所以该位所产生的进位应该是本次运算结果的实际进位值。所以说:进位位Cy是在给定二进制数的位数范围内,代表了本次运算结果的溢出情况。另一方面,它所保存的进位值有时也是有用的。例如,双字长运算时,可以利用进位值把低位字的进位计入高位字。 OV位表示溢出。溢出位是用来表示带符号数转载 2015-04-21 09:21:39 · 2714 阅读 · 0 评论 -
函数声明后面加个stdcall是什么意思
函数声明后面加个stdcall是什么意思 在Win32汇编中,我们经常要和Api打交道,另外也会常常使用自己编制的类似于Api 的带参数的子程序,本文要讲述的是在子程序调用的过程中进行参数传递的概念和分析。一般在程序中,参数的传递是通过堆栈进行的,也就是说,调用者把要传递给子程序(或者被调用者)的参数压入堆栈,子程序在堆栈取出相应的值再使用,比如说,如果你要调用 SubRouting(Va原创 2012-11-06 19:35:40 · 3436 阅读 · 1 评论 -
什么是OEP
OEP OEP:(Original Entry Point),程序的入口点为加壳的程序 oep表示程序的入口点 加壳的程序会隐藏oep 找到真正的oep可以脱壳 并且反向调试程序原创 2015-05-07 20:19:48 · 2287 阅读 · 0 评论 -
汇编语言常用的标志寄存器
什么是标志寄存器就像我们在第一章看到的,在 OllyDbg 寄存器信息的下方显示的就是标志寄存器。原创 2015-04-20 10:53:47 · 3022 阅读 · 0 评论 -
三条总线作用
总线分为 3种 地址总线,数据总线,控制总线 比如 要往内存地址a 写入 1 三条总线配合如下cpu通过 地址总线发送内存地址a到内存中 内存定位到a地址 cpu通过数据中线发送1到内存a地址 cpu通过控制总线发送写的指令 内存将1写入a地址怎么确定二进制是数据还是地址了进入地址总线的就是地址 进入数据总线的就是数据原创 2013-06-26 14:12:14 · 1373 阅读 · 0 评论 -
基地址和偏移地址的概念
首先必须明白 cpu和内存的区别cpu 中央处理器 内存是物理数据存放的地方cpu不直接存放数据而是通过内存来存放数据cpu和内存之间通过20条地址总线相连接,地址总线就是cpu通过地址找到对应的内存的物理数据的传递工具计算机只能处理0,1 二进制数据每一条线可以处理 0,1 两种类型数据所以20根线的 总共能拥有 2^20=1048576个不相同的地址 也就是能搜索 10原创 2012-03-09 09:59:42 · 16881 阅读 · 7 评论 -
什么是32位汇编的flat平坦内存模式
16位下 内存必须通过 段和偏移地址 去找到对应的内存 位置 每个段只能处理64K个地址32位置下 能够处理的地址总数达到 2的 32次方 也就是 4294967296个地址=4GB的内存空间就不再需要 将数据划分成段 了可以用任意的段寄存器寻址任意的地址空间 不再需要偏移地址Windows 在内部频繁使用 ESI,EDI,EBP,EBX 寄存器原创 2012-11-06 19:31:16 · 3792 阅读 · 1 评论 -
PC机的内存分配空间小记
PC机的内存分配空间如下0000-9FFFF表示猪存储空间A0000-BFFFF表示显存空间C0000-FFFFF表示各类rom空间原创 2012-03-09 15:50:37 · 636 阅读 · 0 评论 -
寄存器中cs,ds,ss,es的区别
首先 cpu中寄存器用于存储内存中数据的物理地址cs 为代码段寄存器,一般用于存放代码; 通常和IP 使用用于处理下一条执行的代码cs:IP基地址:偏移地址cs地址对应的数据 相当于c语言中的代码语句ds 为数据段寄存器,一般用于存放数据; ds地址对应的数据 相当于c语言中的全局变量ss 为栈段寄存器,一般作为栈使用 和sp搭档; ss地址对应原创 2012-03-09 10:40:38 · 36595 阅读 · 2 评论 -
显存相关概念
一般显存的显示模式有 S-VIDEO、DVI、VGA、HDMI模式等而显存中的地址范围A0000-BFFFF中分别存放这些显示模式B8000H-BFFFFH共32k的地址空间是80*25彩色字符模式(VGA模式)的显示缓冲区任何字符串写入该地址将被vga显示字体属性格式7 6 5 4 3 2 1 0BL R G B I R G B闪烁 背景色 高亮原创 2012-03-09 15:59:20 · 713 阅读 · 0 评论 -
中断向量表小计
1. 系统引导时,中断向量表放在内存何处? 系统刚引导时,内存0x00000到0x0003FF共1KB的空间用于存放中断向量表。每个中断向量占用4个字节,共可存储256个中断向量。2. 系统引导时,处在实模式下,只可寻址1MB,为什么要用4个字节来寻址中断呢处理程序? 刚看到的时候,我也很纳闷。我们都知道编程的时候指针都是4个字节的,可以寻址4GB,在实模式下完全可以少转载 2012-03-10 12:50:41 · 924 阅读 · 0 评论 -
存储单元的存储方式
存储单元中所存放的二进制信息通常称为该存储单元的内容或值,并且规定: 一个字节的内容是该字节单元内存放的二进制信息; 一个字的内容是该字地址所指向的单元及其后继一个单元的内容拼接而成; 一个双字的内容是该字地址所指向的单元及其后继三个单元的内容拼接而成。在拼接“字内容”时,我们按“高高低低”的原则来处理,即:高存储单元(地址大的存储单元)的值是“字内容”的高8位原创 2012-03-29 10:21:24 · 1293 阅读 · 0 评论 -
汇编中div指令使用
当除数是字节 也就是8位的时候 被除数必须是16位 被除数存放在ax寄存器中 除数放在bl中除到得 结果是 商是8位放在al中 余数放在ah中例子mov ax,0006hmov bl,02hdiv bl使用debug调试时 查看结果执行div bl查看ax的结果是 0003可看出 ah=00al=03商是3 余数是0当除数是字 也就是16位原创 2012-03-28 10:37:31 · 15790 阅读 · 0 评论 -
masm中常用的伪指令
ASSUME CS:code,DS:data;用于定义段例如:assume cs:code,ds:dataSEGMENTENDS;用于定义数据或者代码例如:data segment msg db "122" bbs db 99,2d,3ddata endsSTART:END START;定义程序的入口点原创 2012-03-29 12:14:06 · 2004 阅读 · 0 评论 -
ASCII码表
八进制十六进制十进制字符八进制十六进制十进制字符00000nul1004064@01011soh1014165A02022stx1024266B03033etx1034367C04044e原创 2012-03-29 14:08:58 · 575 阅读 · 0 评论 -
汇编中变量定义的存储方式
data segmentINTVALUE DB 6 ;使用别名的方式来定义字节变量 DB 'A', 'D', 0Dh, '$' ;不使用别名定义必须通过ds偏移来获取值LOOPTABLE DB 1, 3, 5, 7, 9, 11,? ;data endsDB 'A' 存储在内存中的是A的ascii值DB 99 存储在内存中的是99 但原创 2012-03-29 11:47:48 · 3686 阅读 · 0 评论 -
汇编中基本的数据类型
1、字节(DB)define byte一个字节有8位二进制组成,其最高位是第7位,最低位是第0位。在表示有符号数时,最高位就是符号位。00001001 =910001011 = -11 有符号 = 139 无符号通常情况下,存储器按字节编址,读写存储器的最小信息单位就是一个字节。Var_byte原创 2012-03-10 22:57:48 · 5195 阅读 · 0 评论 -
16位下的寄存器一览
1 16位微机的内存管理模式 1 16位微机的内存管理模式 2 32位微机的内存管理模式 2 32位微机的内存管理模式 寄存器的分类寄存器主 要 用 途通用寄 存 器数据 寄存器AX乘、除运算,字的输入输出,中间结果的缓存A原创 2012-11-06 17:21:28 · 2665 阅读 · 0 评论 -
使用汇编语言实现if else 循环 函数调用
需要使用汇编来演示如下代码 需要下载ollydbg汇编调试器 点击File-Open随意打开一个exe文件 我这里随便找到c:/windows/explorer.exe文件这里EIP的值表示下一次运行需要执行的代码位置原创 2016-08-06 12:13:45 · 13926 阅读 · 0 评论