汇编(NASM)
文章平均质量分 58
chuanwang66
软件工程专业
展开
-
test指令
首先我们来学习test指令。 test指令在每对操作数的对应数据位之间进行隐含的“与”操作,并设置标志位,但不修改目的操作数。这点和cmp指令有点相似。 test指令与and指令的操作数格式相同。格式: test 寄存器,寄存器test 寄存器,内存单元test 寄存器,立即数test 内存单元,寄存器test 内存单元,立即数 test...原创 2011-05-27 11:22:52 · 2182 阅读 · 0 评论 -
align num
align是个负责内存对齐的宏,它会补充一些数据以便下面的数据对齐。 对齐伪指令格式: ALIGN Num (其中:Num必须是2的幂,如:2、4、8和16等) 伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量必须从下一个能被Num整除的地址开始分配。如果下一个地址正好能被Num整除,那么...原创 2012-09-08 11:09:58 · 131 阅读 · 0 评论 -
C++内嵌汇编(一):反汇编分析C++代码
注:本文是“百度文库”中下载的文章^^谢谢作者 Sam: 使用binutils-2.23.1这个软件中的小工具objdump -d *.o 可以对一个目标文件进行反汇编:)了解反汇编的一些小知识对于我们在开发软件时进行编程与调试大有好处,下面以 VS2008 环境下的 VC++ 简单介绍一下反汇编的一些小东西!1 、新建简单的 VC 控制台应用程序 A 、打开 Micr...原创 2012-03-01 11:13:06 · 598 阅读 · 0 评论 -
loop指令
loop 指令 格式: loop 标号 CPU执行到loop指令的时候,要进行两步操作: (1) (cx) = (cx) - 1 (2) 判断cx中的值,不为0( 类似 C语言中的true) 则转至标号 ( 类似C语言中的goto) 处执行程序,直到为0则向下执行。 由此可见:CX寄存器中的值影响着loop指令的执行结果 。通常我们用l...原创 2011-07-22 10:48:05 · 2084 阅读 · 0 评论 -
MUL、IMUL、DIV
[size=small][color=red]汇编基础一日一学习30 MUL[/color] 大家好,今天这节课中我们来深入的学习下乘法指令。乘法指令有两种,一种是有符号整数乘法另一种是无符号整数乘法,今天我们来学习无符号整数乘法。 MUL是进行无符号乘法的指令。MUL(无符号乘法)指令有三种格式:第一种是将8位的操作数于al相乘...原创 2011-07-21 12:06:49 · 1455 阅读 · 0 评论 -
堆栈操作
[size=medium](软件)堆栈:由程序设计人员在存储器中划出一块存储区作为堆栈,堆栈向地址减小的方向堆积,8086/8088系列计算机的堆栈按照“字”组织。 1、栈底:这个存储区最大地址的字存储单元。 2、栈顶:最后一个已经存放信息的地址单元(字)叫做栈顶。堆栈操作: 1、进栈: SP ...原创 2011-07-21 11:22:24 · 1259 阅读 · 0 评论 -
MOVZX指令
MOVZX指令 汇编语言数据传送指令MOV的变体。无符号扩展,并传送。movzx是将源操作数的内容拷贝到目的操作数,并将该值0扩展至16位或者32位。但是它只适用于无符号整数。 他大致下面的三种格式。 movzx 32位通用寄存器, 8位通用寄存器/内存单元 movzx 32位通用寄存器, 16位通用寄存器/内存单元 movzx 16位通用寄存器, 8位通用寄存器...原创 2011-07-20 09:58:34 · 6156 阅读 · 0 评论 -
跳转指令 jmp、call、ret、retf
JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。 1、jmp指令:不影响堆栈。紧紧进行执行流程的跳转,不会保存返回地址。(书P55)对于jmp而言,长短jmp仅仅是结果不同罢了,短跳转对应段内,长跳转对应段间。 ...原创 2011-06-10 22:42:29 · 762 阅读 · 0 评论 -
lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)
lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)-->lodsb 指令:从esi 指向的源地址中逐一读取一个字符,送入AL 中; (然后,可以先判断这个字符是什么字符,如0dh,0ah 之类等,再执行相应的操作);-->stosb 指令:一般跟随在lodsb 指令后面,将AL 中的字符逐一写入edi 指向的目的地址;当方向标志位D=0时,则esi自动增...原创 2011-05-27 18:12:09 · 748 阅读 · 0 评论 -
8086/8088,80286,80386的CPU寄存器
8086/8088,80286,80386的CPU寄存器 1、Intel8086/8088 CPU共14个16位寄存器 1)通用寄存器(8个):AX累加器AccumulatorBX基址寄存器Base RegisterCX计数寄存器Count RegisterDX数据寄存器Data RegisterSP堆栈指针Stack P...原创 2011-05-27 18:00:05 · 1091 阅读 · 0 评论 -
NASM汇编HelloWorld
一、Linux汇编介绍 1、DOS和Linux汇编主要不同的地方DOS汇编中,大部分工作依靠21号中断(int 21h,DOS中断子程序)来完成,并且BIOS服务中断用int 10h(BIOS中断-显示器输出中断调用)和int 16h(BIOS中断-键盘输入中断调用);在linux中,所有的函数通过linux系统调用最终被内核处理,并且通过int 80h陷入内核代替用户空间执行,这称...原创 2011-05-27 17:53:42 · 870 阅读 · 0 评论 -
lea指令——一个为了方便的多余指令
buf db 'loading ....'lea bp,buf 会出现这样的错误:invalid combination of opcode and operands Google一通,如下几个帖子有帮助:1.官网的LEA解释:http://home.myfairpoint.net/fbkotler/nasmdocc.html#section-A.4.135 简...原创 2012-10-11 11:14:48 · 1258 阅读 · 0 评论