汇编经典教程第2节常用汇编指令

合集下载

汇编笔记2

汇编笔记2

标志寄存器FR

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

OF DF IF TF SF ZF AF PF CF

CF: 进位标志

●运算器在加减法中出现进位或借位时该标志位置1。

PF: 奇偶标志

●运算结果的低8位中1的个数为偶数时该标志位置1。

AF: 半进位标志,

●加法或减法时,位3向位4进位或借位时该标志位置1。用于BCD(十进制)

运算。

ZF: 零标志,

●运算结果为零时该标志位置1。

SF: 符号标志位,

●当运算结果的最高位为1(负数)时该标志位置1。

TF: 单步标志

●该位置1时,8088/8086进入单步运行方式,即每条指令执行完后都产生中

断,供用户检查各个寄存器及内存的当前状况,通常用于调试。

IF: 中断标志

●该位置1时,8088/8086的CPU可以响应外部可屏蔽中断,否则,将外部可

屏蔽中断屏蔽,即使有中断申请信号也不予理会。

DF: 方向标志

●该位置1时,串操作指令为自动减量指令,即从高地址向低地址处理字符串。

串操作指令是对将内存中连续的数据进行逐个自动操作。

OF: 溢出标志

●在算术运算中,带符号数的运算结果超出8位或16位带符号数所能表达的

范围时,该标志位置1 。

按指令的功能分类:

数据传送类

算术运算类

逻辑运算及移位类

串操作类

控制转移类

处理器控制类

按功能分为以下六类:

数据传送指令

算术运算指令

逻辑运算和移位指令

字符串处理指令

控制转移指令

处理器控制指令

传送类指令:

注:

◎数据传送指令共14条;

◎除SAHF和POPF指令外,对标志位均没有影响。

⑴MOV传送指令(Move)

常见汇编语言指令解释

常见汇编语言指令解释

常见汇编语言指令解释:

1.Rn 表示R0~R7中的一个

2.#data 表示8位的数值 00H~FFH

3.direct 表示8位的地址 00H~FFH

4.#data16 16位立即数

5.@Ri 表示寄存器间接寻址只能是R0或者R1

6.@DPTR 表示数据指针间接寻址,用于外部64k的RAM/ROM寻址

7.bit 表示位地址

8.$ 表示当前地址

寄存器寻址 MOV A,R1 将R1中的数值赋予A

直接寻址 MOV A,3AH 将地址3AH中的数值赋予A

立即寻址 MOV A,#3AH 将3AH数值赋予A

mov dptr,#1828h

寄存器间址 MOV A,@Ri 将 Ri中地址的数值赋予A, Ri或是R0或是R1

MOV A,@DPTR

变址寻址 MOVC A,@A+DPTR 以A中的数值为地址偏移量进行查表;变址寻址区是程序存储器ROM,而不是数据存储器RAM

相对寻址 AJMP MAIN 跳转到行号为MAIN处

位寻址 MOV C,7FH 将位地址7FH的数值赋予C

MOV C,2FH.7;

MOV C,ACC.7

MOV A,#3AH 数据传输、赋值命令

PUSH direct 将direct为地址的数值压入堆栈中

POP direct 将direct为地址的数值弹出堆栈

XCH A,direct 将direct中的数值与A进行交换

ADD A,direct 将direct中的数值与A中的数值相加

INC direct 将direct中的数值加1

SUBB A,direct 将A中的数值减去direct中的数值和Cy值,并保存在A中,如果想使用不带Cy减法,可以在运算前对Cy清零 CLR C

常用汇编指令

常用汇编指令

常用汇编指令

汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以

编写出与硬件相关的程序。在计算机科学领域中,汇编指令是非常重

要的,是理解计算机底层原理和实现的关键。本文将介绍一些常用的

汇编指令,以帮助读者更好地理解和应用这些指令。

一、数据传输指令

1. MOV指令:MOV指令用于将数据从一个位置复制到另一个位置。例如,MOV AX, BX将寄存器BX的内容复制到AX中。

2. LEA指令:LEA指令用于将内存地址加载到寄存器中。例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。

3. PUSH指令:PUSH指令用于将数据压入栈中。例如,PUSH AX

