汇编基础知识点汇总
根据汇编语言基础教程这本书,每章节知识点总结
半雨微凉丶
这个作者很懒,什么都没留下…
展开
-
汇编常用寄存器简介
32位寄存器 名称 16位与8位子寄存器 用途 eax 累加器 ax,ah,al 算术与逻辑 ebx 基址寄存器 bx,bh,bl 数组 ecx 计数器 cx,ch,cl 循环 edx 数据寄存器 dx,dh,dl 算术 esi 源索引寄存器 si 字符串与数组 ed...原创 2018-08-01 23:49:21 · 2632 阅读 · 0 评论 -
汇编小结1:变量、寄存器与数据移动
1、汇编指令告诉汇编程序该进行何种操作,程序指令告诉处理器该进行何种操作2、双字是32位比特位,单字是16个比特位,一个字节是8个比特位3、四个通用寄存器:eax、ebx、ecx、edx4、立即数是一个数据,它作为操作数出现在指令中5、mov指令不能直接把一个内存单元中的内容移动到另一个内存单元中6、一般情况下,变量名以字母开头,后面可以跟着字母和数字的任意组合。虽然变量名中可...原创 2018-08-02 00:08:27 · 1546 阅读 · 0 评论 -
汇编小结2:输入与输出
1、使用PROTO与INVOKE汇编指令来实现C语言函数scanf和printf的功能2、注意INVOKE汇编指令会更改寄存器eax、ebx、ecx、edx中的内容3、将格式化信息进行分离以提高汇编语言的可读性4、汇编语言中的0Ah类似于C语言中的\n,C++语言中的endl5、请注意汇编语言中字符串的结束符是06、在进行输出操作的时候,不要忘记为字符串带上ADDR,整形数据则...原创 2018-08-02 23:39:08 · 2181 阅读 · 0 评论 -
汇编小结3:算术运算指令
1、注意不要更改赋值符号右边的变量值2、请注意寄存器edx中存储的是乘法结果的高位部分的比特值3、在进行除法运算之前,不要忘记使用cdq指令(寄存器eax中的内容扩展到寄存器对edx::eax中)4、在实现算术运算指令的时候,按照如下运算符优先级进行: 4.1、最内层括号中的表达式先计算 4.2、一元负号优先于乘法和除法 4.3、乘法、除法优先于假发、减法 ...原创 2018-08-04 13:37:09 · 733 阅读 · 0 评论 -
汇编指令系统总结
针对8086CPU1、数据传送指令比如mov、push、pop、pushf、popf、xchg等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送2、算术运算指令比如add、sub、adc、sbb、inc、dec、cmp、imul、idiv、aaa等都是算术运算指令,这些指令实现寄存器和内存中数据的算术运算。他们的执行结果影响标志寄存器的sf、zf、of、...原创 2018-08-05 15:36:01 · 771 阅读 · 0 评论 -
汇编小结4:选择结构
1、尽可能避免使用包含“否”的指令(例如在jg和jnle之间选择的话,最好用jg)2、在不使用高级汇编指令来实现if语句的时候,条件跳转指令的逻辑实现需要进行反转才能实现if语句3、嵌套if-then-else-if结构比if-then-if结构更好用4、在MASM中没有高级case结构(switch语句),不过可以比较和跳转语句来实现同样的功能5、不用高级汇编指令来构建case结...原创 2018-08-06 23:44:07 · 1204 阅读 · 0 评论 -
附录B小结:二进制、十六进制、逻辑运算与算术运算
1、所有的小数系统都使用了某一个数值为基础的幂值2、记住前15个数值的二进制与十六进制表现形式有助于完成它们之间的转换工作3、在使用无符号数值时,进位标志有助于判断是否发生溢出4、使用逻辑运算符“or”,“and”,和“xor”分别来实现对比特位的设置、测试和反置操作5、表示负数有三种方法:符号数值表示法、1的补码表示法和2的补码表示法。前两种表示法都会遇到正负零的问题,而后一种能...原创 2018-08-09 22:54:23 · 3176 阅读 · 0 评论 -
汇编小结6:逻辑运算指令、移位指令、循环移位指令和堆栈
1、对于与或来说,只有当所有操作数都为真的时候,整个表达式才为真;对于异火来说,当所有操作数都为真的时候,结果正好为假2、在设置、检测或转换比特位的时候,可以分别使用or、and和xor指令3、在使用shl和shr指令的时候,如果后面需要用到原始数据,那么需要对原始数据进行保存4、作为其他操作的副产品,可以使用shl和shr指令对寄存器或内存空间进行清零操作,不过考虑到移位指令比mov...原创 2018-08-11 12:30:07 · 2149 阅读 · 0 评论 -
汇编小结7:过程与宏
1、过程在被调用的时候只有一份程序副本出现,而宏在被调用的时候,每一次对宏的调用都会出现一次宏代码的副本2、过程通常会保存和恢复寄存器的内容,而宏通常不会去保存和恢复寄存器的内容3、过程倾向于节省内存空间,而宏倾向于节省运行时间4、调用过程的时候,使用call指令,后面跟着过程的名字;而调用宏的时候,直接在opcode部分放置宏的名字即可5、请注意一定要在过程中包括ret指令,但是...原创 2018-08-11 16:39:26 · 1091 阅读 · 0 评论 -
汇编小结8:数组
1、dup操作符用于声明大型数组,包括需要初始化的数组和不要初始化的数组2、寄存器ebx可以用作数组的索引,非常类似于高级语言中的变量i3、寄存器esi和edi被称为源索引寄存器和目的索引寄存器。他们类似于指针,对字符操作非常有用4、在处理sdword类型的数组时,请注意偏移量是以4为单位,而不是1,因为一个带符号双字节占用4个字节的内存空间5、带有offset操作符的mov和le...原创 2018-08-11 17:38:39 · 4561 阅读 · 0 评论 -
汇编小结9:字符串
1、movsb指令将寄存器esi所指向的字节型字符串的内容移动到寄存器edi所指向的位置。这里寄存器的值是递减或递增需要依据方向标志的值来决定2、cmpsb指令对寄存器的esi和edi所指向的字符串中的一个字节内容进行比较。这里寄存器的值是递减或递增需要依据方向标志的值来决定。3、不要忘记在cmpsb和movsb指令执行之前,要使用cld指令对方向标志的值进行清零,以实现寄存器esi和ed...原创 2018-08-11 18:08:49 · 621 阅读 · 0 评论 -
汇编小结10:部分机器语言指令
1、分配给指令的比特位数量以及指令中这些比特位是如何分隔的指明了指令中操作码的比特位数量、引用寄存器的比特位数量以及内存地址是如何编址的2、通过观察法可以从大多数汇编语言的机器语言中了解到很多方面的内容3、有时候两个运算操作的差异仅仅在于一个比特位值得不同4、某些指令,比如指令mov eax,mem 占用的内存空间要比指令movreg,mem占用的内存空间少5、由于指令数量和编址模...原创 2018-08-11 18:25:32 · 516 阅读 · 0 评论