
x86汇编
文章平均质量分 66
syf442
这个作者很懒,什么都没留下…
展开
-
王爽之《汇编语言》学习重点
第1章 基础知识1.1 机器语言 机器语言是机器指令的集合。机器指令展开来讲就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行运算。 每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。原创 2009-07-30 09:31:00 · 4508 阅读 · 3 评论 -
Win32汇编开发环境介绍和RadAsm简明教程
现在很多朋友都在学习汇编语言,一方面汇编语言是大学计算机课程的必修课,另一方面则是为了从其它语言转到汇编语言来,无论什么原因,我认为学习汇编语言是件很有趣的事,学习它不但可以深入了解编程语言的内部表现,也是进一步了解操作系统的途径。可是很多朋友不知道汇编语言也可以开发基于Windows的窗口程序,现在64位CPU都已经在应用了,而在学校学的汇编还是十年前的8086/8088汇编语言转载 2009-08-21 10:23:00 · 1682 阅读 · 1 评论 -
CPU寄存器
寄存器是CPU内部重要的数据存储资源,是汇编程序员能直接使用的硬件资源之一。 由于寄存器的存取速度比内存快,所以,在用汇编语言编写程序时,要尽可能充分利用寄存器的存储功能。 寄存器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。在高级语言(如:C/C++语言)中,也有定义变量为寄存器类型的,这就是提高寄存器利用率的一种可行的方法。 另外,由于寄转载 2009-08-25 14:59:00 · 801 阅读 · 0 评论 -
王爽之《汇编语言》学习重点十
第六章 包含多个段的程序 前面我们说0:200~0:300这段内存空间是相对安全的,可这段空间容量只有256个字节。在操作系统环境中,合法地通过操作系统取得的空间都是安全的,因为操作系统部会让一个程序所用的空间和其他程序以及系统自己的空间相冲突。在操作系统允许的情况下,程序可以取得任意容量的空间。 程序取得所需空间的方法有两种,一是在加载程序的时候为程序分配,再就是程序在执原创 2009-08-25 10:14:00 · 1013 阅读 · 0 评论 -
王爽之《汇编语言》学习重点十一
实验五 编写、调试具有多个段的程序(1)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题:assume cs:code,ds:data,ss:stackdata segment dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbah,0987Hdata endsstack segment dw 0,0,0,0,0,0,0,0stack e原创 2009-08-27 14:55:00 · 1059 阅读 · 2 评论 -
汇编与常用机内码
一.机械码,又称机器码.ultraedit打开,编辑exe文件时你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码.修改程序时必须通过修改机器码来修改exe文件.二.需要熟练掌握的全部汇编知识(只有这么多)不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主转载 2009-09-01 11:08:00 · 699 阅读 · 0 评论 -
条件转移指令表格
分类指 令转 移 条 件说 明(Ⅰ) JZ/JEZF=1为零/相等, 则转移JNZ/JNEZF=0不为零/不相等, 则转移JSSF=1为负, 则转移JNSSF=0为正, 则转移JOOF=1溢出, 则转移JNOOF=0不溢出, 则转移JPPF=1奇偶位为1, 则转移JNPPF=0奇偶位为0, 则转移JCCF=1进位位为1, 则转移JNCCF=0进位位为0, 则转移(Ⅱ) JB/JNAE/JCCF=1低于/不高于等于, 则转移JNB/JAE/JNCCF=0不低于/高于等于, 则转移JBE/J原创 2010-11-29 14:47:00 · 1247 阅读 · 2 评论 -
ULONGLONG乘法分析
64位乘法分析:VC6 Console Code:int main(int argc, char* argv[]){ ULONGLONG a = 0x87654321; ULONGLONG b = 0x100000001; a*=b; //::MessageBox(NULL,"Content","Title",MB_OK); return 0;}Debug模式下汇编Code:9: ULONGLONG a = 0x87654321原创 2010-12-15 15:03:00 · 1880 阅读 · 0 评论 -
各种标志位的含义
一、运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。2、奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程转载 2010-11-11 16:19:00 · 1907 阅读 · 0 评论 -
ASM集成开发环境选择
非常实用的MASM 16Bit DOS 程序IDE:MASMPlus MASMPlus 1.2 可定制性很高,可以进行很多个性化的设置。提供了方便的设置来编译Dos程序:配置—系统配置—编译/脚本,勾选“单独文件默认实用DOS模式(第二链接器)”,之后就可以编译.asm了。MASMPlus调试: 找到Windows自带的Debug.exe,配置—系统配置—工具,添加Debug.exe,在运行参数中加上:“当前文件目录/当前文件名字.exe”: “ $(FileDir)/$(FileName).原创 2010-11-22 14:48:00 · 1170 阅读 · 2 评论 -
MASM32 开发环境和MASM
<br />MASM32是一个为那些对学习或者编写32位微软汇编(MASM)感兴趣的程序员提供的工作环境,它最流行的版本是8.0版,而我所知道最新版本是9.0版。但是请大家一定要注意,这里的8.0版和9.0版不是指MASM编译器(即ML)的版本,而是MASM32开发环境的版本。经常看到网上有网友发的贴把这两个概念都搞混了。<br />那么MASM(ML)编译器的版本到底有哪些呢?教学上常用的版本是5.0版的,之前还有个4.0版的记得“全国计算机等级三级考试”就是用的4.0版。5.0版之后有个5.1版本,在这转载 2010-11-24 13:41:00 · 1388 阅读 · 0 评论 -
在VC中使用内联汇编
一、内联汇编的优缺点 因为在Visual C++中使用内联汇编不需要额外的编译器和联接器,且可以处理Visual C++中不能处理的一些事情,而且可以使用在C/C++中的变量,所以非常方便。内联汇编主要用于如下场合: 1.使用汇编语言写函数; 2.对速度要求非常高的代码; 3.设备驱动程序中直接访问硬件; 4."Naked" Call的初始化和结束代码转载 2011-11-22 11:25:00 · 508 阅读 · 0 评论 -
一个构建窗体的汇编代码
.386.model flat, stdcalloption casemap:noneinclude /masm32/include/windows.incinclude /masm32/include/kernel32.incinclude /masm32/include/user32.incinclude /masm32/include/gdi32.incincludelib /mas转载 2009-08-20 13:30:00 · 487 阅读 · 0 评论 -
王爽之《汇编语言》学习重点九
第五章 [bx]和loop指令 1. [bx]和内存单元的描述 mov ax,[0] 表示将一个内存单元的内容送入ax,这个内存单元的长度为2字节,存放一个字,偏移地址为0,段地址在ds中。 mov al, [0] 表示将一个内存单元的内容送入al, 这个内存单元的长度为1字节(字节单元),存放一个字节,偏移地址为0,段地址在ds中。 我们要完整地描述一原创 2009-08-11 09:07:00 · 1161 阅读 · 1 评论 -
王爽之《汇编语言》学习重点三
2.5 16位结构的CPU 我们说8086CPU的上一代CPU(8080、8085)等是8位机,而8086是16位机,也可以说8086是16位结构的CPU。那么什么是16位结构的CPU呢? 概括地讲,16位结构(16位机、字长为16位等常见说法,与16位结构的含义相同)描述了一个CPU具有下面几方面的结构特性。 运算器一次最多可以处理16位的数据;原创 2009-07-30 13:34:00 · 1640 阅读 · 0 评论 -
王爽之《汇编语言》学习重点四
2.9 段寄存器 我们前面讲到,8086CPU在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。这里,需要看一下,是什么部件提供段地址。段地址在8086CPU的段寄存器中存放。8086CPU有4个段寄存器:CS、DS、SS、ES。当8086CPU要访问内存时由这4个段寄存器提供内存单元的段地址。本章中只看一下CS。 2.10 CS和IP原创 2009-07-30 15:43:00 · 1435 阅读 · 1 评论 -
王爽之《汇编语言》学习重点二
第2章 寄存器(CPU 工作原理) 一个典型的CPU(此处讨论的不是某一具体的CPU)由运算器、控制器、寄存器(CPU工作原理)等器件构成,这些器件靠内部总线相连。前一章所说的总线,相对于CPU内部来说是外部总线。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。简单地说,在CPU中:运算器进行信息处理;寄存器进行信息存储;控制器控原创 2009-07-30 10:57:00 · 2382 阅读 · 0 评论 -
关于段地址,段的起始地址,基础地址
段地址 * 16 = 基础地址 (段的起始地址) (物理地址) CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址。所以段地址为16位。 以下来源百度: 而段地址是针对内存的分段而言的,将每一段的段首地址定义为段地址.段地址的存在是由系统的分段存储决定的,通过段地址和偏移地址就能对数据进行寻访. 计算它们的物理地址只需要把段地址左移4位原创 2009-07-30 15:11:00 · 4983 阅读 · 0 评论 -
王爽之《汇编语言》学习重点五
2.11 修改CS、IP的指令 在CPU中,程序员能够用指令读写的部件只有寄存器,程序员可以通过改变寄存器中的内容实现对CPU的控制。CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。 我们如何改变CS、IP的值呢?显然,8086CPU必须提供相应的指令。我们如何修改AX中的值?可以用mov指令,如mov原创 2009-07-30 17:06:00 · 3875 阅读 · 2 评论 -
王爽之《汇编语言》学习重点六
第3章 寄存器(内存访问) 3.1 内存中字的存储 ●CPU中用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节●字单元即存放一个字型数据的内存单元,由两个地址连续的内存单元组成;高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节●将起始地址为N的字单元称为N地址字单元,比如:2地址字单元由2、3两个内存单元组成 3原创 2009-08-03 10:28:00 · 1515 阅读 · 1 评论 -
DOS下的DEBUG命令的详细用法
名称 解释 格式 a (Assemble) 逐行汇编 a [address] c (Compare) 比较两内存块 c range address d (Dump) 内存16进制显示 d [address]或 d [range] e (Enter) 修改内存字节 e address [list] f (fin) 预置一段内存 f range list g (Go) 执行程序 g [=address转载 2009-08-04 10:17:00 · 944 阅读 · 0 评论 -
学习汇编前你应该知道的知识
第一讲 学习汇编前你应该知道的知识1 汇编需要什么工具和程序,到哪里下载? 目前阶段,汇编程序仅需要两个程序就够了。 masm.exe,link.exe。二者可由http://www.20cn.org/~unique/Download/Tool/masm.rar下载,前者是编译程序,后者是链接程序。 另外,为了验证和调试程序,还需要一个程序debug.exe,该程序由windows本身就提供,转载 2009-08-04 10:16:00 · 934 阅读 · 0 评论 -
王爽之《汇编语言》学习重点八
第四章 第一个程序 4.2 源程序程序4.1assume cs:codesg codesg segment start: mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4C00H原创 2009-08-06 17:01:00 · 765 阅读 · 0 评论 -
王爽之《汇编语言》学习重点七
3.7 CPU提供的栈机制 栈是一种具有特殊的访问方式的储存空间。栈的数据采用后进先出(LIFO)原则。 现今的CPU中都有栈的设计,8086CPU也不例外。8086CPU提供相关的指令来以栈的方式访问内存空间。这意味着,我们基于8086CPU编程的时候,可以将一段内存当做栈来使用。 8086CPU提供入栈和出栈指令,最基本的两个是PUSH(入栈)和P原创 2009-08-05 13:24:00 · 1358 阅读 · 0 评论 -
x86汇编经验之谈
1.汇编常用指令机器码 mov B8 2. 将寄存器清零 将寄存器清零,如寄存器ax , 可使用指令: mov ax,0 , 此条指令占用3个字节。也可: sub ax,ax , 减法指令, 该条指令只占用2个字节。 3.利用栈交换两个数据 例: (1) 将10000H~1000FH这原创 2009-08-05 16:15:00 · 823 阅读 · 0 评论 -
条件转移指令表
标志位转移指令判定格式说明释义jc 标号如果CF=1,则转至标号处执行judge cfjnc 标号如果CF=0,则转至标号处执行judge cfjo 标号如果OF=1,则转至标号处执行judge ofjno 标号如果CF=0,则转至标号处执行judge cfjp/jpe 标号如果PF转载 2013-07-10 14:23:04 · 583 阅读 · 0 评论