将AX中的数据压入栈中。

4. POP指令:POP指令用于从栈中弹出数据。例如,POP BX将栈

中的数据弹出到BX中。

二、算术运算指令

1. ADD指令:ADD指令用于将两个操作数相加,并将结果存储在

目标操作数中。例如,ADD AX, BX将BX的值加到AX中。

2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。例如,SUB AX, BX从AX中减去BX

的值。

3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。例如,MUL BX将累加器的值与BX相乘。

4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。例如,DIV BX将累加器的值除以BX。

三、逻辑运算指令

1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。例如,AND AX, BX将AX与BX进行逻辑与操作。

汇编语言基本指令详解

汇编语言基本指令详解

汇编语言基本指令详解

在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程

语言,用于直接控制计算机硬件。它是机器语言的文本形式,使用符

号和助记符来代表机器指令,相对于高级编程语言来说更加底层。

汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。下

面将详细介绍汇编语言中常用的基本指令。

1. 数据传送指令

数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。

MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。例如,MOV AX, BX可以将BX的值传送给AX。

ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。格式为ADD 目标操作数, 源操作数。例如,ADD AX, BX可以将AX

与BX的值相加,并将结果保存在AX中。

SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存

到目标操作数中。格式为SUB 目标操作数, 源操作数。例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。

MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。格式为MUL 目标操作数, 源操作数。例如,MUL AX, BX可以将AX

与BX的值相乘,并将结果保存在AX中。

2. 算术逻辑指令

算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。

ADD指令在前面已经提到,用于将两个操作数相加。

SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。

MUL指令在前面已经提到,用于将两个操作数相乘。

常用汇编指令表

常用汇编指令表

1. 通用数据传送指令.

MOV 传送字或字节.

MOVSX 先符号扩展,再传送.

MOVZX 先零扩展,再传送.

PUSH 把字压入堆栈.

POP 把字弹出堆栈.

PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.

POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.

PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.

POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.

BSWAP 交换32位寄存器里字节的顺序

XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX ) XADD 先交换再累加.( 结果在第一个操作数里)

XLAT 字节查表转换.

—— BX 指向一张256 字节的表的起点, AL 为表的索引值(0-255,即

0-FFH); 返回AL 为查表结果. ( [BX+AL]->AL )

2. 输入输出端口传送指令.

IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )

OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器)

输入输出端口由立即方式指定时, 其范围是0-255; 由寄存器DX 指定时,

其范围是0-65535.

3. 目的地址传送指令.

LEA 装入有效地址.

例: LEA DX,string ;把偏移地址存到DX.

LDS 传送目标指针,把指针内容装入DS.

汇编常用指令

汇编常用指令

汇编常用指令

1. 前言

汇编语言是一种低级别的计算机语言,它是由一些指令组成的。

指令是一条计算机执行的命令,从基本上讲,这些指令代表着标准的

操作,例如加、减、乘、除、移位和比较等。汇编语言可以通过编写

程序来控制一个计算机的行为,这些程序通常被称为汇编程序。本文

将介绍汇编语言中一些常用的指令。

2. 数据传送指令

数据传送指令是汇编语言中最基本的指令之一,它主要用来将数

据从一个位置传送到另一个位置。在汇编语言中,数据传送指令通常

使用MOV语句来实现。下面是一些常用的数据传送指令:

- MOV AX, BX:将BX中存储的数据传送到AX中。

- MOV AX, [BX]:将BX中存储的地址所指向的数据传送到AX中。

- MOV [BX], AX:将AX中存储的数据传送到BX所指向的地址中。

3. 算术运算指令

算术运算指令主要用来执行各种数学运算,例如加法、减法、乘

法和除法等操作。下面是一些常用的算术运算指令:

- ADD AX, BX:将BX中存储的数据与AX中存储的数据相加,并

将结果存储在AX中。

- SUB AX, BX:将BX中存储的数据从AX中存储的数据中减去,

并将结果存储在AX中。

- MUL BX:将AX中存储的数据与BX中存储的数据相乘,并将结

果存储在AX中。

- DIV BX:将AX中存储的数据除以BX中存储的数据,并将结果

存储在AX和DX中。

4. 位运算指令

位运算是一种在二进制数字级别上的运算,它可以执行各种位操作,例如AND、OR、XOR和NOT等操作。下面是一些常用的位运算指令:- AND AX, BX:将BX中存储的数据与AX中存储的数据按位进行AND运算,并将结果存储在AX中。

汇编语言指令汇总

汇编语言指令汇总

汇编语言指令汇总

汇编语言是一种底层编程语言,用于编写计算机程序。在汇编语言中,指令是执行特定操作的基本单元。以下是一些常见的汇编语言指令的汇总:1.数据传输指令:

-MOV:将源操作数的值复制到目的操作数。

-PUSH:将数据压入栈中。

-POP:从栈中弹出数据。

-LEA:将源操作数的有效地址加载到目的操作数中。

2.算术和逻辑指令:

-ADD:将两个操作数相加,结果存储在目的操作数中。

-SUB:将第二个操作数从第一个操作数中减去,结果存储在目的操作

数中。

-MUL:将两个操作数相乘,结果存储在目的操作数中。

-DIV:将第一个操作数除以第二个操作数,商存储在目的操作数中。3.分支和循环指令:

-JMP:无条件跳转到指定的地址。

-CMP:比较两个操作数的值。

-JZ/JNZ:当比较结果为零/非零时,跳转到指定的地址。

-JE/JNE:当比较结果为相等/不相等时,跳转到指定的地址。

-JG/JGE/JL/JLE:当比较结果为大于/大于等于/小于/小于等于时,跳转到指定的地址。

-LOOP:循环指令,根据计数寄存器的值重复执行指定的代码块。

4.中断指令:

-INT:引发中断,将程序控制权转移到中断服务程序。

-IRET:从中断服务程序返回到调用程序。

5.位操作指令:

-AND/OR/XOR:按位与/或/异或操作。

-NOT:按位取反操作。

-SHL/SHR:逻辑左移/逻辑右移操作。

6.I/O指令:

-IN:从输入端口读取数据。

-OUT:向输出端口写入数据。

7.标志位操作指令:

-CLC:清除进位标志位。

-STC:设置进位标志位。

汇编教程汇编指令详解

汇编教程汇编指令详解

汇编教程汇编指令详解

汇编语言是一种底层的计算机语言,通过使用汇编指令对计算机进行编程。本文将对汇编指令进行详细解释,帮助读者理解和使用汇编语言。

1.数据传送指令:数据传送指令用于将数据从一个位置传送到另一个位置。例如,MOV指令可以将数据从一个寄存器移动到另一个寄存器,或从存储器中读取数据并将其移动到寄存器中。

2.算术运算指令:算术运算指令用于执行各种算术运算,如加法、减法、乘法和除法。例如,ADD指令可以将两个操作数相加,而MUL指令可以将两个操作数相乘。

3.逻辑运算指令:逻辑运算指令用于执行逻辑运算,如与、或、非和异或。例如,AND指令可以对两个操作数执行按位与运算,而OR指令可以对两个操作数执行按位或运算。

4.控制转移指令:控制转移指令用于在程序执行过程中改变控制流。例如,JMP指令可以无条件地将程序跳转到指定的地址,而条件分支指令(如JE、JNE等)可以根据特定的条件决定是否跳转。

5.程序调用指令:程序调用指令用于调用子程序。例如,CALL指令可以将控制交给一个子程序,并在子程序执行完后返回到调用点。

6.中断指令:中断指令用于触发计算机的中断处理程序。例如,INT 指令可以使计算机执行与指定中断向量相关联的中断处理程序。

7.输入输出指令:输入输出指令用于与计算机的外部设备进行数据交换。例如,IN指令可以从外部设备中读取数据,而OUT指令可以向外部设备发送数据。

除了上述常用的汇编指令外,不同的计算机体系结构可能还有其他特定的指令。因此,在学习和使用汇编语言时,了解特定体系结构的指令集是很重要的。

第二章 汇编语言与汇编程序2

第二章 汇编语言与汇编程序2

34
BUFFER1
ACH F8H 56H
被 加 数 数 据 段
2CH
BUFFER2
BEH 47H 9EH 30H
加 数
...
多字节加法示意图
35
程序段如下: MOV AX,BUFFER2+2 ADD BUFFER1+2,AX ;低字相加 MOV AX,BUFFER2 ADC BUFFER1,AX ;高字相加, ;包括低字的进位
27
两个8位数相加时有4种情况:
①无符号数和有符号数均不溢出 二进制相加 0000 1000 +0001 1110 0010 0110 结果38 无符号数加 有符号数加 8 +8 + 30 + (+30) 38 +38 CF=0 OF=0
28
② 无符号数溢出
0000 1000 +1111 1101 10000 0101 结果5 0000 1000 +0111 1101 1000 0101 结果-123 (补码表示) 8 +253 261 CF=1 8 +125 133 CF=0 +8 +(-3) +5 OF=0 +8 +(+125) +133 OF=1
16
② 弹出指令 POP dest
例:POP BX ;将栈顶内容弹至BX 执行操作:(BL)←(SP) (BH)←(SP)+1 (SP)←(SP)+2

常用的汇编指令与技巧(收藏)

常用的汇编指令与技巧(收藏)

常⽤的汇编指令与技巧(收藏)

1.数据传送指令:mov

move r1,r2 /*r1=r2*/

move r1,#4096 /*r1=4096*/

2.⼤范围的地址读取指令:ldr

ldr r1,=0x123456789 /*r1=0x123456789*/

ldr r1,=label /*获取绝对地址,即label的地址*/

label:

……

3.内存访问指令(当ldr后⾯没有=号时为内存读取指令)

读取指令:ldr

ldr r1 ,[r2,#4] /*将内存地址为r2+4的数据读取到r1中,相当于C语⾔中的*操作*/

ldr r1,[r2],#4 /*将内存地址为r2的数据读取到r1中,再将地址加4,r2=r2+4*/

ldr pc,_irq /*pc=*(_irq)将标号中的内容放⼊pc中

_irq:

.word do_swi

存储指令:str

str r1 ,[r2,#4] /*将r1的值存⼊地址为r2+4的内存中*/

str r1,[r2],#4 /*将r1的值存⼊地址为r2的内存中,再将地址加4,r2=r2+4*/

4.批量内存访问指令ldm,stm

格式:ldm {cond} <addresing_mode> <rn> {!} <register list> {^}

stm{cond} <addresing_mode> <rn> {!} <register list> {^}

格式说明:

1){cond}:表⽰指令的执⾏条件,根据cpsr寄存器中的条件标志位决定是否执⾏该条指令,每条ARM指令包含4bit的条件码域,

第2节 汇编语言基本语法

第2节 汇编语言基本语法

LENGTH:返回一个变量所包含的数据个数。 :返回一个变量所包含的数据个数。 SIZE:返回一个变量所占用的内存字节数。 :返回一个变量所占用的内存字节数。 TYPE DATA1 例如: DATA1 DW 20 DUP(0) 例如: LENGTH DATA1 SIZE DATA1
Байду номын сангаас
5.合成运算符 合成运算符 也称为修改属性运算符。 也称为修改属性运算符。它能修改变量或标号的原有的类型属性并赋 予新的类型。 予新的类型。 ①PTR 的格式 类型 PTR 表达式 类型可以是 可以是BYTE、WORD、DWORD、NEAR、FAR。 类型可以是 、 、 、 、 。 表达式是被修改的变量或标号 是被修改的变量或标号。 表达式是被修改的变量或标号。 例如: 1,2,34, 例如: DAT DB 1,2,34,78 若 MOV AX,DAT , 则该指令非法。 则该指令非法。 则该指令正确。 则该指令正确。 例如: 例如: DNUM EQU THIS WORD NUM DB 1,2,34,78 , , , 若 MOV AX,WORD PTR DAT , ②THIS 的格式 新符号名 EQU THIS 类型 原符号名 类型 参数
4.2
汇编语言基本语法
4.2.1 常量、变量与标号 常量、
1. 常量 (1) 数值常量 数值常量可以是二进制、八进制、 数值常量可以是二进制、八进制、十进制和十六进制数 (2) 字符串常量 包含在单引号中的若干个字符组成字符串常量 (3) 符号常量 常量用符号名来代替就是符号常量。 常量用符号名来代替就是符号常量。 例如: 例如: COUNT EQU 21 COUNT = 21

常用汇编指令

常用汇编指令

cmp a,b // 比较a与bmov a,b // 把b值送给a值,使a=bret // 返回主程序nop // 无作用call // 调用子程序,子程序以ret结尾je或jz // 相等则跳(机器码是74或84)jne或jnz // 不相等则跳(机器码是75或85)jmp // 无条件跳(机器码是EB)jb // 若小于则跳ja // 若大于则跳jg // 若大于则跳jge // 若大于等于则跳jl // 若小于则跳pop xxx // xxx出栈push xxx // xxx压栈test 指令会影响到 S,Z 和 P 三个标记位. 最常见的用来判断是否为 0, 对 S 的使用要少很多, P 就更少. 例如 test al, al 就是判别 al 是否为 0, 结果看 Z 标记位. 如果 AL=0, 那 0 AND 0 = 0, 结果就是 ZF=1; 如果 AL <> 0, 比如是 AL=2, 那 2 AND 2 = 2 <> 0, 因此 ZF=0. 或者是 test al, 04 就是判别 AL 的 bit2 是否为 0. 如果为 0, 那 结果就是 00, ZF=1; 否则结果为 04, ZF=0. 04 当然也可以是其它的位组合, 可对数据的处理和判别的要求了. ★★破解经典句式★★1.(最常用)mov eax [ ]mov edx [ ] call 00?????? 关键calltest eax eax jz(jnz)或 jne(je) 关键跳转2 (最常用)mov eax [ ]mov edx [ ]call 00?????? 关键calljne(je) 关键跳转3mov eax [ ]mov edx [ ]cmp eax,edxjnz(jz)4lea edi [ ]lea esi [ ]repz cmpsdjz(jnz)5mov eax [ ]mov edx [ ]call 00??????setz (setnz) al (bl,cl…)6mov eax [ ] mov edx [ ] call 00??????test eax eaxsetz (setnz) bl,cl…7call 00?????? ***push eax (ebx,ecx…)…………call 00??????pop eax (ebx,ecx…)test eax eaxjz(jnz)一、数据传输指令 ─────────────────────────────────────── 它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据. 1. 通用数据传送指令. MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈. POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈. PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈. POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈. BSWAP 交换32位寄存器里字节的顺序 XCHG 交换字或字节.

汇编语言常用指令大全

汇编语言常用指令大全

汇编语言常用指令大全

汇编语言是一种计算机编程语言,使用指令来控制计算机硬件执行特定的操作。在本文中,我们将介绍一些常用的汇编语言指令,以帮助读者更好地理解和学习汇编语言。

一、数据传输指令

1. MOV:将数据从一个位置复制到另一个位置。

例子:MOV AX, BX 将寄存器BX中的值复制到寄存器AX中。

2. PUSH:将数据压入堆栈。

例子:PUSH AX 将寄存器AX中的值压入堆栈。

3. POP:从堆栈中弹出并获取数据。

例子:POP AX 从堆栈中弹出一个值,并将其存入寄存器AX中。

二、算术指令

1. ADD:将两个操作数相加。

例子:ADD AX, BX 将寄存器AX和BX中的值相加,并将结果存入寄存器AX中。

2. SUB:将一个操作数从另一个操作数中减去。

例子:SUB AX, BX 将寄存器BX中的值从寄存器AX中减去,并将结果存入寄存器AX中。

3. MUL:将两个操作数相乘。

例子:MUL AX, BX 将寄存器AX和BX中的值相乘,并将结果存入寄存器AX中。

三、逻辑指令

1. AND:进行逻辑与操作。

例子:AND AX, BX 对寄存器AX和BX中的值进行逻辑与操作,并将结果存入寄存器AX中。

2. OR:进行逻辑或操作。

例子:OR AX, BX 对寄存器AX和BX中的值进行逻辑或操作,并将结果存入寄存器AX中。

3. NOT:进行逻辑非操作。

例子:NOT AX 对寄存器AX中的值进行逻辑非操作。

四、条件分支指令

1. JMP:无条件跳转到指定的地址。

例子:JMP label 跳转到标记为label的地址。

汇编指令大全

汇编指令大全

汇编指令大全

1. 引言

汇编语言是一种基于计算机硬件体系结构的低级语言。它用于编写与硬件交互的程序,并且具有直接访问计算机底层硬件的能力。汇编指令是汇编语言中的基本操作指令,用于执行各种计算机操作,如数据传输、算术运算和逻辑运算等。本文将为您介绍一些常见的汇编指令。

2. 数据传输指令

数据传输指令用于在寄存器之间或内存和寄存器之间传输数据。

2.1 MOV - 数据传送指令

mov是最常见的数据传送指令之一。它用于将数据从一个源操作数传送到一个目的操作数。

mov destination, source

其中,destination是目的操作数,source是源操作数。这两个操作数可以是寄存器、内存地址或立即数。

2.2 LEA - 加载有效地址指令

lea指令用于加载一个有效地址到一个目的操作数。

lea destination, source

其中,destination是目的操作数,通常为一个寄存器,source是一个内存地址。

3. 算术运算指令

算术运算指令用于执行加法、减法、乘法和除法等算术运算。

3.1 ADD - 加法指令

add指令用于将两个操作数相加,并将结果存储在目的操作数中。

add destination, source

其中,destination是目的操作数,source是源操作数。这两个操作数可以是寄存器或内存地址。

3.2 SUB - 减法指令

sub指令用于将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

sub destination, source

其中,destination是目的操作数,source是源操作数。这两个操作数可以是寄存器或内存地址。

汇编指令大全

汇编指令大全

汇编指令大全

汇编语言是一种低级语言,它直接面向计算机硬件,使用符号指令来代替机器

语言指令,能够直接控制计算机硬件。汇编指令是汇编语言中最基本的部分,它直接对应着计算机的机器指令,是程序员编写程序时直接使用的指令集合。

在汇编指令大全中,我们将详细介绍常见的汇编指令及其功能,帮助读者更好

地理解和掌握汇编语言。

1. 数据传送指令。

数据传送指令是汇编语言中最基本的指令之一,用于在寄存器和内存之间传送

数据。常见的数据传送指令包括MOV、XCHG等,它们可以将数据从一个位置传

送到另一个位置,是程序中最常用的指令之一。

2. 算术运算指令。

算术运算指令用于对数据进行算术运算,包括加法、减法、乘法、除法等。常

见的算术运算指令有ADD、SUB、MUL、DIV等,它们可以对寄存器或内存中的

数据进行相应的算术运算,并将结果存储到指定的位置。

3. 逻辑运算指令。

逻辑运算指令用于对数据进行逻辑运算,包括与、或、非、异或等。常见的逻

辑运算指令有AND、OR、NOT、XOR等,它们可以对数据进行相应的逻辑运算,并将结果存储到指定的位置。

4. 控制转移指令。

控制转移指令用于改变程序的执行顺序,包括无条件转移和条件转移两种。常

见的控制转移指令有JMP、JZ、JG等,它们可以根据指定的条件改变程序的执行

流程,实现程序的控制流转移。

5. 程序中断指令。

程序中断指令用于在程序执行过程中产生中断,包括内部中断和外部中断两种。常见的程序中断指令有INT、IRET等,它们可以在特定的条件下中断程序的执行,并在中断处理程序执行完毕后恢复程序的执行。

汇编语言入门学习2-汇编语言代码基本结构

汇编语言入门学习2-汇编语言代码基本结构

汇编语⾔⼊门学习2-汇编语⾔代码基本结构

从⼀个例⼦开始

根据个⼈习惯,我更愿意从⼀个实例开始某种语⾔的学习。

这⾥以⼀个 16 位汇编程序为例:

我们在 xp 虚拟机中新建⽂件 hello.asm,⽤记事本编辑:

1 data segment

2 abc db "hello, world!", 0Dh, 0Ah, "$"

3 data ends

4 ;这是⼀条注释

5 code segment

6 assume cs:code, ds:data

7 main:

8 mov ax, data

9 mov ds, ax

10 mov ah, 9

11 mov dx, offset abc

12 int 21h

13 mov ah, 4Ch

14 int 21h

15 code ends

16 end main

将其放在 \Masm ⽬录中。该⽬录中同时包含了 LINK.EXE 以及 MASM.EXE。我们在 command 中进⼊对应⽬录,输⼊指令:

masm hello;

link hello;

hello

我们通过运⾏ masm.exe 来编译 hello[.asm],然后通过 link.exe 来连接 hello[.obj],最后运⾏ hello[.exe]。结果显⽰: hello, world! 。

下⾯,我们对代码进⾏逐句解析:

对于 8086PC 机,在编程时可以根据需要将⼀组内存单元定义为⼀个段(机器语⾔代码也存储在内存中)。例如第 1 ⾏和第 5⾏就分别定义了名为 data 的段和名为 code 的段。第 3 ⾏和第 15 ⾏分别是这两个段的结束。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

辅导教师郁金香:QQ 150330575
字符串存储指令 STOS
• 格式: STOS OPRD • 功能: 把AL(字节)或AX(字)中
的数据存储到DI为目的串地址 指针所寻址的存储器单元中去. 指针DI将根据DF的值进行自动 调整. • 说明:在VC的DEBUG版里经常 用来为局部变量空间写上 cccccccc指令
辅导教师郁金香:QQ 150330575
堆栈操作指令 PUSH和POP
• 格式: PUSH XXXX

POP XXXX
• 功能: 实现压入操作的指令是 PUSH指令;实现弹出操作的指
令是POP指令.
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
加减法操作add和sub指令
• 格式: ADD XXXX1,XXXX2 • 功能: 两数相加
• 格式: SUB XXXX1,XXXXX2 • 功能: 两个操作数的相减,即
从OPRD1中减去OPRD2,其结果 放在OPDR1中.
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
调用和返回函数CALL和RET(RETN)
• 过程调用指令 CALL • 格式: CALL XXXX • 功能: 过程调用指令
• 该指使用最频繁
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
逻辑异或运算XOR 逻辑或指令 OR
• 格式: XOR OPRD1,OPRD2
• 格式: OR OPRD1,OPRD2
• 功能: 实现两 个操作数按位 ‘异或’运算, 结果送至目的 操作数中.
• 功能: OR指令 完成对两个操 作数按位的 ‘或’运算,结 果送至目的操 作数中,本指令 可以进行字节 或字的‘或’ 运算.
第二节 常用汇编指令
• 说明:汇编语言也是一门语言, 其指令相当的多,非常丰富, 在此我只介绍几个常用的、简 单的汇编指令,让大家与我一 同入门。
• 其实在超多的计算机知识领域 里我和大家一样只是个学生而 已。
• 同学级别:有一点编程经验, 对反汇编感兴趣、零基础的朋 友。
初级反汇编视频教程--啊冲
跳转指令JXX
• JMP:无条件转移指令 • JG/JNLE: 大于/不小于等于时
转移 • JL/JNGE: 小于/不大于等于时
转移 • JGE/JNL: 大于等于/不小于时
转移 • JLE/JNG:小于等于/不大于时
转移 • JE/JZ :等于时转移
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
• 返回指令 RET
• 格式: RET
• 功能: 当调用的过程结束后实 现从过程返回至原调用程序的 下一条指令,本指令不影响标 志位.
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
数据传送MOV
• 格式: MOV XXXX1,XXXX2
• 功能: 本指令将一个源操作数 送到目的操作数中,即XXXX1<-XXXX2.
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
有效地址传送指令 LEA
• 格式: LEA OPRD1,OPRD2 • 功能: 将源操作数给出的有效
地址传送到指定的的寄存器中.
• 实际上,有时候lea用来做mov 同样的事情,比如赋值:
• Lea edi,[ebp-0cch]
初级反汇编视频教程--啊冲
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
比效指令 CMP(CoMPare)
• 格式: CMPቤተ መጻሕፍቲ ባይዱOPRD1,OPRD2
• 功能: 对两数进行相减,进行 比较.
• 说明:经常与跳转指令相配合 来形成循环或跳出操作
初级反汇编视频教程--啊冲
辅导教师郁金香:QQ 150330575
相关文档
最新文